Advertisement
Guest User

Untitled

a guest
Apr 12th, 2019
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 247.89 KB | None | 0 0
  1. CREATE OR REPLACE PACKAGE IMP70_PKG_KONVE
  2. IS
  3.  
  4.  
  5. --Процедура добавления записи в лог импорта
  6. PROCEDURE LG
  7. (
  8.   pnLOG_IDENT         IN NUMBER,
  9.   ppsLOG_CODE         IN VARCHAR2,
  10.   ppsLOG_TEXT         IN VARCHAR2,
  11.   ppsINFO1            IN VARCHAR2 DEFAULT NULL,
  12.   ppsINFO2            IN VARCHAR2 DEFAULT NULL,
  13.   ppsINFO3            IN VARCHAR2 DEFAULT NULL
  14. );
  15.  
  16. --функция перекодировки кода района из файла импорта в код МИС
  17. FUNCTION GET_RAIONCODE_BY_KODRAI
  18. (
  19.   psKOD_RAI           IN VARCHAR2
  20. ) RETURN VARCHAR2;
  21.  
  22. --функция проверки наличия пациента в D_AGENTS
  23. PROCEDURE GET_AGENT_ID
  24. (
  25.   psFIO               IN  VARCHAR2,
  26.   pdBIRTHDATE         IN  DATE,
  27.   psSNILS             IN  VARCHAR2,
  28.   pnAGENTS_ID         OUT NUMBER,
  29.   psERROR_CODE        OUT VARCHAR2
  30. );
  31.  
  32. --функция проверки наличия пациента в D_AGENTS
  33. PROCEDURE GET_GEOTYPE_CODE_NASP
  34. (
  35.   pnLPU               IN  NUMBER,
  36.   psNASP              IN  VARCHAR2,
  37.   pnCITY              OUT NUMBER,
  38.   psERROR_CODE        OUT VARCHAR2
  39. );
  40.  
  41. --Функция выделения из ФИО фамилии, имени, отчества
  42. FUNCTION GET_PART_FIO
  43. (
  44.   psFIO               IN  VARCHAR2,     -- ФИО
  45.   psPART_NAME         IN  VARCHAR2      -- какуй часть ФИО необходимо получить (FIRSTNAME - имя, SURNAME - фамилия, LASTNAME - отчество)
  46. ) RETURN VARCHAR2;
  47.  
  48. --Функция конвертации пола лица в числовой вид
  49. FUNCTION CONVERT_POL_TO_NUMBER
  50. (
  51.   psPOL               IN  VARCHAR2      -- пол лица
  52. ) RETURN NUMBER;
  53.  
  54. --Функция получения улицы из адреса
  55. FUNCTION GET_STREET_FROM_ADRESS
  56. (
  57.   psADRESS            IN  VARCHAR2      -- адрес пациента
  58. ) RETURN VARCHAR2;
  59.  
  60. --Функция получения номера дома из адреса (символы между первым символом '-' и предыдущим пробелом)
  61. FUNCTION GET_HOUSE_FROM_ADRESS
  62. (
  63.   psADRESS            IN  VARCHAR2      -- адрес пациента
  64. ) RETURN VARCHAR2;
  65.  
  66. --Функция получения литеры дома из адреса
  67. FUNCTION GET_LETTER_FROM_HOUSE
  68. (
  69.   psHOUSE             IN  VARCHAR2      -- номер дома, возможно содержащий литеру
  70. ) RETURN VARCHAR2;
  71.  
  72. --Функция получения квартиры из адреса (цифры после первого символа '-')
  73. FUNCTION GET_FLAT_FROM_ADRESS
  74. (
  75.   psADRESS            IN  VARCHAR2      
  76. ) RETURN VARCHAR2;
  77.  
  78. --Процедура получения данных инвалидности из строки файла
  79. PROCEDURE GET_INABILITY_DATA
  80. (
  81.   psINABILITY         IN  VARCHAR2,
  82.   pnINABILITY_GROUP   OUT NUMBER,
  83.   pdINABILITY_DATE    OUT DATE
  84. );
  85.  
  86.  
  87. --Процедура для импорта данных из файла TUBKONVE.dbf через таблицу импорта IMP70_TUBKONVE
  88. PROCEDURE IMP70_P_TUBKONVE
  89. (
  90.   pnLPU                                IN  NUMBER,
  91.   pnLOG_IDENT                          OUT NUMBER,
  92.   pnERR_IGNORE                         IN  NUMBER DEFAULT 0
  93. );
  94.  
  95. --Процедура для импорта данных из файла UMEKONVE.dbf через таблицу импорта IMP70_UMEKONVE
  96. PROCEDURE IMP70_P_UMEKONVE
  97. (
  98.   pnLPU                                IN  NUMBER,
  99.   pnLOG_IDENT                          OUT NUMBER,
  100.   pnERR_IGNORE                         IN  NUMBER DEFAULT 0
  101. );
  102.  
  103. --Процедура для импорта данных из файла HPKONVE.dbf через таблицу импорта IMP70_HPKONVE
  104. PROCEDURE IMP70_P_HPKONVE
  105. (
  106.   pnLPU                                IN  NUMBER,
  107.   pnLOG_IDENT                          OUT NUMBER,
  108.   pnERR_IGNORE                         IN  NUMBER DEFAULT 0
  109. );
  110.  
  111. --Процедура для импорта данных из файла GR0KONVE.dbf через таблицу импорта IMP70_GR0KONVE
  112. PROCEDURE IMP70_P_GR0KONVE
  113. (
  114.   pnLPU                                IN  NUMBER,
  115.   pnLOG_IDENT                          OUT NUMBER,
  116.   pnERR_IGNORE                         IN  NUMBER DEFAULT 0
  117. );
  118.  
  119.  
  120. END IMP70_PKG_KONVE;
  121. /
  122.  
  123. CREATE OR REPLACE PACKAGE BODY IMP70_PKG_KONVE
  124. IS
  125.  
  126.   nNOS_REG_TYPES_TUB                                       CONSTANT D_NOS_REGISTR_TYPES.T_CODE%TYPE := 12;
  127.                                                                                -- тип нозологического регистра "ТуберкулезБП"
  128.   nAO_TYPE_CITY                                            CONSTANT D_ADDROBJECTS.AO_CODE%TYPE := 3;
  129.                                                                                -- тип адресного объекта "Город"
  130.   nAO_TYPE_NASP                                            CONSTANT D_ADDROBJECTS.AO_CODE%TYPE := 4;
  131.                                                                                -- тип адресного объекта "Населенный пункт"
  132.   nAO_TYPE_STREET                                          CONSTANT D_ADDROBJECTS.AO_CODE%TYPE := 5;
  133.                                                                                -- тип адресного объекта "Улица"
  134.   nDTUB_CHEMO_OUT_UMER                                     CONSTANT D_DTUB_CHEMO_OUT.CO_CODE%TYPE := 3;
  135.                                                                                -- исход курса химиотерапии "Умер"
  136.  
  137.  
  138. -----------------------------------------------------------------------------------------------------------------------------
  139. --Процедура добавления записи в лог импорта
  140. PROCEDURE LG
  141. (
  142.   pnLOG_IDENT         IN NUMBER,
  143.   ppsLOG_CODE         IN VARCHAR2,
  144.   ppsLOG_TEXT         IN VARCHAR2,
  145.   ppsINFO1            IN VARCHAR2 DEFAULT NULL,
  146.   ppsINFO2            IN VARCHAR2 DEFAULT NULL,
  147.   ppsINFO3            IN VARCHAR2 DEFAULT NULL
  148. )
  149. IS
  150. BEGIN
  151.   D_PKG_IMP_LOG.ADD(pnLOG_IDENT, ppsLOG_CODE, ppsLOG_TEXT, ppsINFO1, ppsINFO2, ppsINFO3);
  152. END LG;
  153. -----------------------------------------------------------------------------------------------------------------------------
  154.  
  155. -----------------------------------------------------------------------------------------------------------------------------
  156. --функция перекодировки кода района из файла импорта в код МИС
  157. FUNCTION GET_RAIONCODE_BY_KODRAI
  158. (
  159.   psKOD_RAI           IN VARCHAR2
  160. ) RETURN VARCHAR2
  161. IS
  162.   sRAION_CODE         D_RAIONS.R_CODE%TYPE;
  163. BEGIN
  164.  
  165.   SELECT vkr.MIS_CODE
  166.     INTO sRAION_CODE
  167.     FROM IMP70_V_KONVE_RAION vkr
  168.    WHERE UPPER(vkr.FILE_CODE) = UPPER(psKOD_RAI)
  169.      AND ROWNUM = 1;
  170.      
  171.   RETURN sRAION_CODE;
  172.  
  173. EXCEPTION
  174.   WHEN NO_DATA_FOUND THEN
  175.     RETURN NULL;
  176. END GET_RAIONCODE_BY_KODRAI;
  177. -----------------------------------------------------------------------------------------------------------------------------
  178.  
  179. -----------------------------------------------------------------------------------------------------------------------------
  180. --функция проверки наличия пациента в D_AGENTS
  181. PROCEDURE GET_AGENT_ID
  182. (
  183.   psFIO               IN  VARCHAR2,
  184.   pdBIRTHDATE         IN  DATE,
  185.   psSNILS             IN  VARCHAR2,
  186.   pnAGENTS_ID         OUT NUMBER,
  187.   psERROR_CODE        OUT VARCHAR2
  188. )
  189. IS
  190. BEGIN
  191.  
  192.   SELECT a.ID
  193.     INTO pnAGENTS_ID
  194.     FROM D_AGENTS a
  195.    WHERE UPPER(a.SURNAME||a.FIRSTNAME||a.LASTNAME) = UPPER(regexp_replace(psFIO,'\s',''))
  196.      AND a.BIRTHDATE = pdBIRTHDATE
  197.      AND (a.SNILS = regexp_replace(psSNILS,'\D','')
  198.           OR psSNILS IS NULL
  199.           OR UPPER(psSNILS) = 'НЕТ');
  200.  
  201. EXCEPTION
  202.   WHEN NO_DATA_FOUND THEN
  203.     pnAGENTS_ID  := NULL;
  204.     psERROR_CODE := 'NDF_AGENTS';
  205.   WHEN TOO_MANY_ROWS THEN
  206.     pnAGENTS_ID       := NULL;
  207.     psERROR_CODE := 'TMR_AGENTS';
  208. END GET_AGENT_ID;
  209. -----------------------------------------------------------------------------------------------------------------------------
  210.  
  211. -----------------------------------------------------------------------------------------------------------------------------
  212. --функция проверки наличия пациента в D_AGENTS
  213. PROCEDURE GET_GEOTYPE_CODE_NASP
  214. (
  215.   pnLPU               IN  NUMBER,
  216.   psNASP              IN  VARCHAR2,
  217.   pnCITY              OUT NUMBER,
  218.   psERROR_CODE        OUT VARCHAR2
  219. )
  220. IS
  221. BEGIN
  222.  
  223.   SELECT g.ID
  224.     INTO pnCITY
  225.     FROM D_GEOGRAFY g
  226.    WHERE UPPER(REPLACE(g.GEONAME,' ','')) = UPPER(REPLACE(psNASP,' ',''))
  227.      AND g.geoloctype IN (SELECT gt.id
  228.                             FROM D_GEOGRAFYTYPES gt
  229.                            WHERE LOWER(gt.code) = (SELECT LOWER(vgn.GEOTYPE_CODE)
  230.                                                      FROM IMP70_V_KONVE_GEOTYPE_NASP vgn
  231.                                                     WHERE UPPER(REPLACE(vgn.NASP_NAME,' ','')) = UPPER(REPLACE(psNASP,' ',''))
  232.                                                       AND ROWNUM = 1)
  233.                              AND gt.VERSION = D_PKG_VERSIONS.GET_VERSION_BY_LPU(0,pnLPU,'GEOGRAFYTYPES')
  234.                              AND gt.AO_TYPE IN (nAO_TYPE_CITY,nAO_TYPE_NASP)
  235.                          );
  236.  
  237. EXCEPTION
  238.   WHEN NO_DATA_FOUND THEN
  239.     pnCITY       := NULL;
  240.     psERROR_CODE := 'NDF_GEOGRAFY';
  241.   WHEN TOO_MANY_ROWS THEN
  242.     pnCITY       := NULL;
  243.     psERROR_CODE := 'TMR_GEOGRAFY';
  244. END GET_GEOTYPE_CODE_NASP;
  245. -----------------------------------------------------------------------------------------------------------------------------
  246.  
  247.  
  248. -----------------------------------------------------------------------------------------------------------------------------
  249. --Функция выделения из ФИО фамилии, имени, отчества
  250. FUNCTION GET_PART_FIO
  251. (
  252.   psFIO               IN  VARCHAR2,     -- ФИО
  253.   psPART_NAME         IN  VARCHAR2      -- какуй часть ФИО необходимо получить (FIRSTNAME - имя, SURNAME - фамилия, LASTNAME - отчество)
  254. ) RETURN VARCHAR2
  255. IS
  256.   sPART_VALUE         D_PKG_STD.tSTR;
  257. BEGIN
  258.  
  259.   CASE WHEN UPPER(psPART_NAME) = 'FIRSTNAME' THEN sPART_VALUE := REGEXP_SUBSTR(psFIO,'(\S*)',1,3);
  260.        WHEN UPPER(psPART_NAME) = 'SURNAME'   THEN sPART_VALUE := REGEXP_SUBSTR(psFIO,'(\S*)',1,1);
  261.        WHEN UPPER(psPART_NAME) = 'LASTNAME'  THEN sPART_VALUE := REGEXP_SUBSTR(psFIO,'(\S*)',1,5);
  262.   END CASE;
  263.  
  264.   RETURN sPART_VALUE;
  265.  
  266. END GET_PART_FIO;
  267. -----------------------------------------------------------------------------------------------------------------------------
  268.  
  269. -----------------------------------------------------------------------------------------------------------------------------
  270. --Функция конвертации пола лица в числовой вид
  271. FUNCTION CONVERT_POL_TO_NUMBER
  272. (
  273.   psPOL               IN  VARCHAR2      -- пол лица
  274. ) RETURN NUMBER
  275. IS
  276.   nPOL                NUMBER;
  277. BEGIN
  278.  
  279.   CASE WHEN LOWER(psPOL) = 'м' THEN nPOL := 1;
  280.        WHEN LOWER(psPOL) = 'ж' THEN nPOL := 0;
  281.   END CASE;
  282.  
  283.   RETURN nPOL;
  284.  
  285. END CONVERT_POL_TO_NUMBER;
  286. -----------------------------------------------------------------------------------------------------------------------------
  287.  
  288. -----------------------------------------------------------------------------------------------------------------------------
  289. --Функция получения улицы из адреса
  290. FUNCTION GET_STREET_FROM_ADRESS
  291. (
  292.   psADRESS            IN  VARCHAR2      -- адрес пациента
  293. ) RETURN VARCHAR2
  294. IS
  295.   sSTREET             D_PKG_STD.tSTR;
  296. BEGIN
  297.   sSTREET := SUBSTR(psADRESS,1, (CASE WHEN INSTR(psADRESS,'-')=0 THEN LENGTH(psADRESS)+1 ELSE INSTR(psADRESS,'-') END)-1);
  298.   sSTREET := RTRIM(sSTREET,'0123456789/');
  299.  
  300.   --проверим, нет ли запятых в названии улицы
  301.   --если есть, то удалим всё до неё вместе с ней
  302.   IF INSTR(sSTREET,',') > 0 THEN
  303.     sSTREET := SUBSTR(sSTREET, INSTR(sSTREET,',',-1)+1);
  304.   END IF;
  305.  
  306.   RETURN TRIM(sSTREET);
  307.  
  308. END GET_STREET_FROM_ADRESS;
  309. -----------------------------------------------------------------------------------------------------------------------------
  310.  
  311. -----------------------------------------------------------------------------------------------------------------------------
  312. --Функция получения номера дома из адреса (символы между первым символом '-' и предыдущим пробелом)
  313. FUNCTION GET_HOUSE_FROM_ADRESS
  314. (
  315.   psADRESS            IN  VARCHAR2      -- адрес пациента
  316. ) RETURN VARCHAR2
  317. IS
  318.   sHOUSE              D_PKG_STD.tSTR;
  319. BEGIN
  320.  
  321.   --проверим, есть ли цифры в адресе
  322.   IF regexp_instr(psADRESS,'\d+') <> 0 THEN
  323.     WITH first_adres AS (SELECT SUBSTR(psADRESS,1, (CASE WHEN INSTR(psADRESS,'-')=0 THEN LENGTH(psADRESS)+1 ELSE INSTR(psADRESS,'-') END)-1) adres
  324.                            FROM dual)
  325.     SELECT SUBSTR(adres, INSTR(adres,' ',-1)+1)
  326.       INTO sHOUSE
  327.       FROM first_adres;
  328.    
  329.     --если в доме не осталось цифр, значит это не номер дома
  330.     IF regexp_instr(sHOUSE,'\d+') = 0 THEN
  331.       sHOUSE := NULL;
  332.     END IF;
  333.   END IF;
  334.  
  335.   RETURN sHOUSE;
  336.  
  337. END GET_HOUSE_FROM_ADRESS;
  338. -----------------------------------------------------------------------------------------------------------------------------
  339.  
  340. -----------------------------------------------------------------------------------------------------------------------------
  341. --Функция получения литеры дома из адреса
  342. FUNCTION GET_LETTER_FROM_HOUSE
  343. (
  344.   psHOUSE             IN  VARCHAR2      -- номер дома, возможно содержащий литеру
  345. ) RETURN VARCHAR2
  346. IS
  347.   sHOUSELIT           D_PKG_STD.tSTR;
  348. BEGIN
  349.   --получим литеру дома, если она есть
  350.   IF regexp_instr(psHOUSE,'\d+') <> 0 THEN
  351.     sHOUSELIT := TRIM(both ' ' FROM regexp_substr(psHOUSE,'(\D*)$'));
  352.     sHOUSELIT := SUBSTR(sHOUSELIT,1,1); -- литерой может быть только 1 символ
  353.   END IF;
  354.  
  355.   RETURN sHOUSELIT;
  356.  
  357. END GET_LETTER_FROM_HOUSE;
  358. -----------------------------------------------------------------------------------------------------------------------------
  359.  
  360. -----------------------------------------------------------------------------------------------------------------------------
  361. --Функция получения квартиры из адреса (цифры после первого символа '-')
  362. FUNCTION GET_FLAT_FROM_ADRESS
  363. (
  364.   psADRESS            IN  VARCHAR2      
  365. ) RETURN VARCHAR2
  366. IS
  367.   sFLAT               D_PKG_STD.tSTR;
  368. BEGIN
  369.   WITH first_adres AS (SELECT SUBSTR(psADRESS,NULLIF(INSTR(psADRESS,'-'),0)+1) adres
  370.                          FROM dual)
  371.   SELECT regexp_substr(adres,'(\d*)')
  372.     INTO sFLAT
  373.     FROM first_adres;
  374.  
  375.   RETURN sFLAT;
  376.  
  377. END GET_FLAT_FROM_ADRESS;
  378. -----------------------------------------------------------------------------------------------------------------------------
  379.  
  380. -----------------------------------------------------------------------------------------------------------------------------
  381. --Процедура получения данных инвалидности из строки файла
  382. PROCEDURE GET_INABILITY_DATA
  383. (
  384.   psINABILITY         IN  VARCHAR2,
  385.   pnINABILITY_GROUP   OUT NUMBER,
  386.   pdINABILITY_DATE    OUT DATE
  387. )
  388. IS
  389.   sINABILITY_GROUP    D_PKG_STD.tSTR;
  390. BEGIN  
  391.  
  392.   pnINABILITY_GROUP := NULL;
  393.   pdINABILITY_DATE  := NULL;
  394.  
  395.   --получим группу инвалидности
  396.   sINABILITY_GROUP := SUBSTR(psINABILITY,1,INSTR(psINABILITY,' ')-1);
  397.  
  398.   CASE WHEN sINABILITY_GROUP = 'I'   THEN pnINABILITY_GROUP := 1;
  399.        WHEN sINABILITY_GROUP = 'II'  THEN pnINABILITY_GROUP := 2;
  400.        WHEN sINABILITY_GROUP = 'III' THEN pnINABILITY_GROUP := 3;
  401.        ELSE pnINABILITY_GROUP := NULL;
  402.   END CASE;
  403.  
  404.   --получим дату начала инфвалидности
  405.   pdINABILITY_DATE := TO_DATE(regexp_substr(psINABILITY,'(\d\d)/(\d\d)/(\d{4}?)'),'DD/MM/YYYY');
  406.   IF pdINABILITY_DATE IS NULL THEN
  407.     pdINABILITY_DATE := TO_DATE(regexp_substr(psINABILITY,'(\d\d)/(\d\d)/(\d{4}?)'),'DD.MM.YYYY');
  408.   END IF;
  409.  
  410. END GET_INABILITY_DATA;
  411. -----------------------------------------------------------------------------------------------------------------------------
  412.  
  413. -----------------------------------------------------------------------------------------------------------------------------
  414. --Процедура для импорта данных из файла TUBKONVE.dbf через таблицу импорта IMP70_TUBKONVE
  415. PROCEDURE IMP70_P_TUBKONVE
  416. (
  417.   pnLPU                                IN  NUMBER,
  418.   pnLOG_IDENT                          OUT NUMBER,
  419.   pnERR_IGNORE                         IN  NUMBER DEFAULT 0
  420. )
  421. IS
  422.   nVER_AGENT_ADDRS                                         D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_ADDRS
  423.   nVER_GEOGRAFY                                            D_PKG_STD.tREF;     -- идентификатор версии для раздела GEOGRAFY
  424.   nVER_NOS_REGISTR_TYPES                                   D_PKG_STD.tREF;     -- идентификатор версии для раздела NOS_REGISTR_TYPES
  425.   nVER_NOS_REGISTRS                                        D_PKG_STD.tREF;     -- идентификатор версии для раздела NOS_REGISTRS
  426.   nVER_NR_CLS_CONTINGENTS                                  D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_CLS_CONTINGENTS
  427.   nVER_NR_PATIENT_DATA                                     D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_PATIENT_DATA
  428.   nVER_MKB10                                               D_PKG_STD.tREF;     -- идентификатор версии для раздела nVER_MKB10
  429.   nVER_SOCIALSTATES                                        D_PKG_STD.tREF;     -- идентификатор версии для раздела SOCIALSTATES
  430.   nVER_NR_PATIENTS                                         D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_PATIENTS
  431.   nVER_RTUB_CASES                                          D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASES
  432.   nVER_DTUB_PAT_GROUP                                      D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_PAT_GROUP
  433.   nVER_PATIENTS_DGROUP                                     D_PKG_STD.tREF;     -- идентификатор версии для раздела PATIENTS_DGROUP
  434.   nVER_RTUB_CASE_DGNS                                      D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_DGNS
  435.   nVER_DTUB_CLINIC_FORMS                                   D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_CLINIC_FORMS
  436.   nVER_DTUB_DETECT_METHODS                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_DETECT_METHODS
  437.   nVER_RTUB_CASE_DISP                                      D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_DISP
  438.   nVER_RTUB_CASE_DISP_DATA                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_DISP_DATA
  439.   nVER_AGENT_COMP_DISEASES                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_COMP_DISEASES
  440.   nVER_COMP_DISEASES                                       D_PKG_STD.tREF;     -- идентификатор версии для раздела COMP_DISEASES
  441.   nVER_REGISTER_PURPOSES                                   D_PKG_STD.tREF;     -- идентификатор версии для раздела REGISTER_PURPOSES
  442.   nVER_LPUDICT                                             D_PKG_STD.tREF;     -- идентификатор версии для раздела LPUDICT
  443.   nVER_SITES                                               D_PKG_STD.tREF;     -- идентификатор версии для раздела SITES
  444.   nVER_AGENT_GR_RENTGENOGR                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_GR_RENTGENOGR
  445.   nVER_GR_RENTGENOGRAPH                                    D_PKG_STD.tREF;     -- идентификатор версии для раздела GR_RENTGENOGRAPH
  446.   nVER_AGENT_DETR_EFFECTS                                  D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_DETR_EFFECTS
  447.   nVER_DETRIMENTAL_EFFECTS                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела DETRIMENTAL_EFFECTS
  448.   nVER_RTUB_CASE_CHEMO                                     D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_CHEMO
  449.   nVER_DTUB_CHEMO_MODES                                    D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_CHEMO_MODES
  450.   nVER_DTUB_CHEMO_OUT                                      D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_CHEMO_OUT
  451.   nVER_RTUB_CASE_DETECTION                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_DETECTION
  452.   nVER_NR_CLS_PATH_DISCOVER                                D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_CLS_PATH_DISCOVER
  453.   nVER_NR_LPUDICT                                          D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_LPUDICT
  454.   nVER_ANTHROP                                             D_PKG_STD.tREF;     -- идентификатор версии для раздела ANTHROP
  455.   nVER_AGENT_DECRETIV_GROUPS                               D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_DECRETIV_GROUPS
  456.   nVER_DECRETIV_GROUPS                                     D_PKG_STD.tREF;     -- идентификатор версии для раздела DECRETIV_GROUPS
  457.   nVER_AGENT_INABILITIES                                   D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_INABILITIES
  458.   nVER_NR_CLS_PLACE_DETECTION                              D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_CLS_PLACE_DETECTION
  459.  
  460.   nCAT_ROOT                                                D_PKG_STD.tREF;     -- идентификатор корневого каталога для разделов
  461.   nCAT_AGENTS                                              D_PKG_STD.tREF;     -- идентификатор каталога для раздела AGENTS
  462.   nCAT_PERSMEDCARD                                         D_PKG_STD.tREF;     -- идентификатор каталога для раздела PERSMEDCARD
  463.  
  464.   nAGENTS_ID                                               D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENTS
  465.   nAGENT_ADDRS_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_ADDRS
  466.   nAGENT_CONSITUTIONS_ID                                   D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_CONSITUTIONS
  467.   nAGENT_CONSITUTION_SPS_ID                                D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_CONSITUTION_SPS
  468.   nNR_PATIENT_DATA_ID                                      D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NR_PATIENT_DATA
  469.   nAGENT_SOCIAL_STATES_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_SOCIAL_STATES
  470.   nRTUB_CASES_ID                                           D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASES
  471.   nRTUB_CASE_DGNS_ID                                       D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_DGNS
  472.   nRTUB_CASE_DISP_ID                                       D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_DISP
  473.   nRTUB_CASE_DISP_DATA_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_DISP_DATA
  474.   nAGENT_COMP_DISEASES_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_COMP_DISEASES
  475.   nAGENT_REGISTRATION_ID                                   D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_REGISTRATION
  476.   nAGENT_GR_RENTGENOGR_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_GR_RENTGENOGR
  477.   nAGENT_DECRETIV_GROUPS_ID                                D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_DECRETIV_GROUPS
  478.   nAGENT_INABILITIES_ID                                    D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_INABILITIES
  479.   nAGENT_DETR_EFFECTS_ID                                   D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_DETR_EFFECTS
  480.   nPERSMEDCARD_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_PERSMEDCARD
  481.   nRTUB_CASE_DETECTION_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_DETECTION
  482.   nRTUB_CASE_CHEMO_ID                                      D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_CHEMO
  483.   nNR_PATIENT_ID                                           D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NR_PATIENT
  484.  
  485.  
  486.   nERROR                                                   D_PKG_STD.tREF := 0;-- кол-во ошибок импорта
  487.   sERROR_CODE                                              D_PKG_STD.tSTR;     -- код ошибки
  488.   sAGN_CODE                                                D_AGENTS.AGN_CODE%TYPE;
  489.                                                                                -- код контрагента в таблице D_AGENTS
  490.   nCITY                                                    D_PKG_STD.tREF;     -- идентификатор населенного пункта
  491.   nSTREET                                                  D_PKG_STD.tREF;     -- идентификатор улицы
  492.   sHOUSE                                                   D_PKG_STD.tSTR;     -- номер дома в адресе
  493.   sHOUSELIT                                                D_PKG_STD.tSTR;     -- литера дома в адресе
  494.   sFLAT                                                    D_PKG_STD.tSTR;     -- номер квартиры в адресе
  495.   nRAION                                                   D_PKG_STD.tREF;     -- идентификатор района из адреса
  496.   nRAION_CODE                                              D_PKG_STD.tSTR;     -- код района
  497.   sTUBNASP_TMP                                             D_PKG_STD.tSTR;     -- временная переменная для хранения названия нас пункта из файла
  498.   nANTHROP                                                 D_PKG_STD.tREF;     -- идентификатор записи D_ANTHROP
  499.   nNOS_REGISTR_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NOS_REGISTR
  500.   nNR_CONTINGENT                                           D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NR_CLS_CONTINGENTS
  501.   nSOCIAL_STATES_ID                                        D_PKG_STD.tREF;     -- идентификатор записи социального положения D_SOCIALSTATES
  502.   nSOCIAL_CATEGORIES                                       D_PKG_STD.tREF;     -- идентификатор записи социальной категории D_SOCIALCATEGORIES
  503.   nLPUDICT_ID                                              D_PKG_STD.tREF;     -- идентификатор записи D_LPUDICT
  504.   nPAT_GROUP                                               D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_PAT_GROUP
  505.   nFROM_GROUP                                              D_PKG_STD.tREF;     -- идентификатор записи D_PATIENTS_DGROUP
  506.   nMKB                                                     D_PKG_STD.tREF;     -- идентификатор записи D_MKB10
  507.   nCLINIC_FORM                                             D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_CLINIC_FORMS
  508.   nDETECT_METHOD                                           D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_DETECT_METHODS
  509.   nDGROUP                                                  D_PKG_STD.tREF;     -- идентификатор записи D_PATIENTS_DGROUP
  510.   nCOMP_DISEASE                                            D_PKG_STD.tREF;     -- идентификатор записи D_COMP_DISEASES
  511.   nREGISTER_PURPOSE                                        D_PKG_STD.tREF;     -- идентификатор записи D_REGISTER_PURPOSES
  512.   nLPU_REG                                                 D_PKG_STD.tREF;     -- идентификатор записи D_LPUDICT
  513.   nLPU_SITE                                                D_PKG_STD.tREF;     -- идентификатор записи D_SITES
  514.   nGR_RENTGENOGRAPH                                        D_PKG_STD.tREF;     -- идентификатор записи D_GR_RENTGENOGRAPH
  515.   nDECRETIV_GROUP                                          D_PKG_STD.tREF;     -- идентификатор записи D_DECRETIV_GROUP
  516.   nINABILITY_GROUP                                         D_PKG_STD.tREF;     -- группа инвалидности
  517.   dINABILITY_BEGIN_DATE                                    DATE;               -- дата начала инвалидности
  518.   nDETR_EFFECT                                             D_PKG_STD.tREF;     -- идентификатор записи D_DETRIMENTAL_EFFECTS
  519.   nDETECT_PLACE                                            D_PKG_STD.tREF;     -- идентификатор записи D_NR_CLS_PLACE_DETECTION
  520.   nDISCOVER_PATH                                           D_PKG_STD.tREF;     -- идентификатор записи D_NR_CLS_PATH_DISCOVER
  521.   nCHEMO_MODE                                              D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_CHEMO_MODES
  522.   nCHEMO_OUT                                               D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_CHEMO_OUT
  523.   dAGENT_BIRTHDATE                                         D_AGENTS.BIRTHDATE%TYPE;
  524.  
  525.  
  526. BEGIN
  527.  
  528.   D_PKG_IMP_LOG.INIT('IMP70_TUBKONVE', pnLPU, pnLOG_IDENT, 0);
  529.   lg(pnLOG_IDENT,'START_IMP','Начало импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
  530.  
  531.   --блок получения версий для разделов
  532.   nVER_AGENT_ADDRS            := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_ADDRS');
  533.   nVER_GEOGRAFY               := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GEOGRAFY');
  534.   nVER_NOS_REGISTR_TYPES      := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTR_TYPES');
  535.   nVER_NOS_REGISTRS           := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTRS');
  536.   nVER_NR_CLS_CONTINGENTS     := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_CLS_CONTINGENTS');
  537.   nVER_NR_PATIENT_DATA        := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENT_DATA');
  538.   nVER_MKB10                  := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'MKB10');
  539.   nVER_SOCIALSTATES           := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'SOCIALSTATES');
  540.   nVER_NR_PATIENTS            := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENTS');
  541.   nVER_RTUB_CASES             := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASES');
  542.   nVER_DTUB_PAT_GROUP         := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_PAT_GROUP');
  543.   nVER_PATIENTS_DGROUP        := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'PATIENTS_DGROUP');
  544.   nVER_RTUB_CASE_DGNS         := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DGNS');
  545.   nVER_DTUB_CLINIC_FORMS      := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CLINIC_FORMS');
  546.   nVER_DTUB_DETECT_METHODS    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_DETECT_METHODS');
  547.   nVER_RTUB_CASE_DISP         := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP');
  548.   nVER_RTUB_CASE_DISP_DATA    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP_DATA');
  549.   nVER_AGENT_COMP_DISEASES    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_COMP_DISEASES');
  550.   nVER_COMP_DISEASES          := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'COMP_DISEASES');
  551.   nVER_REGISTER_PURPOSES      := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'REGISTER_PURPOSES');
  552.   nVER_LPUDICT                := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'LPUDICT');
  553.   nVER_SITES                  := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'SITES');
  554.   nVER_AGENT_GR_RENTGENOGR    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_GR_RENTGENOGR');
  555.   nVER_GR_RENTGENOGRAPH       := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GR_RENTGENOGRAPH');
  556.   nVER_AGENT_DETR_EFFECTS     := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_DETR_EFFECTS');
  557.   nVER_DETRIMENTAL_EFFECTS    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DETRIMENTAL_EFFECTS');
  558.   nVER_RTUB_CASE_CHEMO        := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_CHEMO');
  559.   nVER_DTUB_CHEMO_MODES       := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CHEMO_MODES');
  560.   nVER_DTUB_CHEMO_OUT         := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CHEMO_OUT');
  561.   nVER_RTUB_CASE_DETECTION    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DETECTION');
  562.   nVER_NR_CLS_PATH_DISCOVER   := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_CLS_PATH_DISCOVER');
  563.   nVER_NR_LPUDICT             := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_LPUDICT');
  564.   nVER_ANTHROP                := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'ANTHROP');
  565.   nVER_AGENT_DECRETIV_GROUPS  := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_DECRETIV_GROUPS');
  566.   nVER_DECRETIV_GROUPS        := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DECRETIV_GROUPS');
  567.   nVER_AGENT_INABILITIES      := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_INABILITIES');
  568.   nVER_NR_CLS_PLACE_DETECTION := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_CLS_PLACE_DETECTION');
  569.  
  570.   --блок получения каталогов для разделов
  571.   D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'AGENTS', 'Пациенты Томск Фтиз', nCAT_AGENTS);
  572.   IF nCAT_AGENTS IS NULL THEN
  573.     D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'AGENTS',nCAT_ROOT);
  574.     D_PKG_CATALOGS.ADD(nCAT_AGENTS,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
  575.   END IF;
  576.  
  577.   D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'PERSMEDCARD', 'Пациенты Томск Фтиз', nCAT_PERSMEDCARD);
  578.   IF nCAT_PERSMEDCARD IS NULL THEN
  579.     D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'PERSMEDCARD',nCAT_ROOT);
  580.     D_PKG_CATALOGS.ADD(nCAT_PERSMEDCARD,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
  581.   END IF;
  582.  
  583.  
  584.  
  585.  
  586.   --по заданному ЛПУ получим LPUDICT
  587.   BEGIN
  588.     SELECT l.LPUDICT
  589.       INTO nLPUDICT_ID
  590.       FROM D_LPU l
  591.      WHERE l.id = pnLPU
  592.        AND ROWNUM = 1;
  593.   EXCEPTION
  594.     WHEN NO_DATA_FOUND THEN
  595.       nERROR := nERROR + 1;
  596.       lg(pnLOG_IDENT,'NFD_LPUDICT','Не определно заданное ЛПУ: '||pnLPU);
  597.   END;
  598.  
  599.  
  600.  
  601.   --Цикл по всем записям таблицы IMP70_TUBKONVE с импортируемыми данными
  602.   IF nERROR = 0 OR pnERR_IGNORE = 1 THEN
  603.     FOR cr IN (SELECT *
  604.                  FROM IMP70_TUBKONVE)
  605.     LOOP
  606.       nAGENTS_ID                := NULL;
  607.       nAGENT_ADDRS_ID           := NULL;
  608.       nAGENT_CONSITUTIONS_ID    := NULL;
  609.       nAGENT_CONSITUTION_SPS_ID := NULL;
  610.       nNR_PATIENT_DATA_ID       := NULL;
  611.       nAGENT_SOCIAL_STATES_ID   := NULL;
  612.       nRTUB_CASES_ID            := NULL;
  613.       nRTUB_CASE_DGNS_ID        := NULL;
  614.       nRTUB_CASE_DISP_ID        := NULL;
  615.       nRTUB_CASE_DISP_DATA_ID   := NULL;
  616.       nAGENT_COMP_DISEASES_ID   := NULL;
  617.       nAGENT_REGISTRATION_ID    := NULL;
  618.       nAGENT_GR_RENTGENOGR_ID   := NULL;
  619.       nAGENT_DECRETIV_GROUPS_ID := NULL;
  620.       nAGENT_INABILITIES_ID     := NULL;
  621.       nAGENT_DETR_EFFECTS_ID    := NULL;
  622.       nPERSMEDCARD_ID           := NULL;
  623.       nRTUB_CASE_DETECTION_ID   := NULL;
  624.       nRTUB_CASE_CHEMO_ID       := NULL;
  625.       nNR_PATIENT_ID            := NULL;
  626.  
  627.  
  628.       sAGN_CODE                 := NULL;
  629.       nCITY                     := NULL;
  630.       nSTREET                   := NULL;
  631.       sHOUSE                    := NULL;
  632.       sHOUSELIT                 := NULL;
  633.       nRAION                    := NULL;
  634.       nRAION_CODE               := NULL;
  635.       nNOS_REGISTR_ID           := NULL;
  636.       nNR_CONTINGENT            := NULL;
  637.       nSOCIAL_STATES_ID         := NULL;
  638.       nSOCIAL_CATEGORIES        := NULL;
  639.       nPAT_GROUP                := NULL;
  640.       nFROM_GROUP               := NULL;
  641.       nMKB                      := NULL;
  642.       nCLINIC_FORM              := NULL;
  643.       nDETECT_METHOD            := NULL;
  644.       nDGROUP                   := NULL;
  645.       nCOMP_DISEASE             := NULL;
  646.       nREGISTER_PURPOSE         := NULL;
  647.       nLPU_REG                  := NULL;
  648.       nLPU_SITE                 := NULL;
  649.       nGR_RENTGENOGRAPH         := NULL;
  650.       nDECRETIV_GROUP           := NULL;
  651.       nINABILITY_GROUP          := NULL;
  652.       dINABILITY_BEGIN_DATE     := NULL;
  653.       nDETR_EFFECT              := NULL;
  654.       nDETECT_PLACE             := NULL;
  655.       nDISCOVER_PATH            := NULL;
  656.       nCHEMO_MODE               := NULL;
  657.       nCHEMO_OUT                := NULL;
  658.       dAGENT_BIRTHDATE          := NULL;
  659.  
  660.  
  661.       --проверим нет ли в таблице D_AGENTS такого контрагента
  662.       GET_AGENT_ID(psFIO        => cr.FIO,
  663.                    pdBIRTHDATE  => cr.TUB_DATRO,
  664.                    psSNILS      => cr.TUB_PREDLE,
  665.                    pnAGENTS_ID  => nAGENTS_ID,
  666.                    psERROR_CODE => sERROR_CODE);
  667.  
  668.       IF nAGENTS_ID IS NOT NULL THEN
  669.         dAGENT_BIRTHDATE := cr.TUB_DATRO;
  670.       ELSE
  671.         dAGENT_BIRTHDATE := NULL;
  672.        
  673.         IF sERROR_CODE = 'TMR_AGENTS' THEN
  674.           lg(pnLOG_IDENT,'TMR_AGENTS','Найдено несколько пациентов: ФИО - '||cr.FIO||', Дата рожд.- '||TO_CHAR(cr.TUB_DATRO,'dd.mm.yyyy')||', СНИЛС - '||cr.TUB_PREDLE);
  675.           continue;
  676.         END IF;
  677.       END IF;
  678.      
  679.      
  680.      
  681.  
  682.       --если контрагент не найден, то создадим его
  683.       IF nAGENTS_ID IS NULL THEN
  684.         ----------------------------------------
  685.         --1. блок обработки данных в разделе AGENTS
  686.         ----------------------------------------
  687.         sAGN_CODE        := D_PKG_AGENTS.GEN_CODE(pnLPU);
  688.         dAGENT_BIRTHDATE := cr.TUB_DATRO;
  689.      
  690.         BEGIN
  691.           D_PKG_AGENTS.ADD(pnD_INSERT_ID         => nAGENTS_ID,
  692.                            pnLPU                 => pnLPU,
  693.                            pnCID                 => nCAT_AGENTS,
  694.                            psAGN_CODE            => sAGN_CODE,
  695.                            psAGN_NAME            => sAGN_CODE||' '||cr.FIO,
  696.                            pnAGN_TYPE            => 1,
  697.                            pnAGN_INN             => NULL,
  698.                            pnAGN_KPP             => NULL,
  699.                            psNOTE                => cr.TUB_PRIM,
  700.                            psFIRSTNAME           => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'FIRSTNAME'),
  701.                            psSURNAME             => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'SURNAME'),
  702.                            psLASTNAME            => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'LASTNAME'),
  703.                            pdBIRTHDATE           => cr.TUB_DATRO,
  704.                            pnSEX                 => IMP70_PKG_KONVE.CONVERT_POL_TO_NUMBER(cr.TUB_POL),
  705.                            pnEDUCATION           => NULL,
  706.                            pnOKVED               => NULL,
  707.                            pnIS_EMPLOYER         => 0,
  708.                            psSNILS               => regexp_replace(cr.TUB_PREDLE,'\D',''), -- в базе храним без разделителей (только цифры)
  709.                            psAGN_OGRN            => NULL,
  710.                            psAGN_OKPO            => NULL,
  711.                            pdDEATHDATE           => NULL,
  712.                            pnIS_UNKNOWN          => NULL,
  713.                            pnDEATHDOCTYPE        => NULL,
  714.                            pdDEATHDOCDATE        => NULL,
  715.                            psDEATHDOCNUM         => NULL,
  716.                            pnAGN_OKFS            => NULL,
  717.                            psENP                 => NULL,
  718.                            psBIRTHPLACE          => NULL,
  719.                            pnDECLINE_FIO         => NULL,
  720.                            pnNATION              => NULL,
  721.                            pnIS_HOME             => 0,
  722.                            pnGEST_AGE_MOTHER     => NULL,
  723.                            pnIS_ANONYM           => 0,
  724.                            psDEATHPLACE          => NULL,
  725.                            pnFULL_CLASSES        => NULL,
  726.                            pnACCURACY_DATE_DEATH => NULL,
  727.                            pnACCURACY_DATE_BIRTH => NULL,
  728.                            pnIND_ENTERP          => NULL,
  729.                            psAGN_OGRN_IND        => NULL,
  730.                            pnCONVICT_AMOUNT      => NULL);
  731.         EXCEPTION
  732.           WHEN OTHERS THEN
  733.             lg(pnLOG_IDENT,'ADD_AGENTS','Ошибка добавления пациента: '||cr.FIO, SQLERRM);
  734.         END;
  735.       END IF;
  736.  
  737.  
  738.       --если контрагент создан успешно или найден в системе, то загрузим остальные данные при их отсутствии
  739.       IF nAGENTS_ID IS NOT NULL THEN
  740.  
  741.         ----------------------------------------
  742.         --2.1 блок обработки данных в разделе AGENT_ADDRS
  743.         ----------------------------------------
  744.         BEGIN
  745.           SELECT aa.ID
  746.             INTO nAGENT_ADDRS_ID
  747.             FROM D_AGENT_ADDRS aa
  748.            WHERE aa.PID = nAGENTS_ID
  749.              AND aa.VERSION = nVER_AGENT_ADDRS
  750.              AND ROWNUM = 1;
  751.         EXCEPTION
  752.           WHEN NO_DATA_FOUND THEN
  753.             --получим населенный пункт
  754.             IMP70_PKG_KONVE.GET_GEOTYPE_CODE_NASP(pnLPU,cr.TUB_NASP,nCITY,sERROR_CODE);
  755.  
  756.             IF nCITY IS NULL THEN
  757.               IF sERROR_CODE = 'TMR_GEOGRAFY' THEN
  758.                 lg(pnLOG_IDENT,'TMR_GEOGRAFY','Найдено несколько населенных пунктов: '||cr.TUB_NASP||'(пациент - '||cr.FIO||')');
  759.               ELSIF sERROR_CODE = 'NDF_GEOGRAFY' THEN
  760.                 lg(pnLOG_IDENT,'','Не определен населенный пункт: '||cr.TUB_NASP||'(пациент - '||cr.FIO||')');
  761.               END IF;
  762.             END IF;
  763.  
  764.              
  765.             --Получение района
  766.             IF cr.TUB_RAI IS NOT NULL THEN
  767.               nRAION_CODE := GET_RAIONCODE_BY_KODRAI(cr.TUB_RAI);
  768.              
  769.               BEGIN
  770.                 SELECT r.ID
  771.                   INTO nRAION
  772.                   FROM D_RAIONS r
  773.                  WHERE LOWER(r.R_CODE) = LOWER(nRAION_CODE)
  774.                    AND ROWNUM = 1;
  775.               EXCEPTION
  776.                 WHEN NO_DATA_FOUND THEN
  777.                   nRAION := NULL;
  778.                   lg(pnLOG_IDENT,'NDF_RAIONS','Не определён район: '||cr.TUB_RAI||'(пациент - '||cr.FIO||')');
  779.               END;
  780.             END IF;
  781.              
  782.              
  783.             --получим улицу (текст до первого символа '-' без последних цифр)
  784.             IF UPPER(cr.TUB_ADR) = 'БОМЖ' THEN
  785.               nSTREET := NULL;
  786.             ELSE
  787.               BEGIN
  788.                 SELECT g.ID
  789.                   INTO nSTREET
  790.                   FROM D_GEOGRAFY g
  791.                        join D_GEOGRAFYTYPES gt
  792.                          ON gt.ID = g.GEOLOCTYPE
  793.                         AND gt.AO_TYPE IN (nAO_TYPE_NASP,nAO_TYPE_STREET)
  794.                  WHERE g.version = nVER_GEOGRAFY
  795.                    AND UPPER(g.GEONAME) = UPPER(IMP70_PKG_KONVE.GET_STREET_FROM_ADRESS(cr.TUB_ADR))
  796.                    AND g.PID = nCITY
  797.                    AND ROWNUM = 1;
  798.               EXCEPTION
  799.                 WHEN NO_DATA_FOUND THEN
  800.                   nSTREET := NULL;
  801.                   lg(pnLOG_IDENT,'NDF_GEOGRAFY','Не определена улица в адресе '||cr.TUB_ADR||' для нас пункта '||cr.TUB_NASP||' (пациент - '||cr.FIO||')');
  802.               END;
  803.             END IF;
  804.              
  805.            
  806.             --получим номер дома из адреса (символы между первым символом '-' и предыдущим пробелом)
  807.             sHOUSE := IMP70_PKG_KONVE.GET_HOUSE_FROM_ADRESS(cr.TUB_ADR);
  808.            
  809.             --получим литеру дома, если она есть
  810.             sHOUSELIT := IMP70_PKG_KONVE.GET_LETTER_FROM_HOUSE(sHOUSE);
  811.             IF sHOUSELIT IS NOT NULL THEN
  812.               sHOUSE := REPLACE(sHOUSE,sHOUSELIT,'');
  813.             END IF;
  814.              
  815.             --получим квартиру (цифры после первого символа '-')
  816.             sFLAT := IMP70_PKG_KONVE.GET_FLAT_FROM_ADRESS(cr.TUB_ADR);
  817.              
  818.              
  819.              
  820.             --непосредственно добавление записи в D_AGENT_ADDRS
  821.             BEGIN
  822.               D_PKG_AGENT_ADDRS.ADD(pnD_INSERT_ID  => nAGENT_ADDRS_ID,
  823.                                     pnLPU          => pnLPU,
  824.                                     pnPID          => nAGENTS_ID,
  825.                                     pnSTREET       => nSTREET,
  826.                                     psHOUSE        => sHOUSE,
  827.                                     psHOUSELIT     => sHOUSELIT,
  828.                                     pnBLOCK        => NULL,
  829.                                     pnFLAT         => sFLAT,
  830.                                     psFLATLIT      => NULL,
  831.                                     psADDR_INDEX   => NULL,
  832.                                     pnIS_MAIN      => (CASE WHEN LOWER(cr.TUB_PROJIV)='пост.жит.' THEN 1 ELSE 0 END),
  833.                                     pnIS_REAL      => (CASE WHEN LOWER(cr.TUB_PROJIV) IN ('пост.жит.','жит.др.тер','ин.гражд.') THEN 1 WHEN UPPER(cr.TUB_PROJIV)='БОМЖ' THEN 0  ELSE 0 END),
  834.                                     pnIS_REG       => 1,
  835.                                     pnIS_TEMPREG   => (CASE WHEN LOWER(cr.TUB_PROJIV) IN ('жит.др.тер','ин.гражд.') THEN 1 WHEN UPPER(cr.TUB_PROJIV)='БОМЖ' THEN 0  ELSE 0 END),
  836.                                     pnIS_JUR       => 0,
  837.                                     pnIS_POST      => 0,
  838.                                     pnIS_BIRTH     => 0,
  839.                                     pnRAION        => nRAION,
  840.                                     pdBEGIN_DATE   => cr.TUB_DATUCH,
  841.                                     pdEND_DATE     => NULL,
  842.                                     psMANUAL_INPUT => NULL,
  843.                                     pnIS_CITIZEN   => (CASE WHEN cr.TUB_GIT = 'гор' THEN 1 WHEN cr.TUB_GIT = 'сел' THEN 0 ELSE NULL END),
  844.                                     psFLAT         => sFLAT,
  845.                                     psADDROBJ      => NULL,
  846.                                     psFIAS_HOUSE   => NULL);
  847.             EXCEPTION
  848.               WHEN OTHERS THEN
  849.                 lg(pnLOG_IDENT,'ADD_AGENTS_ADDRS','Ошибка добавления адреса пациента: '||cr.FIO, SQLERRM);
  850.             END;
  851.         END;
  852.  
  853.  
  854.         ----------------------------------------
  855.         --2.3 блок обработки данных в разделе AGENT_CONSITUTIONS
  856.         ----------------------------------------
  857.         nAGENT_CONSITUTIONS_ID := D_PKG_AGENT_CONSITUTIONS.GET_ACTUAL_ON_DATE(pnAGENT    => nAGENTS_ID,
  858.                                                                               pdDATE     => SYSDATE,
  859.                                                                               psFIELD    => 'ID',
  860.                                                                               pnNOT_NULL => 1);
  861.         IF nAGENT_CONSITUTIONS_ID IS NULL THEN
  862.           BEGIN
  863.             D_PKG_AGENT_CONSITUTIONS.ADD(pnD_INSERT_ID  => nAGENT_CONSITUTIONS_ID,
  864.                                          pnLPU          => pnLPU,
  865.                                          pnPID          => nAGENTS_ID,
  866.                                          pdMEAS_DATE    => cr.TUB_DATUCH,
  867.                                          pnCONSTITUTION => NULL,
  868.                                          pnVISIT        => NULL);
  869.           EXCEPTION
  870.             WHEN OTHERS THEN
  871.               lg(pnLOG_IDENT,'ADD_AGENTS_ADDRS','Ошибка добавления телосложения пациента: '||cr.FIO, SQLERRM);
  872.           END;
  873.         END IF;
  874.  
  875.  
  876.         ----------------------------------------
  877.         --2.2 блок обработки данных в разделе AGENT_CONSITUTION_SPS
  878.         ----------------------------------------
  879.         IF nAGENT_CONSITUTIONS_ID IS NOT NULL THEN
  880.           IF cr.TUB_VES IS NOT NULL THEN -- если указан вес, добавим его
  881.             IF D_PKG_AGENT_CONSITUTION_SPS.WEIGHT(pnPID => nAGENT_CONSITUTIONS_ID, pnRAISE => 0) IS NULL THEN
  882.               SELECT (SELECT a.ID
  883.                         FROM D_ANTHROP a
  884.                        WHERE LOWER(a.AN_CODE) = 'вес'
  885.                          AND a.VERSION = nVER_ANTHROP
  886.                          AND ROWNUM = 1
  887.                      )
  888.                 INTO nANTHROP
  889.                 FROM dual;
  890.              
  891.               BEGIN
  892.                 D_PKG_AGENT_CONSITUTION_SPS.ADD(pnD_INSERT_ID => nAGENT_CONSITUTION_SPS_ID,
  893.                                                 pnLPU         => pnLPU,
  894.                                                 pnPID         => nAGENT_CONSITUTIONS_ID,
  895.                                                 pnANTHROP     => nANTHROP,
  896.                                                 pnA_VALUE     => cr.TUB_VES,
  897.                                                 pnVISIT       => NULL);
  898.               EXCEPTION
  899.                 WHEN OTHERS THEN
  900.                   lg(pnLOG_IDENT,'ADD_AGENT_CONSITUTION_SPS','Ошибка добавления веса пациента: '||cr.FIO, SQLERRM);
  901.               END;
  902.             END IF;
  903.           END IF;
  904.  
  905.  
  906.           IF cr.TUB_ROST IS NOT NULL THEN -- если указан рост, добавим его
  907.             IF D_PKG_AGENT_CONSITUTION_SPS.HEIGHT(pnPID => nAGENT_CONSITUTIONS_ID, pnRAISE => 0) IS NULL THEN
  908.               SELECT (SELECT a.ID
  909.                         FROM D_ANTHROP a
  910.                        WHERE LOWER(a.AN_CODE) = 'рост'
  911.                          AND a.VERSION = nVER_ANTHROP
  912.                          AND ROWNUM = 1
  913.                      )
  914.                 INTO nANTHROP
  915.                 FROM dual;
  916.              
  917.               BEGIN
  918.                 D_PKG_AGENT_CONSITUTION_SPS.ADD(pnD_INSERT_ID => nAGENT_CONSITUTION_SPS_ID,
  919.                                                 pnLPU         => pnLPU,
  920.                                                 pnPID         => nAGENT_CONSITUTIONS_ID,
  921.                                                 pnANTHROP     => nANTHROP,
  922.                                                 pnA_VALUE     => cr.TUB_ROST,
  923.                                                 pnVISIT       => NULL);
  924.               EXCEPTION
  925.                 WHEN OTHERS THEN
  926.                   lg(pnLOG_IDENT,'ADD_AGENT_CONSITUTION_SPS','Ошибка добавления роста пациента: '||cr.FIO, SQLERRM);
  927.               END;
  928.             END IF;
  929.           END IF;
  930.         END IF;
  931.  
  932.  
  933.         ----------------------------------------
  934.         --2.4 блок обработки данных в разделе NR_PATIENT_DATA
  935.         ----------------------------------------
  936.          
  937.         --получим родительскую запись для D_NR_PATIENT_DATA
  938.         WITH N_REGISTR_TYPES AS (SELECT rt.ID
  939.                                    FROM D_NOS_REGISTR_TYPES rt
  940.                                   WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  941.                                     AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  942.                                     AND ROWNUM = 1),
  943.              NR_CLS_CONT_CODES AS (SELECT (CASE WHEN LOWER(cr.TUB_PROJIV) = 'пост.жит.'   THEN 1
  944.                                                 WHEN LOWER(cr.TUB_PROJIV) = 'жит.др.тер.' THEN 2
  945.                                                 WHEN (LOWER(cr.TUB_PROJIV) = 'иммигрант'
  946.                                                       OR
  947.                                                       LOWER(cr.TUB_MIGR) = 'да')          THEN 3
  948.                                                    
  949.                                                 WHEN LOWER(cr.TUB_PROJIV) = 'ин.гражд.'   THEN 8
  950.                                                 WHEN LOWER(cr.TUB_PROJIV) = 'из соцзащ.'  THEN 9
  951.                                                 WHEN LOWER(cr.TUB_BOMJ)   = 'да'          THEN 6
  952.                                                 WHEN LOWER(cr.TUB_IZUIN)  = 'да'          THEN 4
  953.                                                 WHEN LOWER(cr.TUB_PENS)   = 'да'          THEN 10
  954.                                                 WHEN LOWER(cr.TUB_IZOBSH) = 'да'          THEN 11
  955.                                                 ELSE NULL
  956.                                            END) c_code
  957.                                      FROM dual)
  958.          
  959.         SELECT (SELECT r.ID
  960.                   FROM D_NOS_REGISTRS r
  961.                  WHERE r.VERSION  = nVER_NOS_REGISTRS
  962.                    AND r.REG_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  963.                    AND EXISTS(SELECT 1
  964.                                 FROM D_NR_LPUDICT nld
  965.                                WHERE nld.VERSION = nVER_NR_LPUDICT
  966.                                  AND nld.PID     = r.ID
  967.                                  AND nld.lpudict = nLPUDICT_ID)
  968.                    AND ROWNUM = 1),
  969.                  
  970.                (SELECT ncc.ID
  971.                   FROM D_NR_CLS_CONTINGENTS ncc
  972.                  WHERE ncc.VERSION = nVER_NR_CLS_CONTINGENTS
  973.                    AND TRUNC(SYSDATE) BETWEEN ncc.DATE_BEGIN AND COALESCE(ncc.DATE_END,TRUNC(SYSDATE))
  974.                    AND ncc.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  975.                    AND ncc.C_CODE  = (SELECT C_CODE FROM NR_CLS_CONT_CODES)
  976.                    AND ROWNUM = 1)
  977.          
  978.          
  979.           INTO nNOS_REGISTR_ID,
  980.                nNR_CONTINGENT
  981.           FROM dual;
  982.        
  983.         IF nNOS_REGISTR_ID IS NULL THEN
  984.            lg(pnLOG_IDENT,'NDF_NOS_REGISTRS','Не определен нозологический реестр для данного ЛПУ');
  985.         ELSE
  986.           BEGIN
  987.             SELECT npd.ID
  988.               INTO nNR_PATIENT_DATA_ID
  989.               FROM D_NR_PATIENT_DATA npd
  990.              WHERE npd.AGENT = nAGENTS_ID
  991.                AND npd.VERSION = nVER_NR_PATIENT_DATA
  992.                AND npd.PID = nNOS_REGISTR_ID
  993.                AND ROWNUM = 1;
  994.           EXCEPTION
  995.             WHEN NO_DATA_FOUND THEN
  996.               BEGIN
  997.                 D_PKG_NR_PATIENT_DATA.ADD(pnD_INSERT_ID    => nNR_PATIENT_DATA_ID,
  998.                                           pnLPU            => pnLPU,
  999.                                           pnPID            => nNOS_REGISTR_ID,
  1000.                                           pnAGENT          => nAGENTS_ID,
  1001.                                           pnNR_CONTINGENT  => nNR_CONTINGENT,
  1002.                                           pnIS_CITIZEN     => (CASE WHEN LOWER(cr.TUB_GIT) = 'гор' THEN 1 ELSE 0 END),
  1003.                                           pnPROFESSION     => NULL,
  1004.                                           pnON_NARC_DISP   => NULL,
  1005.                                           pnDEATH_PLACE    => NULL,
  1006.                                           pnDEATH_CAUSE    => NULL,
  1007.                                           pnIS_AFTEREFFECT => NULL,
  1008.                                           pnHIV            => (CASE WHEN cr.TUB_HIV IS NOT NULL THEN 1 ELSE 0 END),
  1009.                                           pnAUTOPSY        => NULL,
  1010.                                           pnDEATH_ORG      => NULL);
  1011.               EXCEPTION
  1012.                 WHEN OTHERS THEN
  1013.                   lg(pnLOG_IDENT,'ADD_NR_PATIENT_DATA','Ошибка добавления данных о пациенте в ноз. риеестре: '||cr.FIO||' (nNOS_REGISTR_ID='||nNOS_REGISTR_ID||'LPU='||pnLPU||', LPUDICT='||nLPUDICT_ID, SQLERRM);
  1014.               END;
  1015.           END;
  1016.         END IF;
  1017.            
  1018.        
  1019.        
  1020.  
  1021.  
  1022.          
  1023.         ----------------------------------------
  1024.         --2.5 блок обработки данных в разделе AGENT_SOCIAL_STATES
  1025.         ----------------------------------------
  1026.         nAGENT_SOCIAL_STATES_ID := D_PKG_AGENT_SOCIAL_STATES.GET_ACTUAL_ON_DATE(pnAGENT => nAGENTS_ID,
  1027.                                                                                 pdDATE  => COALESCE(cr.TUB_DATUCH,SYSDATE),
  1028.                                                                                 psFIELD => 'ID');
  1029.         IF nAGENT_SOCIAL_STATES_ID IS NULL THEN
  1030.           --определим социальное положение по данным из файла
  1031.           IF cr.TUB_SOCKAT IS NOT NULL THEN
  1032.             SELECT (SELECT ss.ID
  1033.                       FROM D_SOCIALSTATES ss
  1034.                      WHERE ss.VERSION = nVER_SOCIALSTATES
  1035.                        AND TRUNC(SYSDATE) BETWEEN ss.BEGIN_DATE AND COALESCE(ss.END_DATE,TRUNC(SYSDATE))
  1036.                        AND ss.SOC_CODE = (SELECT vss.MIS_CODE
  1037.                                             FROM IMP70_V_KONVE_SOCSTATES_SOCKAT vss
  1038.                                            WHERE vss.FILE_CODE = cr.TUB_SOCKAT)
  1039.                        AND ROWNUM = 1)
  1040.               INTO nSOCIAL_STATES_ID
  1041.               FROM dual;
  1042.  
  1043.               IF nSOCIAL_STATES_ID IS NULL THEN
  1044.                 lg(pnLOG_IDENT,'NDF_SOCIALSTATES','Не определено социальное положение: '||cr.TUB_SOCKAT||' (пациент - '||cr.FIO||')');
  1045.               END IF;
  1046.           END IF;
  1047.  
  1048.            
  1049.           IF LOWER(cr.TUB_NERAB) = 'да' THEN
  1050.             SELECT (SELECT sc.SC_CODE
  1051.                       FROM D_SOCIALCATEGORIES sc
  1052.                      WHERE sc.SC_CODE = 1
  1053.                        AND ROWNUM = 1)
  1054.               INTO nSOCIAL_CATEGORIES
  1055.               FROM dual;
  1056.           END IF;
  1057.            
  1058.            
  1059.           BEGIN
  1060.             D_PKG_AGENT_SOCIAL_STATES.ADD(pnD_INSERT_ID     => nAGENT_SOCIAL_STATES_ID,
  1061.                                           pnLPU             => pnLPU,
  1062.                                           pnPID             => nAGENTS_ID,
  1063.                                           pnSOCIAL_STATE    => nSOCIAL_STATES_ID,
  1064.                                           pnSOCIAL_CATEGORY => nSOCIAL_CATEGORIES,
  1065.                                           pdBEGIN_DATE      => cr.TUB_DATUCH,
  1066.                                           pdEND_DATE        => NULL);
  1067.           EXCEPTION
  1068.             WHEN OTHERS THEN
  1069.               lg(pnLOG_IDENT,'ADD_AGENT_SOCIAL_STATES','Ошибка добавления социального пложения пациента: '||cr.FIO, SQLERRM);
  1070.           END;
  1071.         END IF;
  1072.  
  1073.  
  1074.         ----------------------------------------
  1075.         --2.19 блок обработки данных в разделе NR_PATIENTS
  1076.         ----------------------------------------
  1077.         BEGIN
  1078.           SELECT p.ID
  1079.             INTO nNR_PATIENT_ID
  1080.             FROM D_NR_PATIENTS p
  1081.            WHERE p.AGENT = nAGENTS_ID
  1082.              AND p.VERSION = nVER_NR_PATIENTS
  1083.              AND p.NOS_REGISTR = nNOS_REGISTR_ID
  1084.              AND p.REGISTR_LPU = nLPUDICT_ID
  1085.              AND ROWNUM = 1;
  1086.         EXCEPTION
  1087.           WHEN NO_DATA_FOUND THEN
  1088.             BEGIN
  1089.               D_PKG_NR_PATIENTS.ADD(pnD_INSERT_ID      => nNR_PATIENT_ID,
  1090.                                     pnLPU              => pnLPU,
  1091.                                     pnAGENT            => nAGENTS_ID,
  1092.                                     pnNOS_REGISTR      => nNOS_REGISTR_ID,
  1093.                                     pnREGISTR_LPU      => nLPUDICT_ID,
  1094.                                     psREGISTR_LPU_TEXT => NULL,
  1095.                                     pdREGISTR_DATE     => cr.TUB_DATUCH,
  1096.                                     pnMKB              => NULL,
  1097.                                     pnNUMB_REG         => NULL,
  1098.                                     pdUPDATE_DATE      => TRUNC(SYSDATE),
  1099.                                     pnFR               => 0,
  1100.                                     psNUMB_REG_GD      => NULL,
  1101.                                     pdREMOVE_DATE      => NULL,
  1102.                                     pnREMOVE_REASON    => NULL,
  1103.                                     pnREMOVE_LPU       => NULL);
  1104.             EXCEPTION
  1105.               WHEN OTHERS THEN
  1106.                 lg(pnLOG_IDENT,'ADD_NR_PATIENTS','Ошибка добавления в ноз. реестр пациента: '||cr.FIO||' (nNOS_REGISTR_ID='||nNOS_REGISTR_ID||'LPU='||pnLPU||', LPUDICT='||nLPUDICT_ID, SQLERRM);
  1107.             END;
  1108.         END;
  1109.        
  1110.  
  1111.  
  1112.  
  1113.         ----------------------------------------
  1114.         --2.6 блок обработки данных в разделе RTUB_CASES
  1115.         ----------------------------------------
  1116.         BEGIN
  1117.           SELECT rc.ID
  1118.             INTO nRTUB_CASES_ID
  1119.             FROM D_RTUB_CASES rc
  1120.            WHERE rc.AGENT = nAGENTS_ID
  1121.              AND rc.VERSION = nVER_RTUB_CASES
  1122.              AND (rc.NR_PATIENT = nNR_PATIENT_ID
  1123.                   OR
  1124.                   rc.NR_PATIENT IS NULL)
  1125.              AND COALESCE(cr.TUB_DATIZV,TRUNC(SYSDATE)) BETWEEN rc.CREATE_DATE AND COALESCE(rc.CLOSE_DATE,TRUNC(SYSDATE))
  1126.              AND ROWNUM = 1;
  1127.         EXCEPTION
  1128.           WHEN NO_DATA_FOUND THEN
  1129.             --получение данных для вставки в таблицу D_RTUB_CASES
  1130.             WITH N_REGISTR_TYPES AS (SELECT rt.ID
  1131.                                        FROM D_NOS_REGISTR_TYPES rt
  1132.                                       WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  1133.                                         AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  1134.                                         AND ROWNUM = 1),
  1135.                 PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.TUB_DATIZV,dAGENT_BIRTHDATE) >= 18 THEN 1
  1136.                                                 ELSE 2
  1137.                                             END) age
  1138.                                      FROM dual)
  1139.              
  1140.             SELECT (SELECT dpg.ID
  1141.                       FROM D_DTUB_PAT_GROUP dpg
  1142.                      WHERE dpg.VERSION = nVER_DTUB_PAT_GROUP
  1143.                        AND dpg.PG_CODE = (SELECT vdpg.MIS_CODE
  1144.                                             FROM IMP70_V_KONVE_DTUB_PAT_GROUP vdpg
  1145.                                            WHERE UPPER(vdpg.FILE_CODE) = UPPER(cr.TUB_TIPPAC)
  1146.                                              AND ROWNUM = 1)
  1147.                        AND ROWNUM = 1),
  1148.  
  1149.                    (SELECT pdg.ID
  1150.                       FROM D_PATIENTS_DGROUP pdg
  1151.                      WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
  1152.                        AND pdg.HG_CODE = (SELECT vpg.MIS_CODE
  1153.                                             FROM IMP70_V_KONVE_PAT_DGROUP vpg
  1154.                                            WHERE UPPER(vpg.FILE_CODE) = UPPER(cr.TUB_GRU)
  1155.                                              AND ROWNUM = 1)
  1156.                        AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  1157.                        AND pdg.AGE     = (SELECT AGE FROM PAT_DGROUP_AGE)
  1158.                        AND ROWNUM = 1)
  1159.  
  1160.               INTO nPAT_GROUP,
  1161.                    nFROM_GROUP
  1162.               FROM dual;
  1163.  
  1164.  
  1165.             BEGIN
  1166.               D_PKG_RTUB_CASES.ADD(pnD_INSERT_ID      => nRTUB_CASES_ID,
  1167.                                    pnLPU              => pnLPU,
  1168.                                    pnAGENT            => nAGENTS_ID,
  1169.                                    pnNR_PATIENT       => nNR_PATIENT_ID,
  1170.                                    pnPAT_GROUP        => nPAT_GROUP,
  1171.                                    pnFROM_DGROUP      => nFROM_GROUP,
  1172.                                    pnLPU_CREATE       => nLPUDICT_ID,
  1173.                                    pdCREATE_DATE      => cr.TUB_DATIZV,
  1174.                                    pdLAST_CHANGE_DATE => cr.TUB_DATKOR,
  1175.                                    pnLAST_CHANGE_EMP  => NULL,
  1176.                                    pdCLOSE_DATE       => NULL,
  1177.                                    pnCLOSE_EMP        => NULL,
  1178.                                    psCLOSE_REASON     => NULL,
  1179.                                    pnLPU_IN_CHARGE    => NULL);
  1180.             EXCEPTION
  1181.               WHEN OTHERS THEN
  1182.                 lg(pnLOG_IDENT,'ADD_RTUB_CASES','Ошибка добавления случая туберкулеза для пациента: '||cr.FIO, SQLERRM);
  1183.             END;
  1184.         END;
  1185.  
  1186.  
  1187.         ----------------------------------------
  1188.         --2.7 блок обработки данных в разделе RTUB_CASE_DGNS
  1189.         ----------------------------------------
  1190.         IF nRTUB_CASES_ID IS NOT NULL THEN  
  1191.           BEGIN
  1192.             SELECT rcd.ID
  1193.               INTO nRTUB_CASE_DGNS_ID
  1194.               FROM D_RTUB_CASE_DGNS rcd
  1195.              WHERE rcd.PID = nRTUB_CASES_ID
  1196.                AND rcd.VERSION = nVER_RTUB_CASE_DGNS
  1197.                AND COALESCE(cr.TUB_DAT1TB,TRUNC(SYSDATE)) BETWEEN rcd.DATE_BEGIN AND COALESCE(rcd.DATE_END,TRUNC(SYSDATE))
  1198.                AND ROWNUM = 1;
  1199.           EXCEPTION
  1200.             WHEN NO_DATA_FOUND THEN
  1201.               --получим данные для вставки в таблицу D_RTUB_CASE_DGNS
  1202.               SELECT (SELECT m.ID
  1203.                         FROM D_MKB10 m
  1204.                        WHERE m.MKB_CODE = 'A15.0'
  1205.                          AND m.VERSION  = nVER_MKB10
  1206.                          AND ROWNUM = 1),
  1207.                        
  1208.                      (SELECT dcf.ID
  1209.                         FROM D_DTUB_CLINIC_FORMS dcf
  1210.                        WHERE dcf.VERSION  = nVER_DTUB_CLINIC_FORMS
  1211.                          AND dcf.CLF_CODE = (SELECT vcf.MIS_CODE
  1212.                                                FROM IMP70_V_KONVE_CLINIC_FORMS vcf
  1213.                                               WHERE UPPER(vcf.FILE_CODE) = UPPER(cr.TUB_KODIAG)
  1214.                                                 AND ROWNUM = 1)
  1215.                          AND ROWNUM = 1),
  1216.                        
  1217.                      (SELECT ddm.ID
  1218.                         FROM D_DTUB_DETECT_METHODS ddm
  1219.                        WHERE ddm.VERSION = nVER_DTUB_DETECT_METHODS
  1220.                          AND UPPER(ddm.DM_CODE) = (SELECT UPPER(vdm.MIS_CODE)
  1221.                                                      FROM IMP70_V_KONVE_DETECT_METHODS vdm
  1222.                                                     WHERE UPPER(REPLACE(vdm.FILE_CODE,' ','')) = UPPER(REPLACE(cr.TUB_PROF,' ',''))
  1223.                                                       AND ROWNUM = 1)
  1224.                          AND ROWNUM = 1)
  1225.                            
  1226.                 INTO nMKB,
  1227.                      nCLINIC_FORM,
  1228.                      nDETECT_METHOD
  1229.                 FROM dual;
  1230.                
  1231.                
  1232.               IF cr.TUB_DAT1TB IS NULL THEN
  1233.                 lg(pnLOG_IDENT,'ADD_RTUB_CASE_DGNS','Для пациента: '||cr.FIO||' не заполнено поле TUB_DAT1TB. Создание диагноза невозможно.');
  1234.               ELSE
  1235.                 BEGIN
  1236.                   D_PKG_RTUB_CASE_DGNS.ADD(pnD_INSERT_ID         => nRTUB_CASE_DGNS_ID,
  1237.                                            pnLPU                 => pnLPU,
  1238.                                            pnPID                 => nRTUB_CASES_ID,
  1239.                                            pdDATE_BEGIN          => cr.TUB_DAT1TB,
  1240.                                            pdDATE_END            => NULL,
  1241.                                            pnEMPLOYER            => NULL,
  1242.                                            psEMP_FIO             => NULL,
  1243.                                            pnMKB_LPU             => nLPUDICT_ID,
  1244.                                            psMKB_LPU_TEXT        => NULL,
  1245.                                            pnMKB                 => nMKB,
  1246.                                            pnMKB_TYPE            => NULL,
  1247.                                            psMKB_TEXT            => NULL,
  1248.                                            pdCONFIRM_DATE        => cr.TUB_DATUCH,
  1249.                                            pnFORM                => NULL,
  1250.                                            pnCLINIC_FORM         => nCLINIC_FORM,
  1251.                                            pnDESTRUCT            => NULL,
  1252.                                            pnCOMB_INJURY         => NULL,
  1253.                                            pnOPERATION           => NULL,
  1254.                                            pnCOMPLICATION        => NULL,
  1255.                                            pnDETECT_METHOD       => nDETECT_METHOD,
  1256.                                            psDETECT_METHOD_OTHER => NULL);
  1257.                 EXCEPTION
  1258.                   WHEN OTHERS THEN
  1259.                     lg(pnLOG_IDENT,'ADD_RTUB_CASE_DGNS','Ошибка добавления диагноза для пациента: '||cr.FIO, SQLERRM);
  1260.                 END;
  1261.               END IF;
  1262.           END;
  1263.         END IF;
  1264.        
  1265.  
  1266.         ----------------------------------------
  1267.         --2.8 блок обработки данных в разделе RTUB_CASE_DISP
  1268.         ----------------------------------------
  1269.         IF nRTUB_CASES_ID IS NOT NULL THEN  
  1270.           BEGIN
  1271.             SELECT rcd.ID
  1272.               INTO nRTUB_CASE_DISP_ID
  1273.               FROM D_RTUB_CASE_DISP rcd
  1274.              WHERE rcd.PID = nRTUB_CASES_ID
  1275.                AND rcd.VERSION = nVER_RTUB_CASE_DISP
  1276.                AND rcd.DISP_LPU = nLPUDICT_ID
  1277.                AND COALESCE(cr.TUB_DATUCH,TRUNC(SYSDATE)) BETWEEN rcd.DATE_IN AND COALESCE(rcd.DATE_OUT,TRUNC(SYSDATE))
  1278.                AND ROWNUM = 1;
  1279.           EXCEPTION
  1280.             WHEN NO_DATA_FOUND THEN
  1281.               BEGIN
  1282.                 D_PKG_RTUB_CASE_DISP.ADD(pnD_INSERT_ID       => nRTUB_CASE_DISP_ID,
  1283.                                          pnLPU               => pnLPU,
  1284.                                          pnPID               => nRTUB_CASES_ID,
  1285.                                          pnDISP_LPU          => nLPUDICT_ID,
  1286.                                          pnDISP_EMP          => NULL,
  1287.                                          pdDATE_IN           => cr.TUB_DATUCH,
  1288.                                          pdDATE_OUT          => NULL,
  1289.                                          pnOUT_REASON        => NULL,
  1290.                                          pnCONTROL_CARD      => NULL,
  1291.                                          pdRECOMEND_DATE_OUT => NULL,
  1292.                                          pnRECOMEND_OUT_REAS => NULL);
  1293.               EXCEPTION
  1294.                 WHEN OTHERS THEN
  1295.                   lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP','Ошибка добавления данных учета в ЛПУ случая туберкулеза для пациента: '||cr.FIO, SQLERRM);
  1296.               END;
  1297.           END;
  1298.         END IF;
  1299.  
  1300.  
  1301.         ----------------------------------------
  1302.         --2.9 блок обработки данных в разделе RTUB_CASE_DISP_DATA
  1303.         ----------------------------------------
  1304.         IF nRTUB_CASE_DISP_ID IS NOT NULL THEN
  1305.           IF cr.TUB_GRUDU IS NOT NULL THEN
  1306.             BEGIN
  1307.               SELECT rcdd.ID
  1308.                 INTO nRTUB_CASE_DISP_DATA_ID
  1309.                 FROM D_RTUB_CASE_DISP_DATA rcdd
  1310.                WHERE rcdd.PID = nRTUB_CASE_DISP_ID
  1311.                  AND rcdd.VERSION = nVER_RTUB_CASE_DISP_DATA
  1312.                  AND COALESCE(cr.TUB_DATUCH,TRUNC(SYSDATE)) BETWEEN rcdd.DATE_IN AND COALESCE(rcdd.DATE_OUT,TRUNC(SYSDATE))
  1313.                  AND ROWNUM = 1;
  1314.             EXCEPTION
  1315.               WHEN NO_DATA_FOUND THEN
  1316.                 --получение данных для вставки в таблицу D_RTUB_CASE_DISP_DATA
  1317.                 WITH N_REGISTR_TYPES AS (SELECT rt.ID
  1318.                                            FROM D_NOS_REGISTR_TYPES rt
  1319.                                           WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  1320.                                             AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  1321.                                             AND ROWNUM = 1),
  1322.                 PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.TUB_DATUCH,dAGENT_BIRTHDATE) >= 18 THEN 1
  1323.                                                 ELSE 2
  1324.                                             END) age
  1325.                                      FROM dual)
  1326.                  
  1327.                 SELECT (SELECT pdg.ID
  1328.                           FROM D_PATIENTS_DGROUP pdg
  1329.                          WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
  1330.                            AND UPPER(pdg.HG_CODE) = (SELECT UPPER(vpdg.MIS_CODE)
  1331.                                                        FROM IMP70_V_KONVE_PAT_DGROUP vpdg
  1332.                                                       WHERE vpdg.FILE_CODE = UPPER(cr.TUB_GRUDU)
  1333.                                                         AND ROWNUM = 1)
  1334.                            AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  1335.                            AND pdg.AGE     = (SELECT AGE FROM PAT_DGROUP_AGE)
  1336.                            AND ROWNUM = 1)
  1337.  
  1338.                   INTO nDGROUP
  1339.                   FROM dual;
  1340.  
  1341.                 IF nDGROUP IS NULL THEN
  1342.                   lg(pnLOG_IDENT,'NDF_RTUB_CASE_DISP_DATA','Не определена Группа Д-учета TUB_GRUDU='||cr.TUB_GRUDU||' для пациента: '||cr.FIO);
  1343.                 ELSE
  1344.                   BEGIN
  1345.                     D_PKG_RTUB_CASE_DISP_DATA.ADD(pnD_INSERT_ID     => nRTUB_CASE_DISP_DATA_ID,
  1346.                                                   pnLPU             => pnLPU,
  1347.                                                   pnPID             => nRTUB_CASE_DISP_ID,
  1348.                                                   pnDGROUP          => nDGROUP,
  1349.                                                   pdDATE_IN         => cr.TUB_DATUCH,
  1350.                                                   pdRECOM_DATE_OUT  => NULL,
  1351.                                                   pnRECOM_TO_DGROUP => NULL,
  1352.                                                   pdDATE_OUT        => NULL);
  1353.                   EXCEPTION
  1354.                     WHEN OTHERS THEN
  1355.                       lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP_DATA','Ошибка добавления Группы Д-учета для пациента : '||cr.FIO, SQLERRM);
  1356.                   END;
  1357.                 END IF;
  1358.             END;
  1359.           END IF;
  1360.         END IF;
  1361.  
  1362.  
  1363.         ----------------------------------------
  1364.         --2.10 блок обработки данных в разделе AGENT_COMP_DISEASES
  1365.         ----------------------------------------
  1366.         BEGIN
  1367.           SELECT acd.ID
  1368.             INTO nAGENT_COMP_DISEASES_ID
  1369.             FROM D_AGENT_COMP_DISEASES acd
  1370.            WHERE acd.PID = nAGENTS_ID
  1371.              AND acd.VERSION = nVER_AGENT_COMP_DISEASES
  1372.              AND COALESCE(cr.TUB_DATUCH,TRUNC(SYSDATE)) BETWEEN acd.DATE_BEGIN AND COALESCE(acd.DATE_END,TRUNC(SYSDATE))
  1373.              AND ROWNUM = 1;
  1374.         EXCEPTION
  1375.           WHEN NO_DATA_FOUND THEN
  1376.             --создадим несколько сопуствующих заболеваний при необходимости
  1377.             FOR z IN (SELECT            'TUB_SAHD'   col_name, cr.TUB_SAHD   col_value FROM dual
  1378.                        UNION ALL SELECT 'TUB_PSIH'   col_name, cr.TUB_PSIH   col_value FROM dual
  1379.                        UNION ALL SELECT 'TUB_YAZV'   col_name, cr.TUB_YAZV   col_value FROM dual
  1380.                        UNION ALL SELECT 'TUB_GEPAT'  col_name, cr.TUB_GEPAT  col_value FROM dual
  1381.                        UNION ALL SELECT 'TUB_POCHPA' col_name, cr.TUB_POCHPA col_value FROM dual
  1382.                        UNION ALL SELECT 'TUB_IBS'    col_name, cr.TUB_IBS    col_value FROM dual
  1383.                        UNION ALL SELECT 'TUB_GIPERT' col_name, cr.TUB_GIPERT col_value FROM dual
  1384.                        UNION ALL SELECT 'TUB_HNZL'   col_name, cr.TUB_HNZL   col_value FROM dual
  1385.                        UNION ALL SELECT 'TUB_KORTS'  col_name, cr.TUB_KORTS  col_value FROM dual
  1386.                        UNION ALL SELECT 'TUB_ONKOL'  col_name, cr.TUB_ONKOL  col_value FROM dual
  1387.                        UNION ALL SELECT 'TUB_OPERTB' col_name, cr.TUB_OPERTB col_value FROM dual
  1388.                      )
  1389.             LOOP
  1390.               nCOMP_DISEASE := NULL;
  1391.              
  1392.               --получение данные для вставки
  1393.               WITH COMP_DISEASES_CODES AS (SELECT (CASE WHEN z.COL_NAME = 'TUB_SAHD'   AND z.COL_VALUE IS NOT NULL   THEN '137'
  1394.                                                         WHEN z.COL_NAME = 'TUB_PSIH'   AND z.COL_VALUE IS NOT NULL   THEN '11'
  1395.                                                         WHEN z.COL_NAME = 'TUB_YAZV'   AND z.COL_VALUE IS NOT NULL   THEN 'ЯБ ДПК'
  1396.                                                         WHEN z.COL_NAME = 'TUB_GEPAT'  AND UPPER(z.COL_VALUE) = 'C'  THEN 'HCV'
  1397.                                                         WHEN z.COL_NAME = 'TUB_GEPAT'  AND UPPER(z.COL_VALUE) = 'B'  THEN 'HBsAg'
  1398.                                                         WHEN z.COL_NAME = 'TUB_GEPAT'  AND UPPER(z.COL_VALUE) = 'ДА' THEN 'Гепатит'
  1399.                                                         WHEN z.COL_NAME = 'TUB_POCHPA' AND z.COL_VALUE IS NOT NULL   THEN '12'
  1400.                                                         WHEN z.COL_NAME = 'TUB_IBS'    AND z.COL_VALUE IS NOT NULL   THEN 'ИБС'
  1401.                                                         WHEN z.COL_NAME = 'TUB_GIPERT' AND z.COL_VALUE IS NOT NULL   THEN 'Гипертония'
  1402.                                                         WHEN z.COL_NAME = 'TUB_HNZL'   AND z.COL_VALUE IS NOT NULL   THEN 'ХНЗЛ'
  1403.                                                         WHEN z.COL_NAME = 'TUB_KORTS'  AND z.COL_VALUE IS NOT NULL   THEN '13'
  1404.                                                         WHEN z.COL_NAME = 'TUB_ONKOL'  AND z.COL_VALUE IS NOT NULL   THEN '15'
  1405.                                                         WHEN z.COL_NAME = 'TUB_OPERTB' AND z.COL_VALUE IS NOT NULL   THEN '16'
  1406.                                                         ELSE NULL
  1407.                                                    END) cd_code
  1408.                                              FROM dual)
  1409.               SELECT (SELECT cd.ID
  1410.                         FROM D_COMP_DISEASES cd
  1411.                        WHERE cd.VERSION = nVER_COMP_DISEASES
  1412.                          AND LOWER(cd.CD_CODE) = (SELECT LOWER(CD_CODE) FROM COMP_DISEASES_CODES)
  1413.                          AND ROWNUM = 1)
  1414.                 INTO nCOMP_DISEASE
  1415.                 FROM dual;
  1416.  
  1417.               IF nCOMP_DISEASE IS NOT NULL THEN
  1418.                 BEGIN
  1419.                   D_PKG_AGENT_COMP_DISEASES.ADD(pnD_INSERT_ID  => nAGENT_COMP_DISEASES_ID,
  1420.                                                 pnLPU          => pnLPU,
  1421.                                                 pnPID          => nAGENTS_ID,
  1422.                                                 pnCOMP_DISEASE => nCOMP_DISEASE,
  1423.                                                 pdDATE_BEGIN   => cr.TUB_DATUCH,
  1424.                                                 pdDATE_END     => NULL,
  1425.                                                 psNOTE         => NULL);
  1426.                 EXCEPTION
  1427.                   WHEN OTHERS THEN
  1428.                     lg(pnLOG_IDENT,'ADD_AGENT_COMP_DISEASES','Ошибка добавления сопутствующего заболевания пациента: '||cr.FIO||' (поле '||z.COL_NAME||' файла)', SQLERRM);
  1429.                 END;
  1430.               END IF;
  1431.             END LOOP;
  1432.         END;  
  1433.  
  1434.  
  1435.         ----------------------------------------
  1436.         --2.11 блок обработки данных в разделе AGENT_REGISTRATION
  1437.         ----------------------------------------
  1438.         IF cr.TUB_POLIK <> 0 THEN -- создаем запись только если TUB_POLIK не равно 0.
  1439.           --получение данных для вставки в таблицу
  1440.           SELECT (SELECT rp.ID
  1441.                     FROM D_REGISTER_PURPOSES rp
  1442.                    WHERE rp.VERSION = nVER_REGISTER_PURPOSES
  1443.                      AND rp.RP_CODE = (SELECT (CASE WHEN TRUNC(MONTHS_BETWEEN(TRUNC(cr.TUB_DATUCH),dAGENT_BIRTHDATE))/12 >= 18 THEN '1'
  1444.                                                     ELSE '2'
  1445.                                                END)
  1446.                                          FROM dual)
  1447.                      AND ROWNUM = 1),
  1448.                    
  1449.                  (SELECT ld.ID
  1450.                     FROM D_LPUDICT ld
  1451.                    WHERE ld.VERSION  = nVER_LPUDICT
  1452.                      AND LOWER(ld.LPU_CODE) = (SELECT LOWER(vlc.MIS_CODE)
  1453.                                                  FROM IMP70_V_KONVE_LPUDICT_CODES vlc
  1454.                                                 WHERE vlc.FILE_CODE = cr.TUB_POLIK
  1455.                                                   AND ROWNUM = 1)
  1456.                      AND ROWNUM = 1)
  1457.            
  1458.                
  1459.             INTO nREGISTER_PURPOSE,
  1460.                  nLPU_REG
  1461.             FROM dual;
  1462.          
  1463.  
  1464.           --проверим, нет ли прикрепления к текущему ЛПУ
  1465.           SELECT (SELECT ar.ID
  1466.                     FROM D_AGENT_REGISTRATION ar
  1467.                    WHERE ar.PID = nAGENTS_ID
  1468.                      AND ar.LPU_REG = nLPU_REG
  1469.                      AND COALESCE(cr.TUB_DATUCH,TRUNC(SYSDATE)) BETWEEN ar.BEGIN_DATE AND COALESCE(ar.END_DATE,TRUNC(SYSDATE))
  1470.                      AND ROWNUM = 1)
  1471.             INTO nAGENT_REGISTRATION_ID
  1472.             FROM dual;
  1473.          
  1474.          
  1475.           IF nAGENT_REGISTRATION_ID IS NULL THEN
  1476.             --Определим участок
  1477.             IF nLPU_REG IS NULL THEN
  1478.               lg(pnLOG_IDENT,'NDF_LPUDICT','не определено ЛПУ прикрепления: TUB_POLIK = '||cr.TUB_POLIK||'(пациент - '||cr.FIO||')');
  1479.             ELSE
  1480.               BEGIN
  1481.                 SELECT s.ID
  1482.                   INTO nLPU_SITE
  1483.                   FROM D_SITES s
  1484.                  WHERE s.VERSION = nVER_SITES
  1485.                    AND s.lpudict = nLPU_REG
  1486.                    AND UPPER(s.SITE_NAME) LIKE '%'||UPPER(cr.TUB_UCH)||'%'
  1487.                    AND ROWNUM = 1;
  1488.               EXCEPTION
  1489.                 WHEN NO_DATA_FOUND THEN
  1490.                   lg(pnLOG_IDENT,'NDF_SITES','Не определен участок '||cr.TUB_UCH||' для D_LPUDICT='||nLPU_REG||'(POLIK ='||cr.TUB_POLIK||')');
  1491.                   /* -- закомментировано, так как не чем заполнить обязательное pnDIVISION
  1492.                   begin
  1493.                     D_PKG_SITES.ADD(pnD_INSERT_ID      => nLPU_SITE,
  1494.                                     pnLPU              => pnLPU,
  1495.                                     psSITE_CODE        => cr.TUB_UCH,
  1496.                                     psSITE_NAME        => cr.TUB_UCH,
  1497.                                     pnSITE_TYPE        => null,
  1498.                                     pnMAX_PACIENT      => null,
  1499.                                     pnREGISTER_PURPOSE => nREGISTER_PURPOSE,
  1500.                                     pnDIVISION         => null,
  1501.                                     pnLPUDICT          => nLPU_REG);
  1502.                   exception
  1503.                     when others then
  1504.                       lg(pnLOG_IDENT,'ADD_SITES','Ошибка добавления участка: '||cr.TUB_UCH||' для D_LPUDICT='||nLPU_REG||'(TUB_POLIK ='||cr.TUB_POLIK||')',sqlerrm);
  1505.                   end;
  1506.                   */
  1507.               END;
  1508.  
  1509.               BEGIN
  1510.                 D_PKG_AGENT_REGISTRATION.ADD(pnD_INSERT_ID           => nAGENT_REGISTRATION_ID,
  1511.                                              pnLPU                   => pnLPU,
  1512.                                              pnPID                   => nAGENTS_ID,
  1513.                                              pnLPU_REG               => nLPU_REG,
  1514.                                              pnREGISTER_PURPOSE      => nREGISTER_PURPOSE,
  1515.                                              pdBEGIN_DATE            => cr.TUB_DATUCH,
  1516.                                              pdEND_DATE              => NULL,
  1517.                                              pnLPU_SITE              => nLPU_SITE,
  1518.                                              pnREG_TYPE              => NULL,
  1519.                                              psREG_DOC_NUMB          => NULL,
  1520.                                              psREG_NOTE              => NULL,
  1521.                                              pnREG_CATEGORY          => NULL,
  1522.                                              pnDIVISION              => NULL,
  1523.                                              pnAGENT_APPLIСATION_REG => NULL);
  1524.               EXCEPTION
  1525.                 WHEN OTHERS THEN
  1526.                   lg(pnLOG_IDENT,'ADD_AGENT_REGISTRATION','Ошибка добавления регистрации пациента: '||cr.FIO, SQLERRM);
  1527.               END;
  1528.             END IF;
  1529.           END IF;            
  1530.         END IF;
  1531.  
  1532.  
  1533.         ----------------------------------------
  1534.         --2.12 блок обработки данных в разделе AGENT_GR_RENTGENOGR
  1535.         ----------------------------------------
  1536.  
  1537.         --получеим данные дл вставки в таблицу
  1538.         IF cr.TUB_SOCGR IS NOT NULL THEN
  1539.           BEGIN
  1540.             SELECT agr.ID
  1541.               INTO nAGENT_GR_RENTGENOGR_ID
  1542.               FROM D_AGENT_GR_RENTGENOGR agr
  1543.              WHERE agr.PID = nAGENTS_ID
  1544.                AND agr.VERSION = nVER_AGENT_GR_RENTGENOGR
  1545.                AND (TRUNC(SYSDATE) BETWEEN agr.BEGIN_DATE AND COALESCE(agr.END_DATE,TRUNC(SYSDATE))
  1546.                     OR
  1547.                     agr.BEGIN_DATE IS NULL)
  1548.                AND ROWNUM = 1;
  1549.           EXCEPTION
  1550.             WHEN NO_DATA_FOUND THEN
  1551.               SELECT (SELECT grf.ID
  1552.                         FROM D_GR_RENTGENOGRAPH grf
  1553.                        WHERE grf.VERSION = nVER_GR_RENTGENOGRAPH
  1554.                          AND LOWER(grf.GRF_CODE) = (SELECT LOWER(vsgr.MIS_CODE)
  1555.                                                       FROM IMP70_V_KONVE_SOCGR_GR_RENTGEN vsgr
  1556.                                                      WHERE LOWER(vsgr.FILE_CODE) = LOWER(cr.TUB_SOCGR)
  1557.                                                        AND ROWNUM = 1)
  1558.                          AND ROWNUM = 1)
  1559.                 INTO nGR_RENTGENOGRAPH
  1560.                 FROM dual;
  1561.  
  1562.                
  1563.               IF nGR_RENTGENOGRAPH IS NULL THEN
  1564.                 lg(pnLOG_IDENT,'NDF_AGENT_GR_RENTGENOGR','Не определена группа риска флюорографии '||cr.TUB_SOCGR||' для пациента: '||cr.FIO);
  1565.               ELSE  
  1566.                 BEGIN
  1567.                   D_PKG_AGENT_GR_RENTGENOGR.ADD(pnD_INSERT_ID      => nAGENT_GR_RENTGENOGR_ID,
  1568.                                                 pnLPU              => pnLPU,
  1569.                                                 pnPID              => nAGENTS_ID,
  1570.                                                 pnGR_RENTGENOGRAPH => nGR_RENTGENOGRAPH,
  1571.                                                 pdBEGIN_DATE       => NULL,
  1572.                                                 pdEND_DATE         => NULL);
  1573.                 EXCEPTION
  1574.                   WHEN OTHERS THEN
  1575.                     lg(pnLOG_IDENT,'ADD_AGENT_GR_RENTGENOGR','Ошибка добавления группы риска флюорографии пациента: '||cr.FIO, SQLERRM);
  1576.                 END;
  1577.               END IF;
  1578.           END;
  1579.         END IF;
  1580.  
  1581.  
  1582.         ----------------------------------------
  1583.         --2.13 блок обработки данных в разделе AGENT_DECRETIV_GROUPS
  1584.         ----------------------------------------
  1585.         IF cr.TUB_DEKGR <> 0 THEN
  1586.           BEGIN
  1587.             SELECT adg.ID
  1588.               INTO nAGENT_DECRETIV_GROUPS_ID
  1589.               FROM D_AGENT_DECRETIV_GROUPS adg
  1590.              WHERE adg.PID = nAGENTS_ID
  1591.                AND adg.VERSION = nVER_AGENT_DECRETIV_GROUPS
  1592.                AND (TRUNC(SYSDATE) BETWEEN adg.BEGIN_DATE AND COALESCE(adg.END_DATE,TRUNC(SYSDATE))
  1593.                     OR
  1594.                     adg.BEGIN_DATE IS NULL)
  1595.                AND ROWNUM = 1;
  1596.           EXCEPTION
  1597.             WHEN NO_DATA_FOUND THEN
  1598.               --получим данные для вставки в таблицу
  1599.               WITH DEC_GROUPS_CODES AS (SELECT (CASE WHEN cr.TUB_DEKGR = 11 THEN 7
  1600.                                                      ELSE NULL
  1601.                                                 END)
  1602.                                           FROM dual)
  1603.               SELECT (SELECT drg.ID
  1604.                         FROM D_DECRETIV_GROUPS drg
  1605.                        WHERE drg.VERSION = nVER_DECRETIV_GROUPS
  1606.                          AND LOWER(drg.GRD_CODE) = (SELECT LOWER(GRD_CODE) FROM DEC_GROUPS_CODES)
  1607.                          AND ROWNUM = 1)
  1608.                 INTO nDECRETIV_GROUP
  1609.                 FROM dual;
  1610.                
  1611.               BEGIN
  1612.                 D_PKG_AGENT_DECRETIV_GROUPS.ADD(pnD_INSERT_ID    => nAGENT_DECRETIV_GROUPS_ID,
  1613.                                                 pnLPU            => pnLPU,
  1614.                                                 pnPID            => nAGENTS_ID,
  1615.                                                 pnDECRETIV_GROUP => nDECRETIV_GROUP,
  1616.                                                 pdBEGIN_DATE     => NULL,
  1617.                                                 pdEND_DATE       => NULL);
  1618.               EXCEPTION
  1619.                 WHEN OTHERS THEN
  1620.                   lg(pnLOG_IDENT,'ADD_AGENT_DECRETIV_GROUPS','Ошибка добавления декретированной группы пациента: '||cr.FIO, SQLERRM);
  1621.               END;
  1622.           END;
  1623.         END IF;
  1624.  
  1625.  
  1626.         ----------------------------------------
  1627.         --2.14 блок обработки данных в разделе AGENT_INABILITIES
  1628.         ----------------------------------------
  1629.         BEGIN
  1630.           SELECT ain.ID
  1631.             INTO nAGENT_INABILITIES_ID
  1632.             FROM D_AGENT_INABILITIES ain
  1633.            WHERE ain.PID = nAGENTS_ID
  1634.              AND ain.VERSION = nVER_AGENT_INABILITIES
  1635.              AND TRUNC(SYSDATE) BETWEEN ain.BEGIN_DATE AND COALESCE(ain.END_DATE,TRUNC(SYSDATE))
  1636.              AND ROWNUM = 1;
  1637.         EXCEPTION
  1638.           WHEN NO_DATA_FOUND THEN
  1639.             IF cr.TUB_INVTB IS NOT NULL THEN
  1640.               GET_INABILITY_DATA(psINABILITY       => cr.TUB_INVTB,
  1641.                                  pnINABILITY_GROUP => nINABILITY_GROUP,
  1642.                                  pdINABILITY_DATE  => dINABILITY_BEGIN_DATE);
  1643.               BEGIN
  1644.                 D_PKG_AGENT_INABILITIES.ADD(pnD_INSERT_ID        => nAGENT_INABILITIES_ID,
  1645.                                             pnLPU                => pnLPU,
  1646.                                             pnPID                => nAGENTS_ID,
  1647.                                             pnINABILITY_TYPE     => NULL,
  1648.                                             pnINABILITY_GRADE    => NULL,
  1649.                                             pnINABILITY_GROUP    => nINABILITY_GROUP,
  1650.                                             psINABILITY_DOC_NUMB => NULL,
  1651.                                             pnDISABILITY_GRADE   => NULL,
  1652.                                             pnINABILITY_STATUS   => NULL,
  1653.                                             pdBEGIN_DATE         => dINABILITY_BEGIN_DATE,
  1654.                                             pdEND_DATE           => NULL,
  1655.                                             pdDATE_LASTINSP      => NULL);
  1656.               EXCEPTION
  1657.                 WHEN OTHERS THEN
  1658.                   lg(pnLOG_IDENT,'ADD_AGENT_INABILITIES','Ошибка добавления данных об инвалидности пациента: '||cr.FIO, SQLERRM);
  1659.               END;
  1660.             END IF;
  1661.         END;
  1662.  
  1663.  
  1664.         ----------------------------------------
  1665.         --2.15 блок обработки данных в разделе AGENT_DETR_EFFECTS
  1666.         ----------------------------------------
  1667.         IF (cr.TUB_ALK IS NOT NULL) OR (cr.TUB_NARK IS NOT NULL) OR (cr.TUB_KUREN  IS NOT NULL) THEN
  1668.           BEGIN
  1669.             SELECT adef.ID
  1670.               INTO nAGENT_DETR_EFFECTS_ID
  1671.               FROM D_AGENT_DETR_EFFECTS adef
  1672.              WHERE adef.PID = nAGENTS_ID
  1673.                AND adef.VERSION = nVER_AGENT_DETR_EFFECTS
  1674.                AND ROWNUM = 1;
  1675.           EXCEPTION
  1676.             WHEN NO_DATA_FOUND THEN
  1677.               --получим данные из таблицы импорта для вставку в таблицу
  1678.               WITH DET_EFFECTS_CODES AS (SELECT (CASE WHEN cr.TUB_ALK   IS NOT NULL  THEN 2
  1679.                                                       WHEN cr.TUB_NARK  IS NOT NULL  THEN 4
  1680.                                                       WHEN cr.TUB_KUREN IS NOT NULL  THEN 1
  1681.                                                       ELSE NULL
  1682.                                                  END)
  1683.                                            FROM dual)
  1684.               SELECT (SELECT def.ID
  1685.                         FROM D_DETRIMENTAL_EFFECTS def
  1686.                        WHERE def.VERSION = nVER_DETRIMENTAL_EFFECTS
  1687.                          AND def.CODE = (SELECT CODE FROM DET_EFFECTS_CODES)
  1688.                          AND ROWNUM = 1)
  1689.                 INTO nDETR_EFFECT
  1690.                 FROM dual;
  1691.                
  1692.  
  1693.               BEGIN
  1694.                 D_PKG_AGENT_DETR_EFFECTS.ADD(pnD_INSERT_ID => nAGENT_DETR_EFFECTS_ID,
  1695.                                              pnLPU         => pnLPU,
  1696.                                              pnPID         => nAGENTS_ID,
  1697.                                              pnDETR_EFFECT => nDETR_EFFECT,
  1698.                                              pnIS_ACTUAL   => 1);
  1699.               EXCEPTION
  1700.                 WHEN OTHERS THEN
  1701.                   lg(pnLOG_IDENT,'ADD_AGENT_DETR_EFFECTS','Ошибка добавления наследственных заболеваний пациента: '||cr.FIO,SQLERRM);
  1702.               END;
  1703.           END;
  1704.         END IF;
  1705.  
  1706.  
  1707.         ----------------------------------------
  1708.         --2.16 блок обработки данных в разделе PERSMEDCARD
  1709.         ----------------------------------------
  1710.         BEGIN
  1711.           SELECT pmc.ID
  1712.             INTO nPERSMEDCARD_ID
  1713.             FROM D_PERSMEDCARD pmc
  1714.            WHERE pmc.LPU = pnLPU
  1715.              AND pmc.AGENT = nAGENTS_ID
  1716.              AND ROWNUM = 1;  
  1717.         EXCEPTION
  1718.           WHEN NO_DATA_FOUND THEN
  1719.             BEGIN
  1720.               D_PKG_PERSMEDCARD.ADD(pnD_INSERT_ID  => nPERSMEDCARD_ID,
  1721.                                     pnLPU          => pnLPU,
  1722.                                     pnCID          => nCAT_PERSMEDCARD,
  1723.                                     pnAGENT        => nAGENTS_ID,
  1724.                                     pnBLOODGROUPE  => NULL,
  1725.                                     pnRHESUS       => NULL,
  1726.                                     psECOLOR       => NULL,
  1727.                                     psCARD_NUMB    => cr.TUB_LIKOD,
  1728.                                     psNOTE         => NULL,
  1729.                                     pnREG_DIVISION => NULL,
  1730.                                     pnPMC_TYPE     => NULL,
  1731.                                     pnIA_PRINTED   => 0,
  1732.                                     pnSMS_AGREE    => 0,
  1733.                                     pnEMAIL_AGREE  => 0,
  1734.                                     pdCREATEDATE   => SYSDATE);
  1735.             EXCEPTION
  1736.               WHEN OTHERS THEN
  1737.                 lg(pnLOG_IDENT,'ADD_PERSMEDCARD','Ошибка добавления карты пациента: '||cr.FIO, SQLERRM);
  1738.             END;
  1739.         END;
  1740.  
  1741.  
  1742.  
  1743.         ----------------------------------------
  1744.         --2.17 блок обработки данных в разделе RTUB_CASE_DETECTION
  1745.         ----------------------------------------
  1746.         IF nRTUB_CASES_ID IS NOT NULL THEN  
  1747.           BEGIN
  1748.             SELECT rcd.ID
  1749.               INTO nRTUB_CASE_DETECTION_ID
  1750.               FROM D_RTUB_CASE_DETECTION rcd
  1751.              WHERE rcd.PID = nRTUB_CASES_ID
  1752.                AND rcd.VERSION = nVER_RTUB_CASE_DETECTION
  1753.                AND ROWNUM = 1;
  1754.           EXCEPTION
  1755.             WHEN NO_DATA_FOUND THEN
  1756.               -- получим данные из таблицы импорта для вставки в таблицу
  1757.               WITH N_REGISTR_TYPES AS (SELECT rt.ID
  1758.                                          FROM D_NOS_REGISTR_TYPES rt
  1759.                                         WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  1760.                                           AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  1761.                                           AND ROWNUM = 1)
  1762.               SELECT (SELECT ncpd.ID
  1763.                         FROM D_NR_CLS_PLACE_DETECTION ncpd
  1764.                        WHERE ncpd.VERSION = nVER_NR_CLS_PLACE_DETECTION
  1765.                          AND UPPER(ncpd.PD_CODE) = (SELECT UPPER(vkpd.MIS_CODE)
  1766.                                                       FROM IMP70_V_KONVE_PLACE_DETECTION vkpd
  1767.                                                      WHERE UPPER(vkpd.FILE_CODE) = UPPER(cr.TUB_MESREG)
  1768.                                                        AND ROWNUM = 1)
  1769.                          AND ncpd.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  1770.                          AND TRUNC(SYSDATE) BETWEEN ncpd.DATE_BEGIN AND COALESCE(ncpd.DATE_END,TRUNC(SYSDATE))
  1771.                          AND ROWNUM = 1),
  1772.                        
  1773.                      (SELECT pd.ID
  1774.                         FROM D_NR_CLS_PATH_DISCOVER pd
  1775.                        WHERE pd.VERSION = nVER_NR_CLS_PATH_DISCOVER
  1776.                          AND UPPER(pd.PATH_CODE) = (SELECT UPPER(vkpd.MIS_CODE)
  1777.                                                       FROM IMP70_V_KONVE_PATH_DISCOVER vkpd
  1778.                                                      WHERE UPPER(vkpd.FILE_CODE) = UPPER(cr.TUB_ZABVI)
  1779.                                                        AND ROWNUM = 1)
  1780.                          AND pd.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  1781.                          AND TRUNC(SYSDATE) BETWEEN pd.DATE_BEGIN AND COALESCE(pd.DATE_END,TRUNC(SYSDATE))
  1782.                          AND ROWNUM = 1)
  1783.                 INTO nDETECT_PLACE,
  1784.                      nDISCOVER_PATH
  1785.                 FROM dual;
  1786.                
  1787.               BEGIN
  1788.                 d_PKG_RTUB_CASE_DETECTION.ADD(pnD_INSERT_ID       => nRTUB_CASE_DETECTION_ID,
  1789.                                               pnLPU               => pnLPU,
  1790.                                               pnPID               => nRTUB_CASES_ID,
  1791.                                               pdSYMP_DATE         => NULL,
  1792.                                               pdFIRST_VIS_DATE    => cr.TUB_DATIZV,
  1793.                                               pnFIRST_VISIT       => NULL,
  1794.                                               pnDETECT_PLACE      => nDETECT_PLACE,
  1795.                                               psDETECT_PLACE_TEXT => NULL,
  1796.                                               pnDETECT_LPU        => NULL,
  1797.                                               psDETECT_LPU_TEXT   => NULL,
  1798.                                               pnDISCOVER_PATH     => nDISCOVER_PATH);
  1799.               EXCEPTION
  1800.                 WHEN OTHERS THEN
  1801.                   lg(pnLOG_IDENT,'ADD_RTUB_CASE_DETECTION','Ошибка добавления выявления диагноза туберкулеза пациента: '||cr.FIO, SQLERRM);
  1802.               END;
  1803.           END;
  1804.         END IF;
  1805.  
  1806.  
  1807.         ----------------------------------------
  1808.         --2.18 блок обработки данных в разделе RTUB_CASE_CHEMO
  1809.         ----------------------------------------
  1810.         IF nRTUB_CASES_ID IS NOT NULL THEN
  1811.           BEGIN
  1812.             SELECT rcc.ID
  1813.               INTO nRTUB_CASE_CHEMO_ID
  1814.               FROM D_RTUB_CASE_CHEMO rcc
  1815.              WHERE rcc.PID = nRTUB_CASES_ID
  1816.                AND rcc.VERSION = nVER_RTUB_CASE_CHEMO
  1817.                AND COALESCE(cr.TUB_DATLEC,TRUNC(SYSDATE)) BETWEEN rcc.DATE_BEGIN AND COALESCE(rcc.DATE_END,TRUNC(SYSDATE))
  1818.                AND ROWNUM = 1;
  1819.           EXCEPTION
  1820.             WHEN NO_DATA_FOUND THEN
  1821.               --получим данные из таблицы импорта для вставки
  1822.               SELECT (SELECT dcm.ID
  1823.                         FROM D_DTUB_CHEMO_MODES dcm
  1824.                        WHERE dcm.VERSION = nVER_DTUB_CHEMO_MODES
  1825.                          AND LOWER(dcm.CM_CODE) = LOWER(cr.TUB_REJ)
  1826.                          AND ROWNUM = 1),
  1827.                        
  1828.                      (SELECT dco.ID
  1829.                         FROM D_DTUB_CHEMO_OUT dco
  1830.                        WHERE dco.VERSION = nVER_DTUB_CHEMO_OUT
  1831.                          AND dco.CO_CODE = (SELECT vkdco.MIS_CODE
  1832.                                               FROM IMP70_V_KONVE_DTUB_CHEMO_OUT vkdco
  1833.                                              WHERE UPPER(vkdco.FILE_CODE) = UPPER(cr.TUB_REZULT)
  1834.                                                AND ROWNUM = 1)
  1835.                          AND ROWNUM = 1)
  1836.                
  1837.                 INTO nCHEMO_MODE,
  1838.                      nCHEMO_OUT
  1839.                 FROM dual;
  1840.                
  1841.               IF nCHEMO_MODE IS NULL THEN
  1842.                 lg(pnLOG_IDENT,'NDF_DTUB_CHEMO_MODES','Не определен режим химиотерапии для пациента: '||cr.FIO||' (TUB_REJ = '||cr.TUB_REJ||')');
  1843.               ELSE
  1844.                 IF nRTUB_CASE_DGNS_ID IS NOT NULL THEN
  1845.                   BEGIN
  1846.                     D_PKG_RTUB_CASE_CHEMO.ADD(pnD_INSERT_ID       => nRTUB_CASE_CHEMO_ID,
  1847.                                               pnLPU               => pnLPU,
  1848.                                               pnPID               => nRTUB_CASES_ID,
  1849.                                               pnDIAGNS            => nRTUB_CASE_DGNS_ID,
  1850.                                               pdDATE_BEGIN        => cr.TUB_DATLEC,
  1851.                                               pdDATE_END          => cr.TUB_DATREZ,
  1852.                                               pnCHEMO_MODE        => nCHEMO_MODE,
  1853.                                               pnCHEMO_OUT         => nCHEMO_OUT,
  1854.                                               pnCHEMO_PLACE       => 0,
  1855.                                               pnART               => 0,
  1856.                                               pnCOTRIMOXAZOL      => 0,
  1857.                                               pnIS_EMP            => NULL,
  1858.                                               pnIS_DRUG_SENS_RSLT => NULL);
  1859.                   EXCEPTION
  1860.                     WHEN OTHERS THEN
  1861.                       lg(pnLOG_IDENT,'ADD_RTUB_CASE_CHEMO','Ошибка добавления химиотерапии пациента: '||cr.FIO, SQLERRM);
  1862.                   END;
  1863.                 END IF;
  1864.               END IF;  
  1865.           END;
  1866.         END IF;
  1867.  
  1868.  
  1869.       END IF; -- конец условия if nAGENTS_ID is not null ПОСЛЕ создания D_AGENTS
  1870.     END LOOP; -- конец цикла по таблиуе импорта
  1871.   END IF;     -- конец условия if nERROR = 0 or pnERR_IGNORE = 1
  1872.  
  1873.   lg(pnLOG_IDENT,'END_IMP','Завершение импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
  1874.  
  1875.  
  1876. EXCEPTION
  1877.   WHEN OTHERS THEN
  1878.     lg(pnLOG_IDENT,'ERROR_IMP','Ошибка - '||SQLERRM);
  1879.     D_P_EXC('Ошибка процедуры IMP70_P_TUBKONVE импорта данных из таблицы IMP70_TUBKONVE: Ошибка - '||SQLERRM);
  1880. END IMP70_P_TUBKONVE;
  1881. -----------------------------------------------------------------------------------------------------------------------------
  1882.  
  1883. -----------------------------------------------------------------------------------------------------------------------------
  1884. --Процедура для импорта данных из файла UMEKONVE.dbf через таблицу импорта IMP70_UMEKONVE
  1885. PROCEDURE IMP70_P_UMEKONVE
  1886. (
  1887.   pnLPU                                IN  NUMBER,
  1888.   pnLOG_IDENT                          OUT NUMBER,
  1889.   pnERR_IGNORE                         IN  NUMBER DEFAULT 0
  1890. )
  1891. IS
  1892.  
  1893.   nVER_AGENT_ADDRS                                         D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_ADDRS
  1894.   nVER_GEOGRAFY                                            D_PKG_STD.tREF;     -- идентификатор версии для раздела GEOGRAFY
  1895.   nVER_NOS_REGISTR_TYPES                                   D_PKG_STD.tREF;     -- идентификатор версии для раздела NOS_REGISTR_TYPES
  1896.   nVER_NOS_REGISTRS                                        D_PKG_STD.tREF;     -- идентификатор версии для раздела NOS_REGISTRS
  1897.   nVER_NR_CLS_CONTINGENTS                                  D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_CLS_CONTINGENTS
  1898.   nVER_NR_PATIENT_DATA                                     D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_PATIENT_DATA
  1899.   nVER_MKB10                                               D_PKG_STD.tREF;     -- идентификатор версии для раздела nVER_MKB10
  1900.   nVER_DIRECTORIES_DATA_VER                                D_PKG_STD.tREF;     -- идентификатор версии для раздела DIRECTORIES_DATA_VER
  1901.   nVER_SOCIALSTATES                                        D_PKG_STD.tREF;     -- идентификатор версии для раздела SOCIALSTATES
  1902.   nVER_NR_PATIENTS                                         D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_PATIENTS
  1903.   nVER_RTUB_CASES                                          D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASES
  1904.   nVER_DTUB_PAT_GROUP                                      D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_PAT_GROUP
  1905.   nVER_PATIENTS_DGROUP                                     D_PKG_STD.tREF;     -- идентификатор версии для раздела PATIENTS_DGROUP
  1906.   nVER_RTUB_CASE_DGNS                                      D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_DGNS
  1907.   nVER_DTUB_CLINIC_FORMS                                   D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_CLINIC_FORMS
  1908.   nVER_DTUB_DETECT_METHODS                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_DETECT_METHODS
  1909.   nVER_RTUB_CASE_DISP                                      D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_DISP
  1910.   nVER_RTUB_CASE_DISP_DATA                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_DISP_DATA
  1911.   nVER_AGENT_COMP_DISEASES                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_COMP_DISEASES
  1912.   nVER_COMP_DISEASES                                       D_PKG_STD.tREF;     -- идентификатор версии для раздела COMP_DISEASES
  1913.   nVER_REGISTER_PURPOSES                                   D_PKG_STD.tREF;     -- идентификатор версии для раздела REGISTER_PURPOSES
  1914.   nVER_LPUDICT                                             D_PKG_STD.tREF;     -- идентификатор версии для раздела LPUDICT
  1915.   nVER_SITES                                               D_PKG_STD.tREF;     -- идентификатор версии для раздела SITES
  1916.   nVER_AGENT_GR_RENTGENOGR                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_GR_RENTGENOGR
  1917.   nVER_GR_RENTGENOGRAPH                                    D_PKG_STD.tREF;     -- идентификатор версии для раздела GR_RENTGENOGRAPH
  1918.   nVER_AGENT_DETR_EFFECTS                                  D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_DETR_EFFECTS
  1919.   nVER_DETRIMENTAL_EFFECTS                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела DETRIMENTAL_EFFECTS
  1920.   nVER_RTUB_CASE_CHEMO                                     D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_CHEMO
  1921.   nVER_DTUB_CHEMO_MODES                                    D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_CHEMO_MODES
  1922.   nVER_DTUB_CHEMO_OUT                                      D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_CHEMO_OUT
  1923.   nVER_RTUB_CASE_DETECTION                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_DETECTION
  1924.   nVER_NR_CLS_PATH_DISCOVER                                D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_CLS_PATH_DISCOVER
  1925.   nVER_NR_LPUDICT                                          D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_LPUDICT
  1926.  
  1927.   nCAT_ROOT                                                D_PKG_STD.tREF;     -- идентификатор корневого каталога для разделов
  1928.   nCAT_AGENTS                                              D_PKG_STD.tREF;     -- идентификатор каталога для раздела AGENTS
  1929.   nCAT_PERSMEDCARD                                         D_PKG_STD.tREF;     -- идентификатор каталога для раздела PERSMEDCARD
  1930.  
  1931.   nAGENTS_ID                                               D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENTS
  1932.   nAGENT_ADDRS_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_ADDRS
  1933.   nNR_PATIENT_DATA_ID                                      D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NR_PATIENT_DATA
  1934.   nAGENT_SOCIAL_STATES_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_SOCIAL_STATES
  1935.   nNR_PATIENT_ID                                           D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NR_PATIENT
  1936.   nRTUB_CASES_ID                                           D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASES
  1937.   nRTUB_CASE_DGNS_ID                                       D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_DGNS
  1938.   nRTUB_CASE_DISP_ID                                       D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_DISP
  1939.   nRTUB_CASE_DISP_DATA_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_DISP_DATA
  1940.   nAGENT_COMP_DISEASES_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_COMP_DISEASES
  1941.   nAGENT_REGISTRATION_ID                                   D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_REGISTRATION
  1942.   nAGENT_GR_RENTGENOGR_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_GR_RENTGENOGR
  1943.   nAGENT_DETR_EFFECTS_ID                                   D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_DETR_EFFECTS
  1944.   nPERSMEDCARD_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_PERSMEDCARD
  1945.   nRTUB_CASE_CHEMO_ID                                      D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_CHEMO
  1946.   nRTUB_CASE_DETECTION_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_DETECTION
  1947.  
  1948.  
  1949.  
  1950.   nERROR                                                   D_PKG_STD.tREF := 0;-- кол-во ошибок импорта
  1951.   sERROR_CODE                                              D_PKG_STD.tSTR;     -- код ошибки
  1952.   sAGN_CODE                                                D_AGENTS.AGN_CODE%TYPE;
  1953.                                                                                -- код контрагента в таблице D_AGENTS
  1954.   nLPUDICT_ID                                              D_PKG_STD.tREF;     -- идентификатор записи D_LPUDICT
  1955.   nCITY                                                    D_PKG_STD.tREF;     -- идентификатор населенного пункта
  1956.   nSTREET                                                  D_PKG_STD.tREF;     -- идентификатор улицы
  1957.   sHOUSE                                                   D_PKG_STD.tSTR;     -- номер дома в адресе
  1958.   sHOUSELIT                                                D_PKG_STD.tSTR;     -- литера дома в адресе
  1959.   sFLAT                                                    D_PKG_STD.tSTR;     -- номер квартиры в адресе
  1960.   nRAION                                                   D_PKG_STD.tREF;     -- идентификатор района из адреса
  1961.   nRAION_CODE                                              D_PKG_STD.tSTR;     -- код района
  1962.   sNASP_TMP                                                D_PKG_STD.tSTR;     -- временная переменная для хранения названия нас пункта из файла
  1963.   nNOS_REGISTR_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NOS_REGISTR
  1964.   nNR_CONTINGENT                                           D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NR_CLS_CONTINGENTS
  1965.   nDEATH_CAUSE                                             D_PKG_STD.tREF;     -- идентификатор записи в таблице D_MKB10
  1966.   nDEATH_PLACE                                             D_PKG_STD.tREF;     -- идентификатор записи в таблице DIRECTORIES_DATA_VER
  1967.   nSOCIAL_STATES_ID                                        D_PKG_STD.tREF;     -- идентификатор записи социального положения D_SOCIALSTATES
  1968.   nSOCIAL_CATEGORIES                                       D_PKG_STD.tREF;     -- идентификатор записи социальной категории D_SOCIALCATEGORIES
  1969.   nPAT_GROUP                                               D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_PAT_GROUP
  1970.   nFROM_GROUP                                              D_PKG_STD.tREF;     -- идентификатор записи D_PATIENTS_DGROUP
  1971.   nMKB                                                     D_PKG_STD.tREF;     -- идентификатор записи D_MKB10
  1972.   nCLINIC_FORM                                             D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_CLINIC_FORMS
  1973.   nDETECT_METHOD                                           D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_DETECT_METHODS
  1974.   nDGROUP                                                  D_PKG_STD.tREF;     -- идентификатор записи D_PATIENTS_DGROUP
  1975.   nCOMP_DISEASE                                            D_PKG_STD.tREF;     -- идентификатор записи D_COMP_DISEASES
  1976.   nREGISTER_PURPOSE                                        D_PKG_STD.tREF;     -- идентификатор записи D_REGISTER_PURPOSES
  1977.   nLPU_REG                                                 D_PKG_STD.tREF;     -- идентификатор записи D_LPUDICT
  1978.   nLPU_SITE                                                D_PKG_STD.tREF;     -- идентификатор записи D_SITES
  1979.   nGR_RENTGENOGRAPH                                        D_PKG_STD.tREF;     -- идентификатор записи D_GR_RENTGENOGRAPH
  1980.   nDETR_EFFECT                                             D_PKG_STD.tREF;     -- идентификатор записи D_DETRIMENTAL_EFFECTS
  1981.   nCHEMO_MODE                                              D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_CHEMO_MODES
  1982.   nCHEMO_OUT                                               D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_CHEMO_OUT
  1983.   nDISCOVER_PATH                                           D_PKG_STD.tREF;     -- идентификатор записи D_NR_CLS_PATH_DISCOVER
  1984.   dAGENT_BIRTHDATE                                         D_AGENTS.BIRTHDATE%TYPE;
  1985.                                                                                -- дата рождения пациента
  1986.  
  1987.  
  1988. BEGIN
  1989.  
  1990.   D_PKG_IMP_LOG.INIT('IMP70_UMEKONVE', pnLPU, pnLOG_IDENT, 0);
  1991.   lg(pnLOG_IDENT,'START_IMP','Начало импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
  1992.  
  1993.  
  1994.   --блок получения версий для разделов
  1995.   nVER_AGENT_ADDRS          := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_ADDRS');
  1996.   nVER_GEOGRAFY             := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GEOGRAFY');
  1997.   nVER_NOS_REGISTR_TYPES    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTR_TYPES');
  1998.   nVER_NOS_REGISTRS         := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTRS');
  1999.   nVER_NR_CLS_CONTINGENTS   := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_CLS_CONTINGENTS');
  2000.   nVER_NR_PATIENT_DATA      := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENT_DATA');
  2001.   nVER_MKB10                := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'MKB10');
  2002.   nVER_DIRECTORIES_DATA_VER := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DIRECTORIES_DATA_VER');
  2003.   nVER_SOCIALSTATES         := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'SOCIALSTATES');
  2004.   nVER_NR_PATIENTS          := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENTS');
  2005.   nVER_RTUB_CASES           := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASES');
  2006.   nVER_DTUB_PAT_GROUP       := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_PAT_GROUP');
  2007.   nVER_PATIENTS_DGROUP      := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'PATIENTS_DGROUP');
  2008.   nVER_RTUB_CASE_DGNS       := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DGNS');
  2009.   nVER_DTUB_CLINIC_FORMS    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CLINIC_FORMS');
  2010.   nVER_DTUB_DETECT_METHODS  := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_DETECT_METHODS');
  2011.   nVER_RTUB_CASE_DISP       := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP');
  2012.   nVER_RTUB_CASE_DISP_DATA  := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP_DATA');
  2013.   nVER_AGENT_COMP_DISEASES  := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_COMP_DISEASES');
  2014.   nVER_COMP_DISEASES        := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'COMP_DISEASES');
  2015.   nVER_REGISTER_PURPOSES    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'REGISTER_PURPOSES');
  2016.   nVER_LPUDICT              := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'LPUDICT');
  2017.   nVER_SITES                := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'SITES');
  2018.   nVER_AGENT_GR_RENTGENOGR  := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_GR_RENTGENOGR');
  2019.   nVER_GR_RENTGENOGRAPH     := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GR_RENTGENOGRAPH');
  2020.   nVER_AGENT_DETR_EFFECTS   := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_DETR_EFFECTS');
  2021.   nVER_DETRIMENTAL_EFFECTS  := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DETRIMENTAL_EFFECTS');
  2022.   nVER_RTUB_CASE_CHEMO      := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_CHEMO');
  2023.   nVER_DTUB_CHEMO_MODES     := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CHEMO_MODES');
  2024.   nVER_DTUB_CHEMO_OUT       := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CHEMO_OUT');
  2025.   nVER_RTUB_CASE_DETECTION  := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DETECTION');
  2026.   nVER_NR_CLS_PATH_DISCOVER := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_CLS_PATH_DISCOVER');
  2027.   nVER_NR_LPUDICT           := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_LPUDICT');
  2028.  
  2029.  
  2030.   --блок получения каталогов для разделов
  2031.   D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'AGENTS', 'Пациенты Томск Фтиз', nCAT_AGENTS);
  2032.   IF nCAT_AGENTS IS NULL THEN
  2033.     D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'AGENTS',nCAT_ROOT);
  2034.     D_PKG_CATALOGS.ADD(nCAT_AGENTS,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
  2035.   END IF;
  2036.  
  2037.   D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'PERSMEDCARD', 'Пациенты Томск Фтиз', nCAT_PERSMEDCARD);
  2038.   IF nCAT_PERSMEDCARD IS NULL THEN
  2039.     D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'PERSMEDCARD',nCAT_ROOT);
  2040.     D_PKG_CATALOGS.ADD(nCAT_PERSMEDCARD,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
  2041.   END IF;
  2042.  
  2043.  
  2044.  
  2045.   --по заданному ЛПУ получим LPUDICT
  2046.   BEGIN
  2047.     SELECT l.LPUDICT
  2048.       INTO nLPUDICT_ID
  2049.       FROM D_LPU l
  2050.      WHERE l.id = pnLPU
  2051.        AND ROWNUM = 1;
  2052.   EXCEPTION
  2053.     WHEN NO_DATA_FOUND THEN
  2054.       nERROR := nERROR + 1;
  2055.       lg(pnLOG_IDENT,'NFD_LPUDICT','Не определно заданное ЛПУ: '||pnLPU);
  2056.   END;
  2057.  
  2058.  
  2059.  
  2060.   --Цикл по всем записям таблицы IMP70_UMEKONVE с импортируемыми данными
  2061.   IF nERROR = 0 OR pnERR_IGNORE = 1 THEN
  2062.     FOR cr IN (SELECT *
  2063.                  FROM IMP70_UMEKONVE)
  2064.     LOOP
  2065.       nAGENTS_ID                := NULL;
  2066.       nAGENT_ADDRS_ID           := NULL;
  2067.       nNR_PATIENT_DATA_ID       := NULL;
  2068.       nAGENT_SOCIAL_STATES_ID   := NULL;
  2069.       nRTUB_CASES_ID            := NULL;
  2070.       nRTUB_CASE_DGNS_ID        := NULL;
  2071.       nRTUB_CASE_DISP_ID        := NULL;
  2072.       nRTUB_CASE_DISP_DATA_ID   := NULL;
  2073.       nAGENT_COMP_DISEASES_ID   := NULL;
  2074.       nAGENT_REGISTRATION_ID    := NULL;
  2075.       nAGENT_GR_RENTGENOGR_ID   := NULL;
  2076.       nAGENT_DETR_EFFECTS_ID    := NULL;
  2077.       nPERSMEDCARD_ID           := NULL;
  2078.       nRTUB_CASE_CHEMO_ID       := NULL;
  2079.       nRTUB_CASE_DETECTION_ID   := NULL;
  2080.       nNR_PATIENT_ID            := NULL;
  2081.  
  2082.  
  2083.       sAGN_CODE                 := NULL;
  2084.       nCITY                     := NULL;
  2085.       nSTREET                   := NULL;
  2086.       sHOUSE                    := NULL;
  2087.       sHOUSELIT                 := NULL;
  2088.       nRAION                    := NULL;
  2089.       nRAION_CODE               := NULL;
  2090.       nNOS_REGISTR_ID           := NULL;
  2091.       nNR_CONTINGENT            := NULL;
  2092.       nDEATH_CAUSE              := NULL;
  2093.       nDEATH_PLACE              := NULL;
  2094.       nSOCIAL_STATES_ID         := NULL;
  2095.       nSOCIAL_CATEGORIES        := NULL;
  2096.       nPAT_GROUP                := NULL;
  2097.       nFROM_GROUP               := NULL;
  2098.       nMKB                      := NULL;
  2099.       nCLINIC_FORM              := NULL;
  2100.       nDETECT_METHOD            := NULL;
  2101.       nDGROUP                   := NULL;
  2102.       nCOMP_DISEASE             := NULL;
  2103.       nREGISTER_PURPOSE         := NULL;
  2104.       nLPU_REG                  := NULL;
  2105.       nLPU_SITE                 := NULL;
  2106.       nGR_RENTGENOGRAPH         := NULL;
  2107.       nDETR_EFFECT              := NULL;
  2108.       nCHEMO_MODE               := NULL;
  2109.       nCHEMO_OUT                := NULL;
  2110.       nDISCOVER_PATH            := NULL;
  2111.       dAGENT_BIRTHDATE          := NULL;
  2112.  
  2113.  
  2114.  
  2115.       --проверим нет ли в таблице D_AGENTS такого контрагента
  2116.       GET_AGENT_ID(psFIO        => cr.FIO,
  2117.                    pdBIRTHDATE  => cr.DATRO,
  2118.                    psSNILS      => NULL,
  2119.                    pnAGENTS_ID  => nAGENTS_ID,
  2120.                    psERROR_CODE => sERROR_CODE);
  2121.  
  2122.       IF nAGENTS_ID IS NOT NULL THEN
  2123.         dAGENT_BIRTHDATE := cr.DATRO;
  2124.       ELSE
  2125.         dAGENT_BIRTHDATE := NULL;
  2126.        
  2127.         IF sERROR_CODE = 'TMR_AGENTS' THEN
  2128.           lg(pnLOG_IDENT,'TMR_AGENTS','Найдено несколько пациентов: ФИО - '||cr.FIO||', Дата рожд.- '||TO_CHAR(cr.DATRO,'dd.mm.yyyy'));
  2129.           continue;
  2130.         END IF;
  2131.       END IF;
  2132.  
  2133.  
  2134.      
  2135.  
  2136.       --если контрагента не найден, то создадим его
  2137.       IF nAGENTS_ID IS NULL THEN
  2138.         ----------------------------------------
  2139.         --1. блок обработки данных в разделе AGENTS
  2140.         ----------------------------------------
  2141.         sAGN_CODE        := D_PKG_AGENTS.GEN_CODE(pnLPU);
  2142.         dAGENT_BIRTHDATE := cr.DATRO;
  2143.    
  2144.         BEGIN
  2145.           D_PKG_AGENTS.ADD(pnD_INSERT_ID         => nAGENTS_ID,
  2146.                            pnLPU                 => pnLPU,
  2147.                            pnCID                 => nCAT_AGENTS,
  2148.                            psAGN_CODE            => sAGN_CODE,
  2149.                            psAGN_NAME            => sAGN_CODE||' '||cr.FIO,
  2150.                            pnAGN_TYPE            => 1,
  2151.                            pnAGN_INN             => NULL,
  2152.                            pnAGN_KPP             => NULL,
  2153.                            psNOTE                => NULL,
  2154.                            psFIRSTNAME           => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'FIRSTNAME'),
  2155.                            psSURNAME             => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'SURNAME'),
  2156.                            psLASTNAME            => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'LASTNAME'),
  2157.                            pdBIRTHDATE           => cr.DATRO,
  2158.                            pnSEX                 => IMP70_PKG_KONVE.CONVERT_POL_TO_NUMBER(cr.POL),
  2159.                            pnEDUCATION           => NULL,
  2160.                            pnOKVED               => NULL,
  2161.                            pnIS_EMPLOYER         => 0,
  2162.                            psSNILS               => NULL,
  2163.                            psAGN_OGRN            => NULL,
  2164.                            psAGN_OKPO            => NULL,
  2165.                            pdDEATHDATE           => cr.DATSME,
  2166.                            pnIS_UNKNOWN          => NULL,
  2167.                            pnDEATHDOCTYPE        => NULL,
  2168.                            pdDEATHDOCDATE        => cr.DATOTCH,
  2169.                            psDEATHDOCNUM         => cr.NOMSVID,
  2170.                            pnAGN_OKFS            => NULL,
  2171.                            psENP                 => NULL,
  2172.                            psBIRTHPLACE          => NULL,
  2173.                            pnDECLINE_FIO         => NULL,
  2174.                            pnNATION              => NULL,
  2175.                            pnIS_HOME             => 0,
  2176.                            pnGEST_AGE_MOTHER     => NULL,
  2177.                            pnIS_ANONYM           => 0,
  2178.                            psDEATHPLACE          => NULL,
  2179.                            pnFULL_CLASSES        => NULL,
  2180.                            pnACCURACY_DATE_DEATH => NULL,
  2181.                            pnACCURACY_DATE_BIRTH => NULL,
  2182.                            pnIND_ENTERP          => NULL,
  2183.                            psAGN_OGRN_IND        => NULL,
  2184.                            pnCONVICT_AMOUNT      => NULL);
  2185.         EXCEPTION
  2186.           WHEN OTHERS THEN
  2187.             lg(pnLOG_IDENT,'ADD_AGENTS','Ошибка добавления пациента: '||cr.FIO, SQLERRM);
  2188.         END;
  2189.       END IF;
  2190.  
  2191.  
  2192.       --если контрагент создан успешно или найден в системе, то загрузим остальные данные при их отсутствии
  2193.       IF nAGENTS_ID IS NOT NULL THEN
  2194.         ----------------------------------------
  2195.         --2.1 блок обработки данных в разделе AGENT_ADDRS
  2196.         ----------------------------------------
  2197.         BEGIN
  2198.           SELECT aa.ID
  2199.             INTO nAGENT_ADDRS_ID
  2200.             FROM D_AGENT_ADDRS aa
  2201.            WHERE aa.PID = nAGENTS_ID
  2202.              AND aa.VERSION = nVER_AGENT_ADDRS
  2203.              AND ROWNUM = 1;
  2204.         EXCEPTION
  2205.           WHEN NO_DATA_FOUND THEN
  2206.  
  2207.             --получим населенный пункт
  2208.             IMP70_PKG_KONVE.GET_GEOTYPE_CODE_NASP(pnLPU,cr.NASP,nCITY,sERROR_CODE);
  2209.  
  2210.             IF nCITY IS NULL THEN
  2211.               IF sERROR_CODE = 'TMR_GEOGRAFY' THEN
  2212.                 lg(pnLOG_IDENT,'TMR_GEOGRAFY','Найдено несколько населенных пунктов: '||cr.NASP||'(пациент - '||cr.FIO||')');
  2213.               ELSIF sERROR_CODE = 'NDF_GEOGRAFY' THEN
  2214.                 lg(pnLOG_IDENT,'','Не определен населенный пункт: '||cr.NASP||'(пациент - '||cr.FIO||')');
  2215.               END IF;
  2216.             END IF;
  2217.  
  2218.  
  2219.              
  2220.             --Получение района
  2221.             IF cr.RAI IS NOT NULL THEN
  2222.               nRAION_CODE := GET_RAIONCODE_BY_KODRAI(cr.RAI);
  2223.              
  2224.               BEGIN
  2225.                 SELECT r.ID
  2226.                   INTO nRAION
  2227.                   FROM D_RAIONS r
  2228.                  WHERE LOWER(r.R_CODE) = LOWER(nRAION_CODE)
  2229.                    AND ROWNUM = 1;
  2230.               EXCEPTION
  2231.                 WHEN NO_DATA_FOUND THEN
  2232.                   nRAION := NULL;
  2233.                   lg(pnLOG_IDENT,'NDF_RAIONS','Не определён район: '||cr.RAI||'(пациент - '||cr.FIO||')');
  2234.               END;
  2235.             END IF;
  2236.              
  2237.             --получим улицу (текст до первого символа '-' без последних цифр)
  2238.             IF UPPER(cr.ADR) = 'БОМЖ' THEN
  2239.               nSTREET := NULL;
  2240.             ELSE
  2241.               BEGIN
  2242.                 SELECT g.ID
  2243.                   INTO nSTREET
  2244.                   FROM D_GEOGRAFY g
  2245.                        join D_GEOGRAFYTYPES gt
  2246.                          ON gt.ID = g.GEOLOCTYPE
  2247.                         AND gt.AO_TYPE IN (nAO_TYPE_NASP,nAO_TYPE_STREET)
  2248.                  WHERE g.version = nVER_GEOGRAFY
  2249.                    AND UPPER(g.GEONAME) = UPPER(IMP70_PKG_KONVE.GET_STREET_FROM_ADRESS(cr.ADR))
  2250.                    AND g.PID = nCITY
  2251.                    AND ROWNUM = 1;
  2252.               EXCEPTION
  2253.                 WHEN NO_DATA_FOUND THEN
  2254.                   nSTREET := NULL;
  2255.                   lg(pnLOG_IDENT,'NDF_GEOGRAFY','Не определена улица в адресе '||cr.ADR||' для нас пункта '||cr.NASP||' (пациент - '||cr.FIO||')');
  2256.               END;
  2257.             END IF;
  2258.                
  2259.             --получим номер дома из адреса (символы между первым символом '-' и предыдущим пробелом)
  2260.             sHOUSE := IMP70_PKG_KONVE.GET_HOUSE_FROM_ADRESS(cr.ADR);
  2261.  
  2262.             --получим литеру дома, если она есть
  2263.             sHOUSELIT := IMP70_PKG_KONVE.GET_LETTER_FROM_HOUSE(sHOUSE);
  2264.             IF sHOUSELIT IS NOT NULL THEN
  2265.               sHOUSE := REPLACE(sHOUSE,sHOUSELIT,'');
  2266.             END IF;
  2267.              
  2268.             --получим квартиру (цифры после первого символа '-')
  2269.             sFLAT := IMP70_PKG_KONVE.GET_FLAT_FROM_ADRESS(cr.ADR);
  2270.              
  2271.            
  2272.              
  2273.             --непосредственно добавление записи в D_AGENT_ADDRS
  2274.             BEGIN
  2275.               D_PKG_AGENT_ADDRS.ADD(pnD_INSERT_ID  => nAGENT_ADDRS_ID,
  2276.                                     pnLPU          => pnLPU,
  2277.                                     pnPID          => nAGENTS_ID,
  2278.                                     pnSTREET       => nSTREET,
  2279.                                     psHOUSE        => sHOUSE,
  2280.                                     psHOUSELIT     => sHOUSELIT,
  2281.                                     pnBLOCK        => NULL,
  2282.                                     pnFLAT         => sFLAT,
  2283.                                     psFLATLIT      => NULL,
  2284.                                     psADDR_INDEX   => NULL,
  2285.                                     pnIS_MAIN      => (CASE WHEN LOWER(cr.PROJIV)='пост.жит.' THEN 1 ELSE 0 END),
  2286.                                     pnIS_REAL      => (CASE WHEN LOWER(cr.PROJIV) IN ('пост.жит.','жит.др.тер','ин.гражд.') THEN 1 WHEN UPPER(cr.PROJIV)='БОМЖ' THEN 0  ELSE 0 END),
  2287.                                     pnIS_REG       => 1,
  2288.                                     pnIS_TEMPREG   => (CASE WHEN LOWER(cr.PROJIV) IN ('жит.др.тер','ин.гражд.') THEN 1 WHEN UPPER(cr.PROJIV)='БОМЖ' THEN 0  ELSE 0 END),
  2289.                                     pnIS_JUR       => 0,
  2290.                                     pnIS_POST      => 0,
  2291.                                     pnIS_BIRTH     => 0,
  2292.                                     pnRAION        => nRAION,
  2293.                                     pdBEGIN_DATE   => cr.DATUCH,
  2294.                                     pdEND_DATE     => NULL,
  2295.                                     psMANUAL_INPUT => NULL,
  2296.                                     pnIS_CITIZEN   => (CASE WHEN cr.GIT = 'гор' THEN 1 WHEN cr.GIT = 'сел' THEN 0 ELSE NULL END),
  2297.                                     psFLAT         => sFLAT,
  2298.                                     psADDROBJ      => NULL,
  2299.                                     psFIAS_HOUSE   => NULL);
  2300.             EXCEPTION
  2301.               WHEN OTHERS THEN
  2302.                 lg(pnLOG_IDENT,'ADD_AGENTS_ADDRS','Ошибка добавления адреса пациента: '||cr.FIO, SQLERRM);
  2303.             END;
  2304.  
  2305.         END;
  2306.  
  2307.  
  2308.  
  2309.         ----------------------------------------
  2310.         --2.2 блок обработки данных в разделе NR_PATIENT_DATA
  2311.         ----------------------------------------
  2312.          
  2313.         --получим родительскую запись для D_NR_PATIENT_DATA
  2314.         WITH N_REGISTR_TYPES AS (SELECT rt.ID
  2315.                                    FROM D_NOS_REGISTR_TYPES rt
  2316.                                   WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  2317.                                     AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  2318.                                     AND ROWNUM = 1),
  2319.              NR_CLS_CONT_CODES AS (SELECT (CASE WHEN LOWER(cr.COCKAT) = 'пост.жит.'   THEN 1
  2320.                                                 WHEN LOWER(cr.COCKAT) = 'жит.др.тер.' THEN 2
  2321.                                                 WHEN LOWER(cr.COCKAT) = 'мигрант'     THEN 3
  2322.                                                 WHEN LOWER(cr.MIGR)   = 'да'          THEN 3
  2323.                                                 WHEN LOWER(cr.COCKAT) = 'ин.гражд.'   THEN 8
  2324.                                                 WHEN LOWER(cr.COCKAT) = 'бомж'        THEN 6
  2325.                                                 WHEN LOWER(cr.BOMJ)   = 'да'          THEN 6
  2326.                                                 WHEN UPPER(cr.COCKAT) = 'ИЗ МЗ'       THEN 4
  2327.                                                 WHEN LOWER(cr.IZUIN)  = 'да'          THEN 4
  2328.                                                 WHEN UPPER(cr.COCKAT) = 'ИЗ СИЗО'     THEN 5
  2329.                                                 WHEN UPPER(cr.COCKAT) = 'ПЕРЕВЕДЕН'   THEN 12
  2330.                                                 WHEN UPPER(cr.COCKAT) = 'ИЗ ОПБ'      THEN 13
  2331.                                                 WHEN UPPER(cr.COCKAT) = 'ИЗ МЗ(АКТ)'  THEN 14
  2332.                                                 WHEN LOWER(cr.PROJIV) = 'пост.жит.'   THEN 1
  2333.                                                 WHEN LOWER(cr.PROJIV) = 'жит.др.тер.' THEN 2
  2334.                                                 WHEN LOWER(cr.PROJIV) = 'иммигрант'   THEN 3
  2335.                                                 WHEN LOWER(cr.PROJIV) = 'ин.гражд.'   THEN 8
  2336.                                                 WHEN LOWER(cr.PROJIV) = 'из соцзащ.'  THEN 9
  2337.                                                 WHEN LOWER(cr.PENS)   = 'да'          THEN 10
  2338.                                                 ELSE NULL
  2339.                                            END) c_code
  2340.                                      FROM dual),
  2341.              DIR_DATA_VER_CODES AS (SELECT (CASE WHEN UPPER(cr.MESSME) IN ('ТО','МТО1','МТО2','ОАИР','Д/Д','ХО','ДНСТ','СТДО','ТПБ') THEN 'в стационаре'
  2342.                                                  WHEN UPPER(cr.MESSME) IN ('СЕТД','ОЛС','УИН','СИЗО') THEN 'в другом месте'
  2343.                                                  WHEN UPPER(cr.MESSME) IN ('ДОМА') THEN 'дома'
  2344.                                                  WHEN UPPER(cr.MESSME) IN ('ДР-Е') THEN 'неизвестно'
  2345.                                                  ELSE NULL
  2346.                                              END) dd_name
  2347.                                       FROM dual)
  2348.          
  2349.         SELECT (SELECT r.ID
  2350.                   FROM D_NOS_REGISTRS r
  2351.                  WHERE r.VERSION  = nVER_NOS_REGISTRS
  2352.                    AND r.REG_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  2353.                    AND EXISTS(SELECT 1
  2354.                                 FROM D_NR_LPUDICT nld
  2355.                                WHERE nld.VERSION = nVER_NR_LPUDICT
  2356.                                  AND nld.PID     = r.ID
  2357.                                  AND nld.lpudict = nLPUDICT_ID)
  2358.                    AND ROWNUM = 1),
  2359.                  
  2360.                (SELECT ncc.ID
  2361.                   FROM D_NR_CLS_CONTINGENTS ncc
  2362.                  WHERE ncc.VERSION = nVER_NR_CLS_CONTINGENTS
  2363.                    AND TRUNC(SYSDATE) BETWEEN ncc.DATE_BEGIN AND COALESCE(ncc.DATE_END,TRUNC(SYSDATE))
  2364.                    AND ncc.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  2365.                    AND ncc.C_CODE  = (SELECT C_CODE FROM NR_CLS_CONT_CODES)
  2366.                    AND ROWNUM = 1),
  2367.                
  2368.                (SELECT mkb.ID
  2369.                   FROM D_MKB10 mkb
  2370.                  WHERE mkb.VERSION = nVER_MKB10
  2371.                    AND UPPER(mkb.mkb_code) = UPPER(cr.KODIAGPA)
  2372.                    AND ROWNUM = 1),
  2373.                
  2374.                (SELECT ddv.ID
  2375.                   FROM D_DIRECTORIES_DATA_VER ddv
  2376.                  WHERE ddv.VERSION = nVER_DIRECTORIES_DATA_VER
  2377.                    AND LOWER(ddv.DD_CODE) = (SELECT LOWER(DD_CODE) FROM DIR_DATA_VER_CODES)
  2378.                    AND ROWNUM = 1)
  2379.          
  2380.           INTO nNOS_REGISTR_ID,
  2381.                nNR_CONTINGENT,
  2382.                nDEATH_CAUSE,
  2383.                nDEATH_PLACE
  2384.           FROM dual;
  2385.              
  2386.         IF nNOS_REGISTR_ID IS NULL THEN
  2387.            lg(pnLOG_IDENT,'NDF_NOS_REGISTRS','Не определен нозологический реестр для данного ЛПУ');
  2388.         ELSE
  2389.           BEGIN
  2390.             SELECT npd.ID
  2391.               INTO nNR_PATIENT_DATA_ID
  2392.               FROM D_NR_PATIENT_DATA npd
  2393.              WHERE npd.AGENT = nAGENTS_ID
  2394.                AND npd.VERSION = nVER_NR_PATIENT_DATA
  2395.                AND npd.PID = nNOS_REGISTR_ID
  2396.                AND ROWNUM = 1;
  2397.           EXCEPTION
  2398.             WHEN NO_DATA_FOUND THEN
  2399.               BEGIN
  2400.                 D_PKG_NR_PATIENT_DATA.ADD(pnD_INSERT_ID    => nNR_PATIENT_DATA_ID,
  2401.                                           pnLPU            => pnLPU,
  2402.                                           pnPID            => nNOS_REGISTR_ID,
  2403.                                           pnAGENT          => nAGENTS_ID,
  2404.                                           pnNR_CONTINGENT  => nNR_CONTINGENT,
  2405.                                           pnIS_CITIZEN     => (CASE WHEN LOWER(cr.GIT) = 'гор' THEN 1 ELSE 0 END),
  2406.                                           pnPROFESSION     => NULL,
  2407.                                           pnON_NARC_DISP   => NULL,
  2408.                                           pnDEATH_PLACE    => nDEATH_PLACE,
  2409.                                           pnDEATH_CAUSE    => nDEATH_CAUSE,
  2410.                                           pnIS_AFTEREFFECT => (CASE WHEN UPPER(cr.PRISME) = 'ТВС' THEN 1 ELSE 0 END),
  2411.                                           pnHIV            => (CASE WHEN cr.HIV IS NOT NULL THEN 1 ELSE 0 END),
  2412.                                           pnAUTOPSY        => (CASE WHEN UPPER(cr.VSKR) = 'ТВС' THEN 1 ELSE 0 END),
  2413.                                           pnDEATH_ORG      => NULL);
  2414.               EXCEPTION
  2415.                 WHEN OTHERS THEN
  2416.                   lg(pnLOG_IDENT,'ADD_NR_PATIENT_DATA','Ошибка добавления данных о пациенте в ноз. риеестре: '||cr.FIO, SQLERRM);
  2417.               END;
  2418.           END;
  2419.         END IF;        
  2420.  
  2421.         ----------------------------------------
  2422.         --2.3 блок обработки данных в разделе AGENT_SOCIAL_STATES
  2423.         ----------------------------------------
  2424.         nAGENT_SOCIAL_STATES_ID := D_PKG_AGENT_SOCIAL_STATES.GET_ACTUAL_ON_DATE(pnAGENT => nAGENTS_ID,
  2425.                                                                                 pdDATE  => COALESCE(cr.DATUCH,SYSDATE),
  2426.                                                                                 psFIELD => 'ID');
  2427.         IF nAGENT_SOCIAL_STATES_ID IS NULL THEN
  2428.           --определим социальное положение по данным из файла
  2429.           IF cr.SOCKAT IS NOT NULL THEN
  2430.             SELECT (SELECT ss.ID
  2431.                       FROM D_SOCIALSTATES ss
  2432.                      WHERE ss.VERSION = nVER_SOCIALSTATES
  2433.                        AND TRUNC(SYSDATE) BETWEEN ss.BEGIN_DATE AND COALESCE(ss.END_DATE,TRUNC(SYSDATE))
  2434.                        AND ss.SOC_CODE = (SELECT vss.MIS_CODE
  2435.                                             FROM IMP70_V_KONVE_SOCSTATES_SOCKAT vss
  2436.                                            WHERE vss.FILE_CODE = cr.SOCKAT)
  2437.                        AND ROWNUM = 1)
  2438.               INTO nSOCIAL_STATES_ID
  2439.               FROM dual;
  2440.  
  2441.               IF nSOCIAL_STATES_ID IS NULL THEN
  2442.                 lg(pnLOG_IDENT,'NDF_SOCIALSTATES','Не определено социальное положение: '||cr.SOCKAT||' (пациент - '||cr.FIO||')');
  2443.               END IF;
  2444.           END IF;
  2445.  
  2446.            
  2447.           IF LOWER(cr.NERAB) = 'да' THEN
  2448.  
  2449.             SELECT (SELECT sc.SC_CODE
  2450.                       FROM D_SOCIALCATEGORIES sc
  2451.                      WHERE sc.SC_CODE = 1
  2452.                        AND ROWNUM = 1)
  2453.               INTO nSOCIAL_CATEGORIES
  2454.               FROM dual;
  2455.           END IF;
  2456.            
  2457.            
  2458.           BEGIN
  2459.             D_PKG_AGENT_SOCIAL_STATES.ADD(pnD_INSERT_ID     => nAGENT_SOCIAL_STATES_ID,
  2460.                                           pnLPU             => pnLPU,
  2461.                                           pnPID             => nAGENTS_ID,
  2462.                                           pnSOCIAL_STATE    => nSOCIAL_STATES_ID,
  2463.                                           pnSOCIAL_CATEGORY => nSOCIAL_CATEGORIES,
  2464.                                           pdBEGIN_DATE      => cr.DATUCH,
  2465.                                           pdEND_DATE        => NULL);
  2466.           EXCEPTION
  2467.             WHEN OTHERS THEN
  2468.               lg(pnLOG_IDENT,'ADD_AGENT_SOCIAL_STATES','Ошибка добавления социального пложения пациента: '||cr.FIO, SQLERRM);
  2469.           END;
  2470.         END IF;
  2471.  
  2472.  
  2473.         ----------------------------------------
  2474.         --2.18 блок обработки данных в разделе NR_PATIENTS
  2475.         ----------------------------------------
  2476.         BEGIN
  2477.           SELECT p.ID
  2478.             INTO nNR_PATIENT_ID
  2479.             FROM D_NR_PATIENTS p
  2480.            WHERE p.AGENT = nAGENTS_ID
  2481.              AND p.VERSION = nVER_NR_PATIENTS
  2482.              AND p.NOS_REGISTR = nNOS_REGISTR_ID
  2483.              AND p.REGISTR_LPU = nLPUDICT_ID
  2484.              AND ROWNUM = 1;
  2485.         EXCEPTION
  2486.           WHEN NO_DATA_FOUND THEN
  2487.             BEGIN
  2488.               D_PKG_NR_PATIENTS.ADD(pnD_INSERT_ID      => nNR_PATIENT_ID,
  2489.                                     pnLPU              => pnLPU,
  2490.                                     pnAGENT            => nAGENTS_ID,
  2491.                                     pnNOS_REGISTR      => nNOS_REGISTR_ID,
  2492.                                     pnREGISTR_LPU      => nLPUDICT_ID,
  2493.                                     psREGISTR_LPU_TEXT => NULL,
  2494.                                     pdREGISTR_DATE     => cr.DATUCH,
  2495.                                     pnMKB              => NULL,
  2496.                                     pnNUMB_REG         => NULL,
  2497.                                     pdUPDATE_DATE      => TRUNC(SYSDATE),
  2498.                                     pnFR               => 0,
  2499.                                     psNUMB_REG_GD      => NULL,
  2500.                                     pdREMOVE_DATE      => NULL,
  2501.                                     pnREMOVE_REASON    => NULL,
  2502.                                     pnREMOVE_LPU       => NULL);
  2503.             EXCEPTION
  2504.               WHEN OTHERS THEN
  2505.                 lg(pnLOG_IDENT,'ADD_NR_PATIENTS','Ошибка добавления в ноз. реестр пациента: '||cr.FIO, SQLERRM);
  2506.             END;
  2507.         END;
  2508.  
  2509.  
  2510.         ----------------------------------------
  2511.         --2.4 блок обработки данных в разделе RTUB_CASES
  2512.         ----------------------------------------
  2513.         BEGIN
  2514.           SELECT rc.ID
  2515.             INTO nRTUB_CASES_ID
  2516.             FROM D_RTUB_CASES rc
  2517.            WHERE rc.AGENT = nAGENTS_ID
  2518.              AND rc.VERSION = nVER_RTUB_CASES
  2519.              AND (rc.NR_PATIENT = nNR_PATIENT_ID
  2520.                   OR
  2521.                   rc.NR_PATIENT IS NULL)
  2522.              AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN rc.CREATE_DATE AND COALESCE(rc.CLOSE_DATE,TRUNC(SYSDATE))
  2523.              AND ROWNUM = 1;
  2524.         EXCEPTION
  2525.           WHEN NO_DATA_FOUND THEN
  2526.             --получение данных для вставки в таблицу D_RTUB_CASES
  2527.             WITH N_REGISTR_TYPES AS (SELECT rt.ID
  2528.                                        FROM D_NOS_REGISTR_TYPES rt
  2529.                                       WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  2530.                                         AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  2531.                                         AND ROWNUM = 1),
  2532.                 PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.DATUCH,dAGENT_BIRTHDATE) >= 18 THEN 1
  2533.                                                 ELSE 2
  2534.                                             END) age
  2535.                                      FROM dual)
  2536.              
  2537.             SELECT (SELECT dpg.ID
  2538.                       FROM D_DTUB_PAT_GROUP dpg
  2539.                      WHERE dpg.VERSION = nVER_DTUB_PAT_GROUP
  2540.                        AND dpg.PG_CODE = (SELECT vdpg.MIS_CODE
  2541.                                             FROM IMP70_V_KONVE_DTUB_PAT_GROUP vdpg
  2542.                                            WHERE UPPER(vdpg.FILE_CODE) = UPPER(cr.TIPPAC)
  2543.                                              AND ROWNUM = 1)
  2544.                        AND ROWNUM = 1),
  2545.  
  2546.                    (SELECT pdg.ID
  2547.                       FROM D_PATIENTS_DGROUP pdg
  2548.                      WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
  2549.                        AND pdg.HG_CODE = (SELECT vpg.MIS_CODE
  2550.                                             FROM IMP70_V_KONVE_PAT_DGROUP vpg
  2551.                                            WHERE UPPER(vpg.FILE_CODE) = UPPER(cr.GRU)
  2552.                                              AND ROWNUM = 1)
  2553.                        AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  2554.                        AND pdg.AGE     = (SELECT AGE FROM PAT_DGROUP_AGE)
  2555.                        AND ROWNUM = 1)
  2556.  
  2557.               INTO nPAT_GROUP,
  2558.                    nFROM_GROUP
  2559.               FROM dual;
  2560.  
  2561.  
  2562.             BEGIN
  2563.               D_PKG_RTUB_CASES.ADD(pnD_INSERT_ID      => nRTUB_CASES_ID,
  2564.                                    pnLPU              => pnLPU,
  2565.                                    pnAGENT            => nAGENTS_ID,
  2566.                                    pnNR_PATIENT       => nNR_PATIENT_ID,
  2567.                                    pnPAT_GROUP        => nPAT_GROUP,
  2568.                                    pnFROM_DGROUP      => nFROM_GROUP,
  2569.                                    pnLPU_CREATE       => nLPUDICT_ID,
  2570.                                    pdCREATE_DATE      => cr.DATUCH,
  2571.                                    pdLAST_CHANGE_DATE => cr.DATKOR,
  2572.                                    pnLAST_CHANGE_EMP  => NULL,
  2573.                                    pdCLOSE_DATE       => NULL,
  2574.                                    pnCLOSE_EMP        => NULL,
  2575.                                    psCLOSE_REASON     => NULL,
  2576.                                    pnLPU_IN_CHARGE    => NULL);
  2577.             EXCEPTION
  2578.               WHEN OTHERS THEN
  2579.                 lg(pnLOG_IDENT,'ADD_RTUB_CASES','Ошибка добавления случая туберкулеза для пациента: '||cr.FIO, SQLERRM);
  2580.             END;
  2581.         END;
  2582.  
  2583.  
  2584.         ----------------------------------------
  2585.         --2.5 блок обработки данных в разделе RTUB_CASE_DGNS
  2586.         ----------------------------------------
  2587.         IF nRTUB_CASES_ID IS NOT NULL THEN  
  2588.           BEGIN
  2589.             SELECT rcd.ID
  2590.               INTO nRTUB_CASE_DGNS_ID
  2591.               FROM D_RTUB_CASE_DGNS rcd
  2592.              WHERE rcd.PID = nRTUB_CASES_ID
  2593.                AND rcd.VERSION = nVER_RTUB_CASE_DGNS
  2594.                AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN rcd.DATE_BEGIN AND COALESCE(rcd.DATE_END,TRUNC(SYSDATE))
  2595.                AND ROWNUM = 1;
  2596.           EXCEPTION
  2597.             WHEN NO_DATA_FOUND THEN
  2598.               --получим данные для вставки в таблицу D_RTUB_CASE_DGNS
  2599.               SELECT (SELECT m.ID
  2600.                         FROM D_MKB10 m
  2601.                        WHERE m.MKB_CODE = 'A15.0'
  2602.                          AND m.VERSION  = nVER_MKB10
  2603.                          AND ROWNUM = 1),
  2604.                        
  2605.                      (SELECT dcf.ID
  2606.                         FROM D_DTUB_CLINIC_FORMS dcf
  2607.                        WHERE dcf.VERSION  = nVER_DTUB_CLINIC_FORMS
  2608.                          AND dcf.CLF_CODE = (SELECT vcf.MIS_CODE
  2609.                                                FROM IMP70_V_KONVE_CLINIC_FORMS vcf
  2610.                                               WHERE UPPER(vcf.FILE_CODE) = UPPER(cr.KODIAG)
  2611.                                                 AND ROWNUM = 1)
  2612.                          AND ROWNUM = 1),
  2613.                        
  2614.                      (SELECT ddm.ID
  2615.                         FROM D_DTUB_DETECT_METHODS ddm
  2616.                        WHERE ddm.VERSION = nVER_DTUB_DETECT_METHODS
  2617.                          AND UPPER(ddm.DM_CODE) = (SELECT UPPER(vdm.MIS_CODE)
  2618.                                                      FROM IMP70_V_KONVE_DETECT_METHODS vdm
  2619.                                                     WHERE UPPER(REPLACE(vdm.FILE_CODE,' ','')) = UPPER(REPLACE(cr.PROF,' ',''))
  2620.                                                       AND ROWNUM = 1)
  2621.                          AND ROWNUM = 1)
  2622.                            
  2623.                 INTO nMKB,
  2624.                      nCLINIC_FORM,
  2625.                      nDETECT_METHOD
  2626.                 FROM dual;
  2627.  
  2628.  
  2629.                
  2630.               IF cr.DATUCH IS NULL THEN
  2631.                 lg(pnLOG_IDENT,'ADD_RTUB_CASE_DGNS','Для пациента: '||cr.FIO||' не заполнено поле DATUCH. Создание диагноза невозможно.');
  2632.               ELSE
  2633.                 BEGIN
  2634.                   D_PKG_RTUB_CASE_DGNS.ADD(pnD_INSERT_ID         => nRTUB_CASE_DGNS_ID,
  2635.                                            pnLPU                 => pnLPU,
  2636.                                            pnPID                 => nRTUB_CASES_ID,
  2637.                                            pdDATE_BEGIN          => cr.DATUCH,
  2638.                                            pdDATE_END            => NULL,
  2639.                                            pnEMPLOYER            => NULL,
  2640.                                            psEMP_FIO             => NULL,
  2641.                                            pnMKB_LPU             => nLPUDICT_ID,
  2642.                                            psMKB_LPU_TEXT        => NULL,
  2643.                                            pnMKB                 => nMKB,
  2644.                                            pnMKB_TYPE            => NULL,
  2645.                                            psMKB_TEXT            => NULL,
  2646.                                            pdCONFIRM_DATE        => cr.DATUCH,
  2647.                                            pnFORM                => NULL,
  2648.                                            pnCLINIC_FORM         => nCLINIC_FORM,
  2649.                                            pnDESTRUCT            => NULL,
  2650.                                            pnCOMB_INJURY         => NULL,
  2651.                                            pnOPERATION           => NULL,
  2652.                                            pnCOMPLICATION        => NULL,
  2653.                                            pnDETECT_METHOD       => nDETECT_METHOD,
  2654.                                            psDETECT_METHOD_OTHER => NULL);
  2655.                 EXCEPTION
  2656.                   WHEN OTHERS THEN
  2657.                     lg(pnLOG_IDENT,'ADD_RTUB_CASE_DGNS','Ошибка добавления диагноза для пациента: '||cr.FIO, SQLERRM);
  2658.                 END;
  2659.               END IF;
  2660.           END;
  2661.         END IF;
  2662.  
  2663.  
  2664.         ----------------------------------------
  2665.         --2.6 блок обработки данных в разделе RTUB_CASE_DISP
  2666.         ----------------------------------------
  2667.         IF nRTUB_CASES_ID IS NOT NULL THEN  
  2668.           BEGIN
  2669.             SELECT rcd.ID
  2670.               INTO nRTUB_CASE_DISP_ID
  2671.               FROM D_RTUB_CASE_DISP rcd
  2672.              WHERE rcd.PID = nRTUB_CASES_ID
  2673.                AND rcd.VERSION = nVER_RTUB_CASE_DISP
  2674.                AND rcd.DISP_LPU = nLPUDICT_ID
  2675.                AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN rcd.DATE_IN AND COALESCE(rcd.DATE_OUT,TRUNC(SYSDATE))
  2676.                AND ROWNUM = 1;
  2677.           EXCEPTION
  2678.             WHEN NO_DATA_FOUND THEN
  2679.               BEGIN
  2680.                 D_PKG_RTUB_CASE_DISP.ADD(pnD_INSERT_ID       => nRTUB_CASE_DISP_ID,
  2681.                                          pnLPU               => pnLPU,
  2682.                                          pnPID               => nRTUB_CASES_ID,
  2683.                                          pnDISP_LPU          => nLPUDICT_ID,
  2684.                                          pnDISP_EMP          => NULL,
  2685.                                          pdDATE_IN           => cr.DATUCH,
  2686.                                          pdDATE_OUT          => NULL,
  2687.                                          pnOUT_REASON        => NULL,
  2688.                                          pnCONTROL_CARD      => NULL,
  2689.                                          pdRECOMEND_DATE_OUT => NULL,
  2690.                                          pnRECOMEND_OUT_REAS => NULL);
  2691.               EXCEPTION
  2692.                 WHEN OTHERS THEN
  2693.                   lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP','Ошибка добавления данных учета в ЛПУ случая туберкулеза для пациента: '||cr.FIO, SQLERRM);
  2694.               END;
  2695.           END;
  2696.         END IF;
  2697.  
  2698.  
  2699.         ----------------------------------------
  2700.         --2.7 блок обработки данных в разделе RTUB_CASE_DISP_DATA
  2701.         ----------------------------------------
  2702.         IF nRTUB_CASE_DISP_ID IS NOT NULL THEN
  2703.           IF cr.GRU IS NOT NULL THEN
  2704.             BEGIN
  2705.               SELECT rcdd.ID
  2706.                 INTO nRTUB_CASE_DISP_DATA_ID
  2707.                 FROM D_RTUB_CASE_DISP_DATA rcdd
  2708.                WHERE rcdd.PID = nRTUB_CASE_DISP_ID
  2709.                  AND rcdd.VERSION = nVER_RTUB_CASE_DISP_DATA
  2710.                  AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN rcdd.DATE_IN AND COALESCE(rcdd.DATE_OUT,TRUNC(SYSDATE))
  2711.                  AND ROWNUM = 1;
  2712.             EXCEPTION
  2713.               WHEN NO_DATA_FOUND THEN
  2714.                 --получение данных для вставки в таблицу D_RTUB_CASE_DISP_DATA
  2715.                 WITH N_REGISTR_TYPES AS (SELECT rt.ID
  2716.                                            FROM D_NOS_REGISTR_TYPES rt
  2717.                                           WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  2718.                                             AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  2719.                                             AND ROWNUM = 1),
  2720.                 PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.DATUCH,dAGENT_BIRTHDATE) >= 18 THEN 1
  2721.                                                 ELSE 2
  2722.                                             END) age
  2723.                                      FROM dual)
  2724.                  
  2725.                 SELECT (SELECT pdg.ID
  2726.                           FROM D_PATIENTS_DGROUP pdg
  2727.                          WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
  2728.                            AND UPPER(pdg.HG_CODE) = (SELECT UPPER(vpdg.MIS_CODE)
  2729.                                                        FROM IMP70_V_KONVE_PAT_DGROUP vpdg
  2730.                                                       WHERE vpdg.FILE_CODE = UPPER(cr.GRU)
  2731.                                                         AND ROWNUM = 1)
  2732.                            AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  2733.                            AND pdg.AGE     = (SELECT AGE FROM PAT_DGROUP_AGE)
  2734.                            AND ROWNUM = 1)
  2735.  
  2736.                   INTO nDGROUP
  2737.                   FROM dual;
  2738.  
  2739.                 IF nDGROUP IS NULL THEN
  2740.                   lg(pnLOG_IDENT,'NDF_RTUB_CASE_DISP_DATA','Не определена Группа Д-учета GRU='||cr.GRU||' для пациента: '||cr.FIO);
  2741.                 ELSE
  2742.                   BEGIN
  2743.                     D_PKG_RTUB_CASE_DISP_DATA.ADD(pnD_INSERT_ID     => nRTUB_CASE_DISP_DATA_ID,
  2744.                                                   pnLPU             => pnLPU,
  2745.                                                   pnPID             => nRTUB_CASE_DISP_ID,
  2746.                                                   pnDGROUP          => nDGROUP,
  2747.                                                   pdDATE_IN         => cr.DATUCH,
  2748.                                                   pdRECOM_DATE_OUT  => NULL,
  2749.                                                   pnRECOM_TO_DGROUP => NULL,
  2750.                                                   pdDATE_OUT        => NULL);
  2751.                   EXCEPTION
  2752.                     WHEN OTHERS THEN
  2753.                       lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP_DATA','Ошибка добавления Группы Д-учета для пациента : '||cr.FIO, SQLERRM);
  2754.                   END;
  2755.                 END IF;
  2756.             END;
  2757.           END IF;
  2758.         END IF;
  2759.  
  2760.  
  2761.         ----------------------------------------
  2762.         --2.8 блок обработки данных в разделе AGENT_COMP_DISEASES
  2763.         ----------------------------------------
  2764.         BEGIN
  2765.           SELECT acd.ID
  2766.             INTO nAGENT_COMP_DISEASES_ID
  2767.             FROM D_AGENT_COMP_DISEASES acd
  2768.            WHERE acd.PID = nAGENTS_ID
  2769.              AND acd.VERSION = nVER_AGENT_COMP_DISEASES
  2770.              AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN acd.DATE_BEGIN AND COALESCE(acd.DATE_END,TRUNC(SYSDATE))
  2771.              AND ROWNUM = 1;
  2772.         EXCEPTION
  2773.           WHEN NO_DATA_FOUND THEN
  2774.             --создадим несколько сопуствующих заболеваний при необходимости
  2775.             FOR z IN (SELECT            'SAHD'   col_name, cr.SAHD   col_value FROM dual
  2776.                        UNION ALL SELECT 'PSIH'   col_name, cr.PSIH   col_value FROM dual
  2777.                        UNION ALL SELECT 'YAZV'   col_name, cr.YAZV   col_value FROM dual
  2778.                        UNION ALL SELECT 'GEPAT'  col_name, cr.GEPAT  col_value FROM dual
  2779.                        UNION ALL SELECT 'POCHPA' col_name, cr.POCHPA col_value FROM dual
  2780.                        UNION ALL SELECT 'IBS'    col_name, cr.IBS    col_value FROM dual
  2781.                        UNION ALL SELECT 'GIPERT' col_name, cr.GIPERT col_value FROM dual
  2782.                        UNION ALL SELECT 'HNZL'   col_name, cr.HNZL   col_value FROM dual
  2783.                        UNION ALL SELECT 'KORTS'  col_name, cr.KORTS  col_value FROM dual
  2784.                        UNION ALL SELECT 'ONKOL'  col_name, cr.ONKOL  col_value FROM dual
  2785.                        UNION ALL SELECT 'OPERTB' col_name, cr.OPERTB col_value FROM dual
  2786.                      )
  2787.             LOOP
  2788.               nCOMP_DISEASE := NULL;
  2789.              
  2790.               --получение данные для вставки
  2791.               WITH COMP_DISEASES_CODES AS (SELECT (CASE WHEN z.COL_NAME = 'SAHD'   AND z.COL_VALUE IS NOT NULL   THEN '137'
  2792.                                                         WHEN z.COL_NAME = 'PSIH'   AND z.COL_VALUE IS NOT NULL   THEN '11'
  2793.                                                         WHEN z.COL_NAME = 'YAZV'   AND z.COL_VALUE IS NOT NULL   THEN 'ЯБ ДПК'
  2794.                                                         WHEN z.COL_NAME = 'GEPAT'  AND UPPER(z.COL_VALUE) = 'C'  THEN 'HCV'
  2795.                                                         WHEN z.COL_NAME = 'GEPAT'  AND UPPER(z.COL_VALUE) = 'B'  THEN 'HBsAg'
  2796.                                                         WHEN z.COL_NAME = 'GEPAT'  AND UPPER(z.COL_VALUE) = 'ДА' THEN 'Гепатит'
  2797.                                                         WHEN z.COL_NAME = 'POCHPA' AND z.COL_VALUE IS NOT NULL   THEN '12'
  2798.                                                         WHEN z.COL_NAME = 'IBS'    AND z.COL_VALUE IS NOT NULL   THEN 'ИБС'
  2799.                                                         WHEN z.COL_NAME = 'GIPERT' AND z.COL_VALUE IS NOT NULL   THEN 'Гипертония'
  2800.                                                         WHEN z.COL_NAME = 'HNZL'   AND z.COL_VALUE IS NOT NULL   THEN 'ХНЗЛ'
  2801.                                                         WHEN z.COL_NAME = 'KORTS'  AND z.COL_VALUE IS NOT NULL   THEN '13'
  2802.                                                         WHEN z.COL_NAME = 'ONKOL'  AND z.COL_VALUE IS NOT NULL   THEN '15'
  2803.                                                         WHEN z.COL_NAME = 'OPERTB' AND z.COL_VALUE IS NOT NULL   THEN '16'
  2804.                                                         ELSE NULL
  2805.                                                    END) cd_code
  2806.                                              FROM dual)
  2807.               SELECT (SELECT cd.ID
  2808.                         FROM D_COMP_DISEASES cd
  2809.                        WHERE cd.VERSION = nVER_COMP_DISEASES
  2810.                          AND LOWER(cd.CD_CODE) = (SELECT LOWER(CD_CODE) FROM COMP_DISEASES_CODES)
  2811.                          AND ROWNUM = 1)
  2812.                 INTO nCOMP_DISEASE
  2813.                 FROM dual;
  2814.  
  2815.               IF nCOMP_DISEASE IS NOT NULL THEN
  2816.                 BEGIN
  2817.                   D_PKG_AGENT_COMP_DISEASES.ADD(pnD_INSERT_ID  => nAGENT_COMP_DISEASES_ID,
  2818.                                                 pnLPU          => pnLPU,
  2819.                                                 pnPID          => nAGENTS_ID,
  2820.                                                 pnCOMP_DISEASE => nCOMP_DISEASE,
  2821.                                                 pdDATE_BEGIN   => cr.DATUCH,
  2822.                                                 pdDATE_END     => NULL,
  2823.                                                 psNOTE         => NULL);
  2824.                 EXCEPTION
  2825.                   WHEN OTHERS THEN
  2826.                     lg(pnLOG_IDENT,'ADD_AGENT_COMP_DISEASES','Ошибка добавления сопутствующего заболевания пациента: '||cr.FIO||' (поле '||z.COL_NAME||' файла)', SQLERRM);
  2827.                 END;
  2828.               END IF;
  2829.             END LOOP;
  2830.         END;  
  2831.  
  2832.  
  2833.         ----------------------------------------
  2834.         --2.9 блок обработки данных в разделе AGENT_REGISTRATION
  2835.         ----------------------------------------
  2836.         IF cr.POLIK <> 0 THEN -- создаем запись только если POLIK не равно 0.
  2837.           --получение данных для вставки в таблицу
  2838.           SELECT (SELECT rp.ID
  2839.                     FROM D_REGISTER_PURPOSES rp
  2840.                    WHERE rp.VERSION = nVER_REGISTER_PURPOSES
  2841.                      AND rp.RP_CODE = (SELECT (CASE WHEN TRUNC(MONTHS_BETWEEN(TRUNC(cr.DATUCH),dAGENT_BIRTHDATE))/12 >= 18 THEN '1'
  2842.                                                     ELSE '2'
  2843.                                                END)
  2844.                                          FROM dual)
  2845.                      AND ROWNUM = 1),
  2846.                    
  2847.                  (SELECT ld.ID
  2848.                     FROM D_LPUDICT ld
  2849.                    WHERE ld.VERSION  = nVER_LPUDICT
  2850.                      AND LOWER(ld.LPU_CODE) = (SELECT LOWER(vlc.MIS_CODE)
  2851.                                                  FROM IMP70_V_KONVE_LPUDICT_CODES vlc
  2852.                                                 WHERE vlc.FILE_CODE = cr.POLIK
  2853.                                                   AND ROWNUM = 1)
  2854.                      AND ROWNUM = 1)
  2855.            
  2856.                
  2857.             INTO nREGISTER_PURPOSE,
  2858.                  nLPU_REG
  2859.             FROM dual;
  2860.          
  2861.  
  2862.           --проверим, нет ли прикрепления к текущему ЛПУ
  2863.           SELECT (SELECT ar.ID
  2864.                     FROM D_AGENT_REGISTRATION ar
  2865.                    WHERE ar.PID = nAGENTS_ID
  2866.                      AND ar.LPU_REG = nLPU_REG
  2867.                      AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN ar.BEGIN_DATE AND COALESCE(ar.END_DATE,TRUNC(SYSDATE))
  2868.                      AND ROWNUM = 1)
  2869.             INTO nAGENT_REGISTRATION_ID
  2870.             FROM dual;
  2871.  
  2872.  
  2873.           IF nAGENT_REGISTRATION_ID IS NULL THEN
  2874.             --Определим участок
  2875.             IF nLPU_REG IS NULL THEN
  2876.               lg(pnLOG_IDENT,'NDF_LPUDICT','Не определено ЛПУ прикрепления: POLIK = '||cr.POLIK||'(пациент - '||cr.FIO||')');
  2877.             ELSE
  2878.               BEGIN
  2879.                 SELECT s.ID
  2880.                   INTO nLPU_SITE
  2881.                   FROM D_SITES s
  2882.                  WHERE s.VERSION = nVER_SITES
  2883.                    AND s.lpudict = nLPU_REG
  2884.                    AND UPPER(s.SITE_NAME) LIKE '%'||UPPER(cr.UCH)||'%'
  2885.                    AND ROWNUM = 1;
  2886.               EXCEPTION
  2887.                 WHEN NO_DATA_FOUND THEN
  2888.                   --Если участок не найден, то необходимо его создать
  2889.                   lg(pnLOG_IDENT,'NDF_SITES','Не определен участок '||cr.UCH||' для D_LPUDICT='||nLPU_REG||'(POLIK ='||cr.POLIK||')');
  2890.                   /* -- закомментировано, так как не чем заполнить обязательное pnDIVISION
  2891.                   begin
  2892.                     D_PKG_SITES.ADD(pnD_INSERT_ID      => nLPU_SITE,
  2893.                                     pnLPU              => pnLPU,
  2894.                                     psSITE_CODE        => cr.UCH,
  2895.                                     psSITE_NAME        => cr.UCH,
  2896.                                     pnSITE_TYPE        => null,
  2897.                                     pnMAX_PACIENT      => null,
  2898.                                     pnREGISTER_PURPOSE => nREGISTER_PURPOSE,
  2899.                                     pnDIVISION         => null,
  2900.                                     pnLPUDICT          => nLPU_REG);
  2901.                   exception
  2902.                     when others then
  2903.                       lg(pnLOG_IDENT,'ADD_SITES','Ошибка добавления участка: '||cr.UCH||' для D_LPUDICT='||nLPU_REG||'(POLIK ='||cr.POLIK||')',sqlerrm);
  2904.                   end;
  2905.                   */
  2906.               END;
  2907.  
  2908.               BEGIN
  2909.                 D_PKG_AGENT_REGISTRATION.ADD(pnD_INSERT_ID           => nAGENT_REGISTRATION_ID,
  2910.                                              pnLPU                   => pnLPU,
  2911.                                              pnPID                   => nAGENTS_ID,
  2912.                                              pnLPU_REG               => nLPU_REG,
  2913.                                              pnREGISTER_PURPOSE      => nREGISTER_PURPOSE,
  2914.                                              pdBEGIN_DATE            => cr.DATUCH,
  2915.                                              pdEND_DATE              => NULL,
  2916.                                              pnLPU_SITE              => nLPU_SITE,
  2917.                                              pnREG_TYPE              => NULL,
  2918.                                              psREG_DOC_NUMB          => NULL,
  2919.                                              psREG_NOTE              => NULL,
  2920.                                              pnREG_CATEGORY          => NULL,
  2921.                                              pnDIVISION              => NULL,
  2922.                                              pnAGENT_APPLIСATION_REG => NULL);
  2923.               EXCEPTION
  2924.                 WHEN OTHERS THEN
  2925.                   lg(pnLOG_IDENT,'ADD_AGENT_REGISTRATION','Ошибка добавления регистрации пациента: '||cr.FIO, SQLERRM);
  2926.               END;
  2927.             END IF;
  2928.           END IF;            
  2929.         END IF;
  2930.  
  2931.  
  2932.         ----------------------------------------
  2933.         --2.10 блок обработки данных в разделе AGENT_GR_RENTGENOGR
  2934.         ----------------------------------------
  2935.  
  2936.         --получим данные для вставки в таблицу
  2937.         IF cr.SOCGR IS NOT NULL THEN
  2938.           BEGIN
  2939.             SELECT agr.ID
  2940.               INTO nAGENT_GR_RENTGENOGR_ID
  2941.               FROM D_AGENT_GR_RENTGENOGR agr
  2942.              WHERE agr.PID = nAGENTS_ID
  2943.                AND agr.VERSION = nVER_AGENT_GR_RENTGENOGR
  2944.                AND (TRUNC(SYSDATE) BETWEEN agr.BEGIN_DATE AND COALESCE(agr.END_DATE,TRUNC(SYSDATE))
  2945.                     OR
  2946.                     agr.BEGIN_DATE IS NULL)
  2947.                AND ROWNUM = 1;
  2948.           EXCEPTION
  2949.             WHEN NO_DATA_FOUND THEN
  2950.               SELECT (SELECT grf.ID
  2951.                         FROM D_GR_RENTGENOGRAPH grf
  2952.                        WHERE grf.VERSION = nVER_GR_RENTGENOGRAPH
  2953.                          AND LOWER(grf.GRF_CODE) = (SELECT LOWER(vsgr.MIS_CODE)
  2954.                                                       FROM IMP70_V_KONVE_SOCGR_GR_RENTGEN vsgr
  2955.                                                      WHERE LOWER(vsgr.FILE_CODE) = LOWER(cr.SOCGR)
  2956.                                                        AND ROWNUM = 1)
  2957.                          AND ROWNUM = 1)
  2958.                 INTO nGR_RENTGENOGRAPH
  2959.                 FROM dual;
  2960.  
  2961.                
  2962.               IF nGR_RENTGENOGRAPH IS NULL THEN
  2963.                 lg(pnLOG_IDENT,'NDF_AGENT_GR_RENTGENOGR','Не определена группа риска флюорографии '||cr.SOCGR||' для пациента: '||cr.FIO);
  2964.               ELSE  
  2965.                 BEGIN
  2966.                   D_PKG_AGENT_GR_RENTGENOGR.ADD(pnD_INSERT_ID      => nAGENT_GR_RENTGENOGR_ID,
  2967.                                                 pnLPU              => pnLPU,
  2968.                                                 pnPID              => nAGENTS_ID,
  2969.                                                 pnGR_RENTGENOGRAPH => nGR_RENTGENOGRAPH,
  2970.                                                 pdBEGIN_DATE       => NULL,
  2971.                                                 pdEND_DATE         => NULL);
  2972.                 EXCEPTION
  2973.                   WHEN OTHERS THEN
  2974.                     lg(pnLOG_IDENT,'ADD_AGENT_GR_RENTGENOGR','Ошибка добавления группы риска флюорографии пациента: '||cr.FIO, SQLERRM);
  2975.                 END;
  2976.               END IF;
  2977.           END;
  2978.         END IF;
  2979.  
  2980.  
  2981.         ----------------------------------------
  2982.         --2.11 блок обработки данных в разделе AGENT_DETR_EFFECTS
  2983.         ----------------------------------------
  2984.         IF (cr.ALK IS NOT NULL) OR (cr.NARK IS NOT NULL) OR (cr.KUREN  IS NOT NULL) THEN
  2985.           BEGIN
  2986.             SELECT adef.ID
  2987.               INTO nAGENT_DETR_EFFECTS_ID
  2988.               FROM D_AGENT_DETR_EFFECTS adef
  2989.              WHERE adef.PID = nAGENTS_ID
  2990.                AND adef.VERSION = nVER_AGENT_DETR_EFFECTS
  2991.                AND ROWNUM = 1;
  2992.           EXCEPTION
  2993.             WHEN NO_DATA_FOUND THEN
  2994.               --получим данные из таблицы импорта для вставку в таблицу
  2995.               WITH DET_EFFECTS_CODES AS (SELECT (CASE WHEN cr.ALK   IS NOT NULL  THEN 2
  2996.                                                       WHEN cr.NARK  IS NOT NULL  THEN 4
  2997.                                                       WHEN cr.KUREN IS NOT NULL  THEN 1
  2998.                                                       ELSE NULL
  2999.                                                  END)
  3000.                                            FROM dual)
  3001.               SELECT (SELECT def.ID
  3002.                         FROM D_DETRIMENTAL_EFFECTS def
  3003.                        WHERE def.VERSION = nVER_DETRIMENTAL_EFFECTS
  3004.                          AND def.CODE = (SELECT CODE FROM DET_EFFECTS_CODES)
  3005.                          AND ROWNUM = 1)
  3006.                 INTO nDETR_EFFECT
  3007.                 FROM dual;
  3008.                
  3009.  
  3010.               BEGIN
  3011.                 D_PKG_AGENT_DETR_EFFECTS.ADD(pnD_INSERT_ID => nAGENT_DETR_EFFECTS_ID,
  3012.                                              pnLPU         => pnLPU,
  3013.                                              pnPID         => nAGENTS_ID,
  3014.                                              pnDETR_EFFECT => nDETR_EFFECT,
  3015.                                              pnIS_ACTUAL   => 1);
  3016.               EXCEPTION
  3017.                 WHEN OTHERS THEN
  3018.                   lg(pnLOG_IDENT,'ADD_AGENT_DETR_EFFECTS','Ошибка добавления наследственных заболеваний пациента: '||cr.FIO,SQLERRM);
  3019.               END;
  3020.           END;
  3021.         END IF;
  3022.  
  3023.  
  3024.         ----------------------------------------
  3025.         --2.14 блок обработки данных в разделе PERSMEDCARD
  3026.         ----------------------------------------
  3027.         BEGIN
  3028.           SELECT pmc.ID
  3029.             INTO nPERSMEDCARD_ID
  3030.             FROM D_PERSMEDCARD pmc
  3031.            WHERE pmc.LPU = pnLPU
  3032.              AND pmc.AGENT = nAGENTS_ID
  3033.              AND ROWNUM = 1;  
  3034.         EXCEPTION
  3035.           WHEN NO_DATA_FOUND THEN
  3036.             BEGIN
  3037.               D_PKG_PERSMEDCARD.ADD(pnD_INSERT_ID  => nPERSMEDCARD_ID,
  3038.                                     pnLPU          => pnLPU,
  3039.                                     pnCID          => nCAT_PERSMEDCARD,
  3040.                                     pnAGENT        => nAGENTS_ID,
  3041.                                     pnBLOODGROUPE  => NULL,
  3042.                                     pnRHESUS       => NULL,
  3043.                                     psECOLOR       => NULL,
  3044.                                     psCARD_NUMB    => cr.LIKOD,
  3045.                                     psNOTE         => NULL,
  3046.                                     pnREG_DIVISION => NULL,
  3047.                                     pnPMC_TYPE     => NULL,
  3048.                                     pnIA_PRINTED   => 0,
  3049.                                     pnSMS_AGREE    => 0,
  3050.                                     pnEMAIL_AGREE  => 0,
  3051.                                     pdCREATEDATE   => SYSDATE);
  3052.             EXCEPTION
  3053.               WHEN OTHERS THEN
  3054.                 lg(pnLOG_IDENT,'ADD_PERSMEDCARD','Ошибка добавления карты пациента: '||cr.FIO, SQLERRM);
  3055.             END;
  3056.         END;
  3057.  
  3058.  
  3059.         ----------------------------------------
  3060.         --2.16 блок обработки данных в разделе RTUB_CASE_CHEMO
  3061.         ----------------------------------------
  3062.         IF nRTUB_CASES_ID IS NOT NULL THEN
  3063.           BEGIN
  3064.             SELECT rcc.ID
  3065.               INTO nRTUB_CASE_CHEMO_ID
  3066.               FROM D_RTUB_CASE_CHEMO rcc
  3067.              WHERE rcc.PID = nRTUB_CASES_ID
  3068.                AND rcc.VERSION = nVER_RTUB_CASE_CHEMO
  3069.                AND COALESCE(cr.DATLEC,TRUNC(SYSDATE)) BETWEEN rcc.DATE_BEGIN AND COALESCE(rcc.DATE_END,TRUNC(SYSDATE))
  3070.                AND ROWNUM = 1;
  3071.           EXCEPTION
  3072.             WHEN NO_DATA_FOUND THEN
  3073.               --получим данные из таблицы импорта для вставки
  3074.               SELECT (SELECT dcm.ID
  3075.                         FROM D_DTUB_CHEMO_MODES dcm
  3076.                        WHERE dcm.VERSION = nVER_DTUB_CHEMO_MODES
  3077.                          AND LOWER(dcm.CM_CODE) = LOWER(cr.REJ)
  3078.                          AND ROWNUM = 1),
  3079.                        
  3080.                      (SELECT dco.ID
  3081.                         FROM D_DTUB_CHEMO_OUT dco
  3082.                        WHERE dco.VERSION = nVER_DTUB_CHEMO_OUT
  3083.                          AND dco.CO_CODE = nDTUB_CHEMO_OUT_UMER
  3084.                          AND ROWNUM = 1)
  3085.                
  3086.                 INTO nCHEMO_MODE,
  3087.                      nCHEMO_OUT
  3088.                 FROM dual;
  3089.                
  3090.               IF nCHEMO_MODE IS NULL THEN
  3091.                 lg(pnLOG_IDENT,'NDF_DTUB_CHEMO_MODES','Не определен режим химиотерапии для пациента: '||cr.FIO||' (REJ = '||cr.REJ||')');
  3092.               ELSE
  3093.                 IF nRTUB_CASE_DGNS_ID IS NOT NULL THEN
  3094.                   BEGIN
  3095.                     D_PKG_RTUB_CASE_CHEMO.ADD(pnD_INSERT_ID       => nRTUB_CASE_CHEMO_ID,
  3096.                                               pnLPU               => pnLPU,
  3097.                                               pnPID               => nRTUB_CASES_ID,
  3098.                                               pnDIAGNS            => nRTUB_CASE_DGNS_ID,
  3099.                                               pdDATE_BEGIN        => cr.DATLEC,
  3100.                                               pdDATE_END          => cr.DATSME,
  3101.                                               pnCHEMO_MODE        => nCHEMO_MODE,
  3102.                                               pnCHEMO_OUT         => nCHEMO_OUT,
  3103.                                               pnCHEMO_PLACE       => 0,
  3104.                                               pnART               => 0,
  3105.                                               pnCOTRIMOXAZOL      => 0,
  3106.                                               pnIS_EMP            => NULL,
  3107.                                               pnIS_DRUG_SENS_RSLT => NULL);
  3108.                   EXCEPTION
  3109.                     WHEN OTHERS THEN
  3110.                       lg(pnLOG_IDENT,'ADD_RTUB_CASE_CHEMO','Ошибка добавления химиотерапии пациента: '||cr.FIO, SQLERRM);
  3111.                   END;
  3112.                 END IF;
  3113.               END IF;  
  3114.           END;
  3115.         END IF;
  3116.  
  3117.  
  3118.         ----------------------------------------
  3119.         --2.17 блок обработки данных в разделе RTUB_CASE_DETECTION
  3120.         ----------------------------------------
  3121.         IF nRTUB_CASES_ID IS NOT NULL THEN  
  3122.           BEGIN
  3123.             SELECT rcd.ID
  3124.               INTO nRTUB_CASE_DETECTION_ID
  3125.               FROM D_RTUB_CASE_DETECTION rcd
  3126.              WHERE rcd.PID = nRTUB_CASES_ID
  3127.                AND rcd.VERSION = nVER_RTUB_CASE_DETECTION
  3128.                AND ROWNUM = 1;
  3129.           EXCEPTION
  3130.             WHEN NO_DATA_FOUND THEN
  3131.               -- получим данные из таблицы импорта для вставки в таблицу
  3132.               WITH N_REGISTR_TYPES AS (SELECT rt.ID
  3133.                                          FROM D_NOS_REGISTR_TYPES rt
  3134.                                         WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  3135.                                           AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  3136.                                           AND ROWNUM = 1)
  3137.               SELECT (SELECT pd.ID
  3138.                         FROM D_NR_CLS_PATH_DISCOVER pd
  3139.                        WHERE pd.VERSION = nVER_NR_CLS_PATH_DISCOVER
  3140.                          AND UPPER(pd.PATH_CODE) = (SELECT UPPER(vkpd.MIS_CODE)
  3141.                                                       FROM IMP70_V_KONVE_PATH_DISCOVER vkpd
  3142.                                                      WHERE UPPER(vkpd.FILE_CODE) = UPPER(cr.ZABVI)
  3143.                                                        AND ROWNUM = 1)
  3144.                          AND pd.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  3145.                          AND TRUNC(SYSDATE) BETWEEN pd.DATE_BEGIN AND COALESCE(pd.DATE_END,TRUNC(SYSDATE))
  3146.                          AND ROWNUM = 1)
  3147.                 INTO nDISCOVER_PATH
  3148.                 FROM dual;
  3149.                
  3150.               BEGIN
  3151.                 d_PKG_RTUB_CASE_DETECTION.ADD(pnD_INSERT_ID       => nRTUB_CASE_DETECTION_ID,
  3152.                                               pnLPU               => pnLPU,
  3153.                                               pnPID               => nRTUB_CASES_ID,
  3154.                                               pdSYMP_DATE         => NULL,
  3155.                                               pdFIRST_VIS_DATE    => NULL,
  3156.                                               pnFIRST_VISIT       => NULL,
  3157.                                               pnDETECT_PLACE      => NULL,
  3158.                                               psDETECT_PLACE_TEXT => NULL,
  3159.                                               pnDETECT_LPU        => NULL,
  3160.                                               psDETECT_LPU_TEXT   => NULL,
  3161.                                               pnDISCOVER_PATH     => nDISCOVER_PATH);
  3162.               EXCEPTION
  3163.                 WHEN OTHERS THEN
  3164.                   lg(pnLOG_IDENT,'ADD_RTUB_CASE_DETECTION','Ошибка добавления выявления диагноза туберкулеза пациента: '||cr.FIO, SQLERRM);
  3165.               END;
  3166.           END;
  3167.         END IF;
  3168.  
  3169.       END IF; -- конец условия if nAGENTS_ID is not null ПОСЛЕ создания D_AGENTS
  3170.     END LOOP; -- конец цикла по таблице импорта
  3171.   END IF;     -- конец условия if nERROR = 0 or pnERR_IGNORE = 1
  3172.  
  3173.   lg(pnLOG_IDENT,'END_IMP','Завершение импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
  3174.  
  3175.  
  3176. EXCEPTION
  3177.   WHEN OTHERS THEN
  3178.     lg(pnLOG_IDENT,'ERROR_IMP','Ошибка - '||SQLERRM);
  3179.     D_P_EXC('Ошибка процедуры IMP70_P_UMEKONVE импорта данных из таблицы IMP70_UMEKONVE: Ошибка - '||SQLERRM);
  3180. END IMP70_P_UMEKONVE;
  3181. -----------------------------------------------------------------------------------------------------------------------------
  3182.  
  3183. -----------------------------------------------------------------------------------------------------------------------------
  3184. --Процедура для импорта данных из файла HPKONVE.dbf через таблицу импорта IMP70_HPKONVE
  3185. PROCEDURE IMP70_P_HPKONVE
  3186. (
  3187.   pnLPU                                IN  NUMBER,
  3188.   pnLOG_IDENT                          OUT NUMBER,
  3189.   pnERR_IGNORE                         IN  NUMBER DEFAULT 0
  3190. )
  3191. IS
  3192.  
  3193.   nVER_AGENT_ADDRS                                         D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_ADDRS
  3194.   nVER_GEOGRAFY                                            D_PKG_STD.tREF;     -- идентификатор версии для раздела GEOGRAFY
  3195.   nVER_NOS_REGISTR_TYPES                                   D_PKG_STD.tREF;     -- идентификатор версии для раздела NOS_REGISTR_TYPES
  3196.   nVER_NOS_REGISTRS                                        D_PKG_STD.tREF;     -- идентификатор версии для раздела NOS_REGISTRS
  3197.   nVER_NR_PATIENTS                                         D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_PATIENTS
  3198.   nVER_RTUB_CASES                                          D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASES
  3199.   nVER_NR_LPUDICT                                          D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_LPUDICT
  3200.   nVER_RTUB_CASE_RSRCH                                     D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_RSRCH
  3201.   nVER_DTUB_DETECT_METHODS                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_DETECT_METHODS
  3202.   nVER_LABMED_BIOMATERIAL                                  D_PKG_STD.tREF;     -- идентификатор версии для раздела LABMED_BIOMATERIAL
  3203.   nVER_DTUB_RSRCH_RESULTS                                  D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_RSRCH_RESULTS
  3204.  
  3205.   nCAT_ROOT                                                D_PKG_STD.tREF;     -- идентификатор корневого каталога для разделов
  3206.   nCAT_AGENTS                                              D_PKG_STD.tREF;     -- идентификатор каталога для раздела AGENTS
  3207.   nCAT_PERSMEDCARD                                         D_PKG_STD.tREF;     -- идентификатор каталога для раздела PERSMEDCARD
  3208.  
  3209.   nLPUDICT_ID                                              D_PKG_STD.tREF;     -- идентификатор записи D_LPUDICT
  3210.   nAGENTS_ID                                               D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENTS
  3211.   nAGENT_ADDRS_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_ADDRS
  3212.   nPERSMEDCARD_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_PERSMEDCARD
  3213.   nNOS_REGISTR_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NOS_REGISTR
  3214.   nRTUB_CASES_ID                                           D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASES
  3215.   nNR_PATIENT_ID                                           D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NR_PATIENT
  3216.   nRTUB_CASE_RSRCH_ID                                      D_PKG_STD.tREF;     -- идентификатор записи в таблице RTUB_CASE_RSRCH
  3217.   nRTUB_RSRCH_RSLT_BACT_ID                                 D_PKG_STD.tREF;     -- идентификатор записи в таблице RTUB_RSRCH_RSLT_BACT
  3218.  
  3219.  
  3220.   nERROR                                                   D_PKG_STD.tREF := 0;-- кол-во ошибок импорта
  3221.   sERROR_CODE                                              D_PKG_STD.tSTR;     -- код ошибки
  3222.   sAGN_CODE                                                D_AGENTS.AGN_CODE%TYPE;
  3223.                                                                                -- код контрагента в таблице D_AGENTS
  3224.   nCITY                                                    D_PKG_STD.tREF;     -- идентификатор населенного пункта
  3225.   nSTREET                                                  D_PKG_STD.tREF;     -- идентификатор улицы
  3226.   sHOUSE                                                   D_PKG_STD.tSTR;     -- номер дома в адресе
  3227.   sHOUSELIT                                                D_PKG_STD.tSTR;     -- литера дома в адресе
  3228.   sFLAT                                                    D_PKG_STD.tSTR;     -- номер квартиры в адресе
  3229.   nRAION                                                   D_PKG_STD.tREF;     -- идентификатор района из адреса
  3230.   nRAION_CODE                                              D_PKG_STD.tSTR;     -- код района
  3231.   sTUBNASP_TMP                                             D_PKG_STD.tSTR;     -- временная переменная для хранения названия нас пункта из файла
  3232.   dAGENT_BIRTHDATE                                         D_AGENTS.BIRTHDATE%TYPE;
  3233.                                                                                -- дата рождения пациента
  3234.   nDETECT_METHOD                                           D_PKG_STD.tREF;     -- идентификатор метода исследования
  3235.   nBIOMATERIAL                                             D_PKG_STD.tREF;     -- идентификатор биоматериала
  3236.   nRSRCH_RESULT                                            D_PKG_STD.tREF;     -- идентификатор результата исследования
  3237.  
  3238.  
  3239.  
  3240. BEGIN
  3241.   D_PKG_IMP_LOG.INIT('IMP70_HPKONVE', pnLPU, pnLOG_IDENT, 0);
  3242.   lg(pnLOG_IDENT,'START_IMP','Начало импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
  3243.  
  3244.  
  3245.   nVER_AGENT_ADDRS            := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_ADDRS');
  3246.   nVER_GEOGRAFY               := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GEOGRAFY');
  3247.   nVER_NOS_REGISTR_TYPES      := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTR_TYPES');
  3248.   nVER_NOS_REGISTRS           := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTRS');
  3249.   nVER_NR_PATIENTS            := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENTS');
  3250.   nVER_RTUB_CASES             := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASES');
  3251.   nVER_NR_LPUDICT             := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_LPUDICT');
  3252.   nVER_RTUB_CASE_RSRCH        := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_RSRCH');
  3253.   nVER_DTUB_DETECT_METHODS    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_DETECT_METHODS');
  3254.   nVER_LABMED_BIOMATERIAL     := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'LABMED_BIOMATERIAL');
  3255.   nVER_DTUB_RSRCH_RESULTS     := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_RSRCH_RESULTS');
  3256.  
  3257.   --блок получения каталогов для разделов
  3258.   D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'AGENTS', 'Пациенты Томск Фтиз', nCAT_AGENTS);
  3259.   IF nCAT_AGENTS IS NULL THEN
  3260.     D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'AGENTS',nCAT_ROOT);
  3261.     D_PKG_CATALOGS.ADD(nCAT_AGENTS,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
  3262.   END IF;
  3263.  
  3264.   D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'PERSMEDCARD', 'Пациенты Томск Фтиз', nCAT_PERSMEDCARD);
  3265.   IF nCAT_PERSMEDCARD IS NULL THEN
  3266.     D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'PERSMEDCARD',nCAT_ROOT);
  3267.     D_PKG_CATALOGS.ADD(nCAT_PERSMEDCARD,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
  3268.   END IF;
  3269.  
  3270.  
  3271.   --по заданному ЛПУ получим LPUDICT
  3272.   BEGIN
  3273.     SELECT l.LPUDICT
  3274.       INTO nLPUDICT_ID
  3275.       FROM D_LPU l
  3276.      WHERE l.id = pnLPU
  3277.        AND ROWNUM = 1;
  3278.   EXCEPTION
  3279.     WHEN NO_DATA_FOUND THEN
  3280.       nERROR := nERROR + 1;
  3281.       lg(pnLOG_IDENT,'NFD_LPUDICT','Не определно заданное ЛПУ: '||pnLPU);
  3282.   END;
  3283.  
  3284.  
  3285.  
  3286.   --Цикл по всем записям таблицы IMP70_TUBKONVE с импортируемыми данными
  3287.   IF nERROR = 0 OR pnERR_IGNORE = 1 THEN
  3288.     FOR cr IN (SELECT *
  3289.                  FROM IMP70_HPKONVE)
  3290.     LOOP
  3291.       nAGENTS_ID                := NULL;
  3292.       nAGENT_ADDRS_ID           := NULL;
  3293.       nRTUB_CASES_ID            := NULL;
  3294.       nPERSMEDCARD_ID           := NULL;
  3295.       nNR_PATIENT_ID            := NULL;
  3296.       nNOS_REGISTR_ID           := NULL;
  3297.       nRTUB_CASE_RSRCH_ID       := NULL;
  3298.       nRTUB_RSRCH_RSLT_BACT_ID  := NULL;
  3299.  
  3300.  
  3301.       sAGN_CODE                 := NULL;
  3302.       nCITY                     := NULL;
  3303.       nSTREET                   := NULL;
  3304.       sHOUSE                    := NULL;
  3305.       sHOUSELIT                 := NULL;
  3306.       nRAION                    := NULL;
  3307.       nRAION_CODE               := NULL;
  3308.       dAGENT_BIRTHDATE          := NULL;
  3309.       nDETECT_METHOD            := NULL;
  3310.  
  3311.       --проверим нет ли в таблице D_AGENTS такого контрагента
  3312.       GET_AGENT_ID(psFIO        => cr.FIO,
  3313.                    pdBIRTHDATE  => cr.DATRO,
  3314.                    psSNILS      => NULL,
  3315.                    pnAGENTS_ID  => nAGENTS_ID,
  3316.                    psERROR_CODE => sERROR_CODE);
  3317.  
  3318.       IF nAGENTS_ID IS NOT NULL THEN
  3319.         dAGENT_BIRTHDATE := cr.DATRO;
  3320.       ELSE
  3321.         dAGENT_BIRTHDATE := NULL;
  3322.        
  3323.         IF sERROR_CODE = 'TMR_AGENTS' THEN
  3324.           lg(pnLOG_IDENT,'TMR_AGENTS','Найдено несколько пациентов: ФИО - '||cr.FIO||', Дата рожд.- '||TO_CHAR(cr.DATRO,'dd.mm.yyyy'));
  3325.           continue;
  3326.         END IF;
  3327.       END IF;
  3328.  
  3329.  
  3330.  
  3331.       --если контрагент не найден, то создадим его
  3332.       IF nAGENTS_ID IS NULL THEN
  3333.         ----------------------------------------
  3334.         --1. блок обработки данных в разделе AGENTS
  3335.         ----------------------------------------
  3336.         sAGN_CODE        := D_PKG_AGENTS.GEN_CODE(pnLPU);
  3337.         dAGENT_BIRTHDATE := cr.DATRO;
  3338.      
  3339.         BEGIN
  3340.           D_PKG_AGENTS.ADD(pnD_INSERT_ID         => nAGENTS_ID,
  3341.                            pnLPU                 => pnLPU,
  3342.                            pnCID                 => nCAT_AGENTS,
  3343.                            psAGN_CODE            => sAGN_CODE,
  3344.                            psAGN_NAME            => sAGN_CODE||' '||cr.FIO,
  3345.                            pnAGN_TYPE            => 1,
  3346.                            pnAGN_INN             => NULL,
  3347.                            pnAGN_KPP             => NULL,
  3348.                            psNOTE                => NULL,
  3349.                            psFIRSTNAME           => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'FIRSTNAME'),
  3350.                            psSURNAME             => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'SURNAME'),
  3351.                            psLASTNAME            => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'LASTNAME'),
  3352.                            pdBIRTHDATE           => cr.DATRO,
  3353.                            pnSEX                 => IMP70_PKG_KONVE.CONVERT_POL_TO_NUMBER(cr.POL),
  3354.                            pnEDUCATION           => NULL,
  3355.                            pnOKVED               => NULL,
  3356.                            pnIS_EMPLOYER         => 0,
  3357.                            psSNILS               => NULL,
  3358.                            psAGN_OGRN            => NULL,
  3359.                            psAGN_OKPO            => NULL,
  3360.                            pdDEATHDATE           => NULL,
  3361.                            pnIS_UNKNOWN          => NULL,
  3362.                            pnDEATHDOCTYPE        => NULL,
  3363.                            pdDEATHDOCDATE        => NULL,
  3364.                            psDEATHDOCNUM         => NULL,
  3365.                            pnAGN_OKFS            => NULL,
  3366.                            psENP                 => NULL,
  3367.                            psBIRTHPLACE          => NULL,
  3368.                            pnDECLINE_FIO         => NULL,
  3369.                            pnNATION              => NULL,
  3370.                            pnIS_HOME             => 0,
  3371.                            pnGEST_AGE_MOTHER     => NULL,
  3372.                            pnIS_ANONYM           => 0,
  3373.                            psDEATHPLACE          => NULL,
  3374.                            pnFULL_CLASSES        => NULL,
  3375.                            pnACCURACY_DATE_DEATH => NULL,
  3376.                            pnACCURACY_DATE_BIRTH => NULL,
  3377.                            pnIND_ENTERP          => NULL,
  3378.                            psAGN_OGRN_IND        => NULL,
  3379.                            pnCONVICT_AMOUNT      => NULL);
  3380.         EXCEPTION
  3381.           WHEN OTHERS THEN
  3382.             lg(pnLOG_IDENT,'ADD_AGENTS','Ошибка добавления пациента: '||cr.FIO, SQLERRM);
  3383.         END;
  3384.       END IF;
  3385.  
  3386.  
  3387.  
  3388.       --если контрагент создан успешно или найден в системе, то загрузим остальные данные при их отсутствии
  3389.       IF nAGENTS_ID IS NOT NULL THEN
  3390.         ----------------------------------------
  3391.         --2.1 блок обработки данных в разделе AGENT_ADDRS
  3392.         ----------------------------------------
  3393.         BEGIN
  3394.           SELECT aa.ID
  3395.             INTO nAGENT_ADDRS_ID
  3396.             FROM D_AGENT_ADDRS aa
  3397.            WHERE aa.PID = nAGENTS_ID
  3398.              AND aa.VERSION = nVER_AGENT_ADDRS
  3399.              AND ROWNUM = 1;
  3400.         EXCEPTION
  3401.           WHEN NO_DATA_FOUND THEN
  3402.             --получим населенный пункт
  3403.             IMP70_PKG_KONVE.GET_GEOTYPE_CODE_NASP(pnLPU,cr.NASP,nCITY,sERROR_CODE);
  3404.  
  3405.             IF nCITY IS NULL THEN
  3406.               IF sERROR_CODE = 'TMR_GEOGRAFY' THEN
  3407.                 lg(pnLOG_IDENT,'TMR_GEOGRAFY','Найдено несколько населенных пунктов: '||cr.NASP||'(пациент - '||cr.FIO||')');
  3408.               ELSIF sERROR_CODE = 'NDF_GEOGRAFY' THEN
  3409.                 lg(pnLOG_IDENT,'','Не определен населенный пункт: '||cr.NASP||'(пациент - '||cr.FIO||')');
  3410.               END IF;
  3411.             END IF;
  3412.  
  3413.  
  3414.              
  3415.             --Получение района
  3416.             IF cr.KORAI IS NOT NULL THEN
  3417.               nRAION_CODE := GET_RAIONCODE_BY_KODRAI(cr.KORAI);
  3418.              
  3419.               BEGIN
  3420.                 SELECT r.ID
  3421.                   INTO nRAION
  3422.                   FROM D_RAIONS r
  3423.                  WHERE LOWER(r.R_CODE) = LOWER(nRAION_CODE)
  3424.                    AND ROWNUM = 1;
  3425.               EXCEPTION
  3426.                 WHEN NO_DATA_FOUND THEN
  3427.                   nRAION := NULL;
  3428.                   lg(pnLOG_IDENT,'NDF_RAIONS','Не определён район: '||cr.KORAI||'(пациент - '||cr.FIO||')');
  3429.               END;
  3430.             END IF;
  3431.              
  3432.             --получим улицу (текст до первого символа '-' без последних цифр)
  3433.             IF UPPER(cr.ADR) = 'БОМЖ' THEN
  3434.               nSTREET := NULL;
  3435.             ELSE
  3436.               BEGIN
  3437.                 SELECT g.ID
  3438.                   INTO nSTREET
  3439.                   FROM D_GEOGRAFY g
  3440.                        join D_GEOGRAFYTYPES gt
  3441.                          ON gt.ID = g.GEOLOCTYPE
  3442.                         AND gt.AO_TYPE IN (nAO_TYPE_NASP,nAO_TYPE_STREET)
  3443.                  WHERE g.version = nVER_GEOGRAFY
  3444.                    AND UPPER(g.GEONAME) = UPPER(IMP70_PKG_KONVE.GET_STREET_FROM_ADRESS(cr.ADR))
  3445.                    AND g.PID = nCITY
  3446.                    AND ROWNUM = 1;
  3447.               EXCEPTION
  3448.                 WHEN NO_DATA_FOUND THEN
  3449.                   nSTREET := NULL;
  3450.                   lg(pnLOG_IDENT,'NDF_GEOGRAFY','Не определена улица в адресе '||cr.ADR||' для нас пункта '||cr.NASP||' (пациент - '||cr.FIO||')');
  3451.               END;
  3452.             END IF;
  3453.              
  3454.             --получим номер дома из адреса (символы между первым символом '-' и предыдущим пробелом)
  3455.             sHOUSE := IMP70_PKG_KONVE.GET_HOUSE_FROM_ADRESS(cr.ADR);
  3456.  
  3457.             --получим литеру дома, если она есть
  3458.             sHOUSELIT := IMP70_PKG_KONVE.GET_LETTER_FROM_HOUSE(sHOUSE);
  3459.             IF sHOUSELIT IS NOT NULL THEN
  3460.               sHOUSE := REPLACE(sHOUSE,sHOUSELIT,'');
  3461.             END IF;
  3462.              
  3463.             --получим квартиру (цифры после первого символа '-')
  3464.             sFLAT := IMP70_PKG_KONVE.GET_FLAT_FROM_ADRESS(cr.ADR);
  3465.              
  3466.              
  3467.             --непосредственно добавление записи в D_AGENT_ADDRS
  3468.             BEGIN
  3469.               D_PKG_AGENT_ADDRS.ADD(pnD_INSERT_ID  => nAGENT_ADDRS_ID,
  3470.                                     pnLPU          => pnLPU,
  3471.                                     pnPID          => nAGENTS_ID,
  3472.                                     pnSTREET       => nSTREET,
  3473.                                     psHOUSE        => sHOUSE,
  3474.                                     psHOUSELIT     => sHOUSELIT,
  3475.                                     pnBLOCK        => NULL,
  3476.                                     pnFLAT         => sFLAT,
  3477.                                     psFLATLIT      => NULL,
  3478.                                     psADDR_INDEX   => NULL,
  3479.                                     pnIS_MAIN      => 1,
  3480.                                     pnIS_REAL      => 1,
  3481.                                     pnIS_REG       => 1,
  3482.                                     pnIS_TEMPREG   => 0,
  3483.                                     pnIS_JUR       => 0,
  3484.                                     pnIS_POST      => 0,
  3485.                                     pnIS_BIRTH     => 0,
  3486.                                     pnRAION        => nRAION,
  3487.                                     pdBEGIN_DATE   => cr.DATREG,
  3488.                                     pdEND_DATE     => NULL,
  3489.                                     psMANUAL_INPUT => NULL,
  3490.                                     pnIS_CITIZEN   => (CASE WHEN cr.GIT = 'гор' THEN 1 WHEN cr.GIT = 'сел' THEN 0 ELSE NULL END),
  3491.                                     psFLAT         => sFLAT,
  3492.                                     psADDROBJ      => NULL,
  3493.                                     psFIAS_HOUSE   => NULL);
  3494.             EXCEPTION
  3495.               WHEN OTHERS THEN
  3496.                 lg(pnLOG_IDENT,'ADD_AGENTS_ADDRS','Ошибка добавления адреса пациента: '||cr.FIO, SQLERRM);
  3497.             END;
  3498.         END;
  3499.  
  3500.  
  3501.  
  3502.         ----------------------------------------
  3503.         --2.2 блок обработки данных в разделе PERSMEDCARD
  3504.         ----------------------------------------
  3505.         BEGIN
  3506.           SELECT pmc.ID
  3507.             INTO nPERSMEDCARD_ID
  3508.             FROM D_PERSMEDCARD pmc
  3509.            WHERE pmc.LPU = pnLPU
  3510.              AND pmc.AGENT = nAGENTS_ID
  3511.              AND ROWNUM = 1;  
  3512.         EXCEPTION
  3513.           WHEN NO_DATA_FOUND THEN
  3514.             BEGIN
  3515.               D_PKG_PERSMEDCARD.ADD(pnD_INSERT_ID  => nPERSMEDCARD_ID,
  3516.                                     pnLPU          => pnLPU,
  3517.                                     pnCID          => nCAT_PERSMEDCARD,
  3518.                                     pnAGENT        => nAGENTS_ID,
  3519.                                     pnBLOODGROUPE  => NULL,
  3520.                                     pnRHESUS       => NULL,
  3521.                                     psECOLOR       => NULL,
  3522.                                     psCARD_NUMB    => cr.BLIKOD,
  3523.                                     psNOTE         => NULL,
  3524.                                     pnREG_DIVISION => NULL,
  3525.                                     pnPMC_TYPE     => NULL,
  3526.                                     pnIA_PRINTED   => 0,
  3527.                                     pnSMS_AGREE    => 0,
  3528.                                     pnEMAIL_AGREE  => 0,
  3529.                                     pdCREATEDATE   => SYSDATE);
  3530.             EXCEPTION
  3531.               WHEN OTHERS THEN
  3532.                 lg(pnLOG_IDENT,'ADD_PERSMEDCARD','Ошибка добавления карты пациента: '||cr.FIO, SQLERRM);
  3533.             END;
  3534.         END;
  3535.  
  3536.  
  3537.  
  3538.         ----------------------------------------
  3539.         --2.6 блок обработки данных в разделе NR_PATIENTS
  3540.         ----------------------------------------
  3541.         --получим данные для вставки в таблицу
  3542.         WITH N_REGISTR_TYPES AS (SELECT rt.ID
  3543.                                    FROM D_NOS_REGISTR_TYPES rt
  3544.                                   WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  3545.                                     AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  3546.                                     AND ROWNUM = 1)
  3547.         SELECT (SELECT r.ID
  3548.                   FROM D_NOS_REGISTRS r
  3549.                  WHERE r.VERSION  = nVER_NOS_REGISTRS
  3550.                    AND r.REG_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  3551.                    AND EXISTS(SELECT 1
  3552.                                 FROM D_NR_LPUDICT nld
  3553.                                WHERE nld.VERSION = nVER_NR_LPUDICT
  3554.                                  AND nld.PID     = r.ID
  3555.                                  AND nld.lpudict = nLPUDICT_ID)
  3556.                    AND ROWNUM = 1)
  3557.          
  3558.           INTO nNOS_REGISTR_ID
  3559.           FROM dual;
  3560.  
  3561.         --если такой записи ещё нет, то создадим её
  3562.         BEGIN
  3563.           SELECT p.ID
  3564.             INTO nNR_PATIENT_ID
  3565.             FROM D_NR_PATIENTS p
  3566.            WHERE p.AGENT = nAGENTS_ID
  3567.              AND p.VERSION = nVER_NR_PATIENTS
  3568.              AND p.NOS_REGISTR = nNOS_REGISTR_ID
  3569.              AND p.REGISTR_LPU = nLPUDICT_ID
  3570.              AND ROWNUM = 1;
  3571.         EXCEPTION
  3572.           WHEN NO_DATA_FOUND THEN
  3573.             BEGIN
  3574.               D_PKG_NR_PATIENTS.ADD(pnD_INSERT_ID      => nNR_PATIENT_ID,
  3575.                                     pnLPU              => pnLPU,
  3576.                                     pnAGENT            => nAGENTS_ID,
  3577.                                     pnNOS_REGISTR      => nNOS_REGISTR_ID,
  3578.                                     pnREGISTR_LPU      => nLPUDICT_ID,
  3579.                                     psREGISTR_LPU_TEXT => NULL,
  3580.                                     pdREGISTR_DATE     => cr.DATREG,
  3581.                                     pnMKB              => NULL,
  3582.                                     pnNUMB_REG         => NULL,
  3583.                                     pdUPDATE_DATE      => TRUNC(SYSDATE),
  3584.                                     pnFR               => 0,
  3585.                                     psNUMB_REG_GD      => NULL,
  3586.                                     pdREMOVE_DATE      => NULL,
  3587.                                     pnREMOVE_REASON    => NULL,
  3588.                                     pnREMOVE_LPU       => NULL);
  3589.             EXCEPTION
  3590.               WHEN OTHERS THEN
  3591.                 lg(pnLOG_IDENT,'ADD_NR_PATIENTS','Ошибка добавления в ноз. реестр пациента: '||cr.FIO, SQLERRM);
  3592.             END;
  3593.         END;
  3594.        
  3595.  
  3596.  
  3597.  
  3598.         ----------------------------------------
  3599.         --2.3 блок обработки данных в разделе RTUB_CASES
  3600.         ----------------------------------------
  3601.         BEGIN
  3602.           SELECT rc.ID
  3603.             INTO nRTUB_CASES_ID
  3604.             FROM D_RTUB_CASES rc
  3605.            WHERE rc.AGENT = nAGENTS_ID
  3606.              AND rc.VERSION = nVER_RTUB_CASES
  3607.              AND (rc.NR_PATIENT = nNR_PATIENT_ID
  3608.                   OR
  3609.                   rc.NR_PATIENT IS NULL)
  3610.              AND COALESCE(cr.DATB20,TRUNC(SYSDATE)) BETWEEN rc.CREATE_DATE AND COALESCE(rc.CLOSE_DATE,TRUNC(SYSDATE))
  3611.              AND ROWNUM = 1;
  3612.         EXCEPTION
  3613.           WHEN NO_DATA_FOUND THEN
  3614.             BEGIN
  3615.               D_PKG_RTUB_CASES.ADD(pnD_INSERT_ID      => nRTUB_CASES_ID,
  3616.                                    pnLPU              => pnLPU,
  3617.                                    pnAGENT            => nAGENTS_ID,
  3618.                                    pnNR_PATIENT       => nNR_PATIENT_ID,
  3619.                                    pnPAT_GROUP        => NULL,
  3620.                                    pnFROM_DGROUP      => NULL,
  3621.                                    pnLPU_CREATE       => nLPUDICT_ID,
  3622.                                    pdCREATE_DATE      => cr.DATB20,
  3623.                                    pdLAST_CHANGE_DATE => cr.DATKOR,
  3624.                                    pnLAST_CHANGE_EMP  => NULL,
  3625.                                    pdCLOSE_DATE       => NULL,
  3626.                                    pnCLOSE_EMP        => NULL,
  3627.                                    psCLOSE_REASON     => NULL,
  3628.                                    pnLPU_IN_CHARGE    => NULL);
  3629.             EXCEPTION
  3630.               WHEN OTHERS THEN
  3631.                 lg(pnLOG_IDENT,'ADD_RTUB_CASES','Ошибка добавления случая туберкулеза для пациента: '||cr.FIO, SQLERRM);
  3632.             END;
  3633.         END;
  3634.  
  3635.  
  3636.         ----------------------------------------
  3637.         --2.4 блок обработки данных в разделе RTUB_CASE_RSRCH
  3638.         ----------------------------------------
  3639.         IF nRTUB_CASES_ID IS NOT NULL THEN
  3640.           BEGIN
  3641.             SELECT rcr.ID
  3642.               INTO nRTUB_CASE_RSRCH_ID
  3643.               FROM D_RTUB_CASE_RSRCH rcr
  3644.              WHERE rcr.PID = nRTUB_CASES_ID
  3645.                AND rcr.VERSION = nVER_RTUB_CASE_RSRCH
  3646.                AND ROWNUM = 1;
  3647.           EXCEPTION
  3648.             WHEN NO_DATA_FOUND THEN
  3649.              
  3650.               SELECT (SELECT lb.ID
  3651.                         FROM D_LABMED_BIOMATERIAL lb
  3652.                        WHERE lb.VERSION = nVER_LABMED_BIOMATERIAL
  3653.                          AND LOWER(lb.BM_NAME) = 'мокрота'
  3654.                          AND ROWNUM = 1)
  3655.                 INTO nBIOMATERIAL
  3656.                 FROM dual;
  3657.            
  3658.               --создадим записи для двух исследований
  3659.               FOR z IN (SELECT 1 str_num, 1 dm_code, cr.DATMIC1 date_study, cr.REZMIC1 result_study FROM dual
  3660.                          UNION ALL
  3661.                         SELECT 2 str_num, 3 dm_code, cr.DATPOS1 date_study, cr.REZPOS1 result_study FROM dual
  3662.                        )
  3663.               LOOP
  3664.                 nRTUB_CASE_RSRCH_ID      := NULL;
  3665.                 nRTUB_RSRCH_RSLT_BACT_ID := NULL;
  3666.                 nDETECT_METHOD           := NULL;
  3667.                
  3668.                 IF z.DATE_STUDY IS NOT NULL THEN
  3669.                   SELECT (SELECT ddm.ID
  3670.                             FROM D_DTUB_DETECT_METHODS ddm
  3671.                            WHERE ddm.VERSION = nVER_DTUB_DETECT_METHODS
  3672.                              AND ddm.DM_CODE = z.DM_CODE
  3673.                              AND ROWNUM = 1)
  3674.                     INTO nDETECT_METHOD
  3675.                     FROM dual;
  3676.                
  3677.                   BEGIN
  3678.                     D_PKG_RTUB_CASE_RSRCH.ADD(pnD_INSERT_ID   => nRTUB_CASE_RSRCH_ID,
  3679.                                               pnLPU           => pnLPU,
  3680.                                               pnPID           => nRTUB_CASES_ID,
  3681.                                               pnDETECT_METHOD => nDETECT_METHOD,
  3682.                                               pnRSRCH_KIND    => 1,
  3683.                                               pnDIRECT_LPU    => nLPUDICT_ID,
  3684.                                               psLAB_CODE      => TO_CHAR(z.STR_NUM),
  3685.                                               pdCOLLECT_DATE  => z.DATE_STUDY,
  3686.                                               pdFILL_DATE     => z.DATE_STUDY);
  3687.                  
  3688.                     IF nRTUB_CASE_RSRCH_ID IS NOT NULL AND z.RESULT_STUDY IS NOT NULL THEN
  3689.                       ----------------------------------------
  3690.                       --2.5 блок обработки данных в разделе RTUB_RSRCH_RSLT_BACT
  3691.                       ----------------------------------------
  3692.  
  3693.                       --получим результат идентификатор результата исследования
  3694.                       nRSRCH_RESULT := NULL;
  3695.                      
  3696.                       SELECT (SELECT drr.ID
  3697.                                 FROM D_DTUB_RSRCH_RESULTS drr
  3698.                                WHERE drr.VERSION = nVER_DTUB_RSRCH_RESULTS
  3699.                                  AND UPPER(drr.NAME) = UPPER(z.RESULT_STUDY)
  3700.                                  AND ROWNUM = 1)
  3701.                         INTO nRSRCH_RESULT
  3702.                         FROM dual;
  3703.                      
  3704.                       IF nRSRCH_RESULT IS NULL THEN
  3705.                         lg(pnLOG_IDENT,'NDF_DTUB_RSRCH_RESULTS','не определен результат исследования '||z.RESULT_STUDY||' для пациента: '||cr.FIO);
  3706.                       ELSE
  3707.                         BEGIN
  3708.                           D_PKG_RTUB_RSRCH_RSLT_BACT.ADD(pnD_INSERT_ID  => nRTUB_RSRCH_RSLT_BACT_ID,
  3709.                                                          pnLPU          => pnLPU,
  3710.                                                          pnPID          => nRTUB_CASE_RSRCH_ID,
  3711.                                                          pnBIOMATERIAL  => nBIOMATERIAL,
  3712.                                                          pnRSRCH_RESULT => nRSRCH_RESULT,
  3713.                                                          psRESULT_STR   => NULL);
  3714.                         EXCEPTION
  3715.                           WHEN OTHERS THEN
  3716.                             lg(pnLOG_IDENT,'ADD_RTUB_RSRCH_RSLT_BACT','Ошибка добавления случая туберкулеза: Результаты исследования для пациента: '||cr.FIO, SQLERRM);
  3717.                         END;
  3718.                       END IF;
  3719.                     END IF;
  3720.                    
  3721.                   EXCEPTION
  3722.                      WHEN OTHERS THEN
  3723.                        lg(pnLOG_IDENT,'ADD_RTUB_CASE_RSRCH','Ошибка добавления случая туберкулеза: Лабораторные исследования для пациента: '||cr.FIO, SQLERRM);
  3724.                   END;
  3725.                 END IF;
  3726.               END LOOP;
  3727.           END;
  3728.         END IF; -- конец условия nRTUB_CASES_ID is not null раздела 2.4
  3729.  
  3730.  
  3731.       END IF;   -- конец условия if nAGENTS_ID is not null ПОСЛЕ создания D_AGENTS
  3732.     END LOOP;   -- конец цикла по таблице импорта
  3733.   END IF;       -- конец условия if nERROR = 0 or pnERR_IGNORE = 1
  3734.  
  3735.   lg(pnLOG_IDENT,'END_IMP','Завершение импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
  3736.  
  3737.  
  3738. EXCEPTION
  3739.   WHEN OTHERS THEN
  3740.     lg(pnLOG_IDENT,'ERROR_IMP','Ошибка - '||SQLERRM);
  3741.     D_P_EXC('Ошибка процедуры IMP70_P_HPKONVE импорта данных из таблицы IMP70_HPKONVE: Ошибка - '||SQLERRM);
  3742. END IMP70_P_HPKONVE;
  3743. -----------------------------------------------------------------------------------------------------------------------------
  3744.  
  3745. -----------------------------------------------------------------------------------------------------------------------------
  3746. --Процедура для импорта данных из файла GR0KONVE.dbf через таблицу импорта IMP70_GR0KONVE
  3747. PROCEDURE IMP70_P_GR0KONVE
  3748. (
  3749.   pnLPU                                IN  NUMBER,
  3750.   pnLOG_IDENT                          OUT NUMBER,
  3751.   pnERR_IGNORE                         IN  NUMBER DEFAULT 0
  3752. )
  3753. IS
  3754.  
  3755.   nVER_AGENT_ADDRS                                         D_PKG_STD.tREF;     -- идентификатор версии для раздела AGENT_ADDRS
  3756.   nVER_GEOGRAFY                                            D_PKG_STD.tREF;     -- идентификатор версии для раздела GEOGRAFY
  3757.   nVER_NOS_REGISTR_TYPES                                   D_PKG_STD.tREF;     -- идентификатор версии для раздела NOS_REGISTR_TYPES
  3758.   nVER_NOS_REGISTRS                                        D_PKG_STD.tREF;     -- идентификатор версии для раздела NOS_REGISTRS
  3759.   nVER_NR_PATIENTS                                         D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_PATIENTS
  3760.   nVER_RTUB_CASES                                          D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASES
  3761.   nVER_NR_LPUDICT                                          D_PKG_STD.tREF;     -- идентификатор версии для раздела NR_LPUDICT
  3762.   nVER_DTUB_PAT_GROUP                                      D_PKG_STD.tREF;     -- идентификатор версии для раздела DTUB_PAT_GROUP
  3763.   nVER_PATIENTS_DGROUP                                     D_PKG_STD.tREF;     -- идентификатор версии для раздела PATIENTS_DGROUP
  3764.   nVER_RTUB_CASE_DISP                                      D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_DISP
  3765.   nVER_RTUB_CASE_DISP_DATA                                 D_PKG_STD.tREF;     -- идентификатор версии для раздела RTUB_CASE_DISP_DATA
  3766.  
  3767.  
  3768.   nCAT_ROOT                                                D_PKG_STD.tREF;     -- идентификатор корневого каталога для разделов
  3769.   sERROR_CODE                                              D_PKG_STD.tSTR;     -- код ошибки
  3770.   nCAT_AGENTS                                              D_PKG_STD.tREF;     -- идентификатор каталога для раздела AGENTS
  3771.  
  3772.  
  3773.   nLPUDICT_ID                                              D_PKG_STD.tREF;     -- идентификатор записи D_LPUDICT
  3774.   nAGENTS_ID                                               D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENTS
  3775.   nAGENT_ADDRS_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_ADDRS
  3776.   nNOS_REGISTR_ID                                          D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NOS_REGISTR
  3777.   nRTUB_CASES_ID                                           D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASES
  3778.   nNR_PATIENT_ID                                           D_PKG_STD.tREF;     -- идентификатор записи в таблице D_NR_PATIENT
  3779.   nRTUB_CASE_DISP_ID                                       D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_DISP
  3780.   nRTUB_CASE_DISP_DATA_ID                                  D_PKG_STD.tREF;     -- идентификатор записи в таблице D_RTUB_CASE_DISP_DATA
  3781.   nAGENT_REGISTRATION_ID                                   D_PKG_STD.tREF;     -- идентификатор записи в таблице D_AGENT_REGISTRATION
  3782.  
  3783.  
  3784.   nERROR                                                   D_PKG_STD.tREF := 0;-- кол-во ошибок импорта
  3785.   sAGN_CODE                                                D_AGENTS.AGN_CODE%TYPE;
  3786.                                                                                -- код контрагента в таблице D_AGENTS
  3787.   nCITY                                                    D_PKG_STD.tREF;     -- идентификатор населенного пункта
  3788.   nSTREET                                                  D_PKG_STD.tREF;     -- идентификатор улицы
  3789.   sHOUSE                                                   D_PKG_STD.tSTR;     -- номер дома в адресе
  3790.   sHOUSELIT                                                D_PKG_STD.tSTR;     -- литера дома в адресе
  3791.   sFLAT                                                    D_PKG_STD.tSTR;     -- номер квартиры в адресе
  3792.   nRAION                                                   D_PKG_STD.tREF;     -- идентификатор района из адреса
  3793.   nRAION_CODE                                              D_PKG_STD.tSTR;     -- код района
  3794.   sTUBNASP_TMP                                             D_PKG_STD.tSTR;     -- временная переменная для хранения названия нас пункта из файла
  3795.   dAGENT_BIRTHDATE                                         D_AGENTS.BIRTHDATE%TYPE;
  3796.                                                                                -- дата рождения пациента
  3797.   nPAT_GROUP                                               D_PKG_STD.tREF;     -- идентификатор записи D_DTUB_PAT_GROUP
  3798.   nFROM_GROUP                                              D_PKG_STD.tREF;     -- идентификатор записи D_PATIENTS_DGROUP
  3799.   nDGROUP                                                  D_PKG_STD.tREF;     -- идентификатор записи D_PATIENTS_DGROUP
  3800.   nRECOM_TO_DGROUP                                         D_PKG_STD.tREF;     -- идентификатор записи D_PATIENTS_DGROUP
  3801.   nREGISTER_PURPOSE                                        D_PKG_STD.tREF;     -- идентификатор записи D_REGISTER_PURPOSES
  3802.   nLPU_REG                                                 D_PKG_STD.tREF;     -- идентификатор записи D_LPUDICT
  3803.   nLPU_SITE                                                D_PKG_STD.tREF;     -- идентификатор записи D_SITES
  3804.  
  3805.  
  3806.  
  3807.  
  3808. BEGIN
  3809.   D_PKG_IMP_LOG.INIT('IMP70_GR0KONVE', pnLPU, pnLOG_IDENT, 0);
  3810.   lg(pnLOG_IDENT,'START_IMP','Начало импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
  3811.  
  3812.  
  3813.   --блок получения версий для разделов
  3814.   nVER_AGENT_ADDRS            := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_ADDRS');
  3815.   nVER_GEOGRAFY               := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GEOGRAFY');
  3816.   nVER_NOS_REGISTR_TYPES      := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTR_TYPES');
  3817.   nVER_NOS_REGISTRS           := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTRS');
  3818.   nVER_NR_PATIENTS            := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENTS');
  3819.   nVER_RTUB_CASES             := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASES');
  3820.   nVER_NR_LPUDICT             := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_LPUDICT');
  3821.   nVER_DTUB_PAT_GROUP         := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_PAT_GROUP');
  3822.   nVER_PATIENTS_DGROUP        := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'PATIENTS_DGROUP');
  3823.   nVER_RTUB_CASE_DISP         := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP');
  3824.   nVER_RTUB_CASE_DISP_DATA    := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP_DATA');
  3825.  
  3826.  
  3827.  
  3828.   --блок получения каталогов для разделов
  3829.   D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'AGENTS', 'Пациенты Томск Фтиз', nCAT_AGENTS);
  3830.   IF nCAT_AGENTS IS NULL THEN
  3831.     D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'AGENTS',nCAT_ROOT);
  3832.     D_PKG_CATALOGS.ADD(nCAT_AGENTS,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
  3833.   END IF;
  3834.  
  3835.  
  3836.  
  3837.   --по заданному ЛПУ получим LPUDICT
  3838.   BEGIN
  3839.     SELECT l.LPUDICT
  3840.       INTO nLPUDICT_ID
  3841.       FROM D_LPU l
  3842.      WHERE l.id = pnLPU
  3843.        AND ROWNUM = 1;
  3844.   EXCEPTION
  3845.     WHEN NO_DATA_FOUND THEN
  3846.       nERROR := nERROR + 1;
  3847.       lg(pnLOG_IDENT,'NFD_LPUDICT','Не определно заданное ЛПУ: '||pnLPU);
  3848.   END;
  3849.  
  3850.  
  3851.  
  3852.   --Цикл по всем записям таблицы IMP70_GR0KONVE с импортируемыми данными
  3853.   IF nERROR = 0 OR pnERR_IGNORE = 1 THEN
  3854.     FOR cr IN (SELECT *
  3855.                  FROM IMP70_GR0KONVE)
  3856.     LOOP
  3857.       nAGENTS_ID                := NULL;
  3858.       nAGENT_ADDRS_ID           := NULL;
  3859.       nRTUB_CASES_ID            := NULL;
  3860.       nNR_PATIENT_ID            := NULL;
  3861.       nNOS_REGISTR_ID           := NULL;
  3862.       nRTUB_CASE_DISP_ID        := NULL;
  3863.       nRTUB_CASE_DISP_DATA_ID   := NULL;
  3864.       nAGENT_REGISTRATION_ID    := NULL;
  3865.  
  3866.  
  3867.       sAGN_CODE                 := NULL;
  3868.       nCITY                     := NULL;
  3869.       nSTREET                   := NULL;
  3870.       sHOUSE                    := NULL;
  3871.       sHOUSELIT                 := NULL;
  3872.       nRAION                    := NULL;
  3873.       nRAION_CODE               := NULL;
  3874.       dAGENT_BIRTHDATE          := NULL;
  3875.       nPAT_GROUP                := NULL;
  3876.       nFROM_GROUP               := NULL;
  3877.       nRECOM_TO_DGROUP          := NULL;
  3878.       nDGROUP                   := NULL;
  3879.       nREGISTER_PURPOSE         := NULL;
  3880.       nLPU_REG                  := NULL;
  3881.       nLPU_SITE                 := NULL;
  3882.  
  3883.  
  3884.       --проверим нет ли в таблице D_AGENTS такого контрагента
  3885.       GET_AGENT_ID(psFIO        => cr.TUB_FIO,
  3886.                    pdBIRTHDATE  => cr.TUB_DATRO,
  3887.                    psSNILS      => NULL,
  3888.                    pnAGENTS_ID  => nAGENTS_ID,
  3889.                    psERROR_CODE => sERROR_CODE);
  3890.  
  3891.       IF nAGENTS_ID IS NOT NULL THEN
  3892.         dAGENT_BIRTHDATE := cr.TUB_DATRO;
  3893.       ELSE
  3894.         dAGENT_BIRTHDATE := NULL;
  3895.        
  3896.         IF sERROR_CODE = 'TMR_AGENTS' THEN
  3897.           lg(pnLOG_IDENT,'TMR_AGENTS','Найдено несколько пациентов: ФИО - '||cr.TUB_FIO||', Дата рожд.- '||TO_CHAR(cr.TUB_DATRO,'dd.mm.yyyy'));
  3898.           continue;
  3899.         END IF;
  3900.       END IF;
  3901.  
  3902.  
  3903.  
  3904.  
  3905.       --если контрагент не найден, то создадим его
  3906.       IF nAGENTS_ID IS NULL THEN
  3907.         ----------------------------------------
  3908.         --1. блок обработки данных в разделе AGENTS
  3909.         ----------------------------------------
  3910.         sAGN_CODE        := D_PKG_AGENTS.GEN_CODE(pnLPU);
  3911.         dAGENT_BIRTHDATE := cr.TUB_DATRO;
  3912.      
  3913.         BEGIN
  3914.           D_PKG_AGENTS.ADD(pnD_INSERT_ID         => nAGENTS_ID,
  3915.                            pnLPU                 => pnLPU,
  3916.                            pnCID                 => nCAT_AGENTS,
  3917.                            psAGN_CODE            => sAGN_CODE,
  3918.                            psAGN_NAME            => sAGN_CODE||' '||cr.TUB_FIO,
  3919.                            pnAGN_TYPE            => 1,
  3920.                            pnAGN_INN             => NULL,
  3921.                            pnAGN_KPP             => NULL,
  3922.                            psNOTE                => NULL,
  3923.                            psFIRSTNAME           => IMP70_PKG_KONVE.GET_PART_FIO(cr.TUB_FIO,'FIRSTNAME'),
  3924.                            psSURNAME             => IMP70_PKG_KONVE.GET_PART_FIO(cr.TUB_FIO,'SURNAME'),
  3925.                            psLASTNAME            => IMP70_PKG_KONVE.GET_PART_FIO(cr.TUB_FIO,'LASTNAME'),
  3926.                            pdBIRTHDATE           => cr.TUB_DATRO,
  3927.                            pnSEX                 => IMP70_PKG_KONVE.CONVERT_POL_TO_NUMBER(cr.TUB_POL),
  3928.                            pnEDUCATION           => NULL,
  3929.                            pnOKVED               => NULL,
  3930.                            pnIS_EMPLOYER         => 0,
  3931.                            psSNILS               => NULL,
  3932.                            psAGN_OGRN            => NULL,
  3933.                            psAGN_OKPO            => NULL,
  3934.                            pdDEATHDATE           => NULL,
  3935.                            pnIS_UNKNOWN          => NULL,
  3936.                            pnDEATHDOCTYPE        => NULL,
  3937.                            pdDEATHDOCDATE        => NULL,
  3938.                            psDEATHDOCNUM         => NULL,
  3939.                            pnAGN_OKFS            => NULL,
  3940.                            psENP                 => NULL,
  3941.                            psBIRTHPLACE          => NULL,
  3942.                            pnDECLINE_FIO         => NULL,
  3943.                            pnNATION              => NULL,
  3944.                            pnIS_HOME             => 0,
  3945.                            pnGEST_AGE_MOTHER     => NULL,
  3946.                            pnIS_ANONYM           => 0,
  3947.                            psDEATHPLACE          => NULL,
  3948.                            pnFULL_CLASSES        => NULL,
  3949.                            pnACCURACY_DATE_DEATH => NULL,
  3950.                            pnACCURACY_DATE_BIRTH => NULL,
  3951.                            pnIND_ENTERP          => NULL,
  3952.                            psAGN_OGRN_IND        => NULL,
  3953.                            pnCONVICT_AMOUNT      => NULL);
  3954.         EXCEPTION
  3955.           WHEN OTHERS THEN
  3956.             lg(pnLOG_IDENT,'ADD_AGENTS','Ошибка добавления пациента: '||cr.TUB_FIO, SQLERRM);
  3957.         END;
  3958.       END IF;
  3959.  
  3960.  
  3961.  
  3962.       --если контрагент создан успешно или найден в системе, то загрузим остальные данные при их отсутствии
  3963.       IF nAGENTS_ID IS NOT NULL THEN
  3964.         ----------------------------------------
  3965.         --2.1 блок обработки данных в разделе AGENT_ADDRS
  3966.         ----------------------------------------
  3967.         BEGIN
  3968.           SELECT aa.ID
  3969.             INTO nAGENT_ADDRS_ID
  3970.             FROM D_AGENT_ADDRS aa
  3971.            WHERE aa.PID = nAGENTS_ID
  3972.              AND aa.VERSION = nVER_AGENT_ADDRS
  3973.              AND ROWNUM = 1;
  3974.         EXCEPTION
  3975.           WHEN NO_DATA_FOUND THEN
  3976.             --получим населенный пункт
  3977.             IMP70_PKG_KONVE.GET_GEOTYPE_CODE_NASP(pnLPU,cr.TUB_NASP,nCITY,sERROR_CODE);
  3978.  
  3979.             IF nCITY IS NULL THEN
  3980.               IF sERROR_CODE = 'TMR_GEOGRAFY' THEN
  3981.                 lg(pnLOG_IDENT,'TMR_GEOGRAFY','Найдено несколько населенных пунктов: '||cr.TUB_NASP||'(пациент - '||cr.TUB_FIO||')');
  3982.               ELSIF sERROR_CODE = 'NDF_GEOGRAFY' THEN
  3983.                 lg(pnLOG_IDENT,'','Не определен населенный пункт: '||cr.TUB_NASP||'(пациент - '||cr.TUB_FIO||')');
  3984.               END IF;
  3985.             END IF;
  3986.  
  3987.              
  3988.             --Получение района
  3989.             IF cr.TUB_RAI IS NOT NULL THEN
  3990.               nRAION_CODE := GET_RAIONCODE_BY_KODRAI(cr.TUB_RAI);
  3991.              
  3992.               BEGIN
  3993.                 SELECT r.ID
  3994.                   INTO nRAION
  3995.                   FROM D_RAIONS r
  3996.                  WHERE LOWER(r.R_CODE) = LOWER(nRAION_CODE)
  3997.                    AND ROWNUM = 1;
  3998.               EXCEPTION
  3999.                 WHEN NO_DATA_FOUND THEN
  4000.                   nRAION := NULL;
  4001.                   lg(pnLOG_IDENT,'NDF_RAIONS','Не определён район: '||cr.TUB_RAI||'(пациент - '||cr.TUB_FIO||')');
  4002.               END;
  4003.             END IF;
  4004.              
  4005.             --получим улицу (текст до первого символа '-' без последних цифр)
  4006.             IF UPPER(cr.TUB_ADR) = 'БОМЖ' THEN
  4007.               nSTREET := NULL;
  4008.             ELSE
  4009.               BEGIN
  4010.                 SELECT g.ID
  4011.                   INTO nSTREET
  4012.                   FROM D_GEOGRAFY g
  4013.                        join D_GEOGRAFYTYPES gt
  4014.                          ON gt.ID = g.GEOLOCTYPE
  4015.                         AND gt.AO_TYPE IN (nAO_TYPE_NASP,nAO_TYPE_STREET)
  4016.                  WHERE g.version = nVER_GEOGRAFY
  4017.                    AND UPPER(g.GEONAME) = UPPER(IMP70_PKG_KONVE.GET_STREET_FROM_ADRESS(cr.TUB_ADR))
  4018.                    AND g.PID = nCITY
  4019.                    AND ROWNUM = 1;
  4020.               EXCEPTION
  4021.                 WHEN NO_DATA_FOUND THEN
  4022.                   nSTREET := NULL;
  4023.                   lg(pnLOG_IDENT,'NDF_GEOGRAFY','Не определена улица в адресе '||cr.TUB_ADR||' для нас пункта '||cr.TUB_NASP||' (пациент - '||cr.TUB_FIO||')');
  4024.               END;
  4025.             END IF;
  4026.              
  4027.             --получим номер дома из адреса (символы между первым символом '-' и предыдущим пробелом)
  4028.             sHOUSE := IMP70_PKG_KONVE.GET_HOUSE_FROM_ADRESS(cr.TUB_ADR);
  4029.  
  4030.             --получим литеру дома, если она есть
  4031.             sHOUSELIT := IMP70_PKG_KONVE.GET_LETTER_FROM_HOUSE(sHOUSE);
  4032.             IF sHOUSELIT IS NOT NULL THEN
  4033.               sHOUSE := REPLACE(sHOUSE,sHOUSELIT,'');
  4034.             END IF;
  4035.              
  4036.             --получим квартиру (цифры после первого символа '-')
  4037.             sFLAT := IMP70_PKG_KONVE.GET_FLAT_FROM_ADRESS(cr.TUB_ADR);
  4038.              
  4039.              
  4040.             --непосредственно добавление записи в D_AGENT_ADDRS
  4041.             BEGIN
  4042.               D_PKG_AGENT_ADDRS.ADD(pnD_INSERT_ID  => nAGENT_ADDRS_ID,
  4043.                                     pnLPU          => pnLPU,
  4044.                                     pnPID          => nAGENTS_ID,
  4045.                                     pnSTREET       => nSTREET,
  4046.                                     psHOUSE        => sHOUSE,
  4047.                                     psHOUSELIT     => sHOUSELIT,
  4048.                                     pnBLOCK        => NULL,
  4049.                                     pnFLAT         => sFLAT,
  4050.                                     psFLATLIT      => NULL,
  4051.                                     psADDR_INDEX   => NULL,
  4052.                                     pnIS_MAIN      => 1,
  4053.                                     pnIS_REAL      => 1,
  4054.                                     pnIS_REG       => 1,
  4055.                                     pnIS_TEMPREG   => 0,
  4056.                                     pnIS_JUR       => 0,
  4057.                                     pnIS_POST      => 0,
  4058.                                     pnIS_BIRTH     => 0,
  4059.                                     pnRAION        => nRAION,
  4060.                                     pdBEGIN_DATE   => cr.TUB_DATGRU,
  4061.                                     pdEND_DATE     => NULL,
  4062.                                     psMANUAL_INPUT => NULL,
  4063.                                     pnIS_CITIZEN   => (CASE WHEN cr.TUB_GIT = 'гор' THEN 1 WHEN cr.TUB_GIT = 'сел' THEN 0 ELSE NULL END),
  4064.                                     psFLAT         => sFLAT,
  4065.                                     psADDROBJ      => NULL,
  4066.                                     psFIAS_HOUSE   => NULL);
  4067.             EXCEPTION
  4068.               WHEN OTHERS THEN
  4069.                 lg(pnLOG_IDENT,'ADD_AGENTS_ADDRS','Ошибка добавления адреса пациента: '||cr.TUB_FIO, SQLERRM);
  4070.             END;
  4071.         END;
  4072.  
  4073.  
  4074.         ----------------------------------------
  4075.         --2.5 блок обработки данных в разделе NR_PATIENTS
  4076.         ----------------------------------------
  4077.         --получим данные для вставки в таблицу
  4078.         WITH N_REGISTR_TYPES AS (SELECT rt.ID
  4079.                                    FROM D_NOS_REGISTR_TYPES rt
  4080.                                   WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  4081.                                     AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  4082.                                     AND ROWNUM = 1)
  4083.         SELECT (SELECT r.ID
  4084.                   FROM D_NOS_REGISTRS r
  4085.                  WHERE r.VERSION  = nVER_NOS_REGISTRS
  4086.                    AND r.REG_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  4087.                    AND EXISTS(SELECT 1
  4088.                                 FROM D_NR_LPUDICT nld
  4089.                                WHERE nld.VERSION = nVER_NR_LPUDICT
  4090.                                  AND nld.PID     = r.ID
  4091.                                  AND nld.lpudict = nLPUDICT_ID)
  4092.                    AND ROWNUM = 1)
  4093.          
  4094.           INTO nNOS_REGISTR_ID
  4095.           FROM dual;
  4096.  
  4097.         --если такой записи ещё нет, то создадим её
  4098.         BEGIN
  4099.           SELECT p.ID
  4100.             INTO nNR_PATIENT_ID
  4101.             FROM D_NR_PATIENTS p
  4102.            WHERE p.AGENT = nAGENTS_ID
  4103.              AND p.VERSION = nVER_NR_PATIENTS
  4104.              AND p.NOS_REGISTR = nNOS_REGISTR_ID
  4105.              AND p.REGISTR_LPU = nLPUDICT_ID
  4106.              AND ROWNUM = 1;
  4107.         EXCEPTION
  4108.           WHEN NO_DATA_FOUND THEN
  4109.             BEGIN
  4110.               D_PKG_NR_PATIENTS.ADD(pnD_INSERT_ID      => nNR_PATIENT_ID,
  4111.                                     pnLPU              => pnLPU,
  4112.                                     pnAGENT            => nAGENTS_ID,
  4113.                                     pnNOS_REGISTR      => nNOS_REGISTR_ID,
  4114.                                     pnREGISTR_LPU      => nLPUDICT_ID,
  4115.                                     psREGISTR_LPU_TEXT => NULL,
  4116.                                     pdREGISTR_DATE     => cr.TUB_DATGRU,
  4117.                                     pnMKB              => NULL,
  4118.                                     pnNUMB_REG         => NULL,
  4119.                                     pdUPDATE_DATE      => TRUNC(SYSDATE),
  4120.                                     pnFR               => 0,
  4121.                                     psNUMB_REG_GD      => NULL,
  4122.                                     pdREMOVE_DATE      => NULL,
  4123.                                     pnREMOVE_REASON    => NULL,
  4124.                                     pnREMOVE_LPU       => NULL);
  4125.             EXCEPTION
  4126.               WHEN OTHERS THEN
  4127.                 lg(pnLOG_IDENT,'ADD_NR_PATIENTS','Ошибка добавления в ноз. реестр пациента: '||cr.TUB_FIO, SQLERRM);
  4128.             END;
  4129.         END;
  4130.  
  4131.  
  4132.         ----------------------------------------
  4133.         --2.2 блок обработки данных в разделе RTUB_CASES
  4134.         ----------------------------------------
  4135.         BEGIN
  4136.           SELECT rc.ID
  4137.             INTO nRTUB_CASES_ID
  4138.             FROM D_RTUB_CASES rc
  4139.            WHERE rc.AGENT = nAGENTS_ID
  4140.              AND rc.VERSION = nVER_RTUB_CASES
  4141.              AND (rc.NR_PATIENT = nNR_PATIENT_ID
  4142.                   OR
  4143.                   rc.NR_PATIENT IS NULL)
  4144.              AND COALESCE(cr.TUB_DATGRU,TRUNC(SYSDATE)) BETWEEN rc.CREATE_DATE AND COALESCE(rc.CLOSE_DATE,TRUNC(SYSDATE))
  4145.              AND ROWNUM = 1;
  4146.         EXCEPTION
  4147.           WHEN NO_DATA_FOUND THEN
  4148.             --получение данных для вставки в таблицу D_RTUB_CASES
  4149.             WITH N_REGISTR_TYPES AS (SELECT rt.ID
  4150.                                        FROM D_NOS_REGISTR_TYPES rt
  4151.                                       WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  4152.                                         AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  4153.                                         AND ROWNUM = 1),
  4154.                 PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.TUB_DATGRU,dAGENT_BIRTHDATE) >= 18 THEN 1
  4155.                                                 ELSE 2
  4156.                                             END) age
  4157.                                      FROM dual)
  4158.              
  4159.             SELECT (SELECT dpg.ID
  4160.                       FROM D_DTUB_PAT_GROUP dpg
  4161.                      WHERE dpg.VERSION = nVER_DTUB_PAT_GROUP
  4162.                        AND dpg.PG_CODE = (SELECT vdpg.MIS_CODE
  4163.                                             FROM IMP70_V_KONVE_DTUB_PAT_GROUP vdpg
  4164.                                            WHERE UPPER(vdpg.FILE_CODE) = UPPER(cr.TUB_TIPPAC)
  4165.                                              AND ROWNUM = 1)
  4166.                        AND ROWNUM = 1),
  4167.  
  4168.                    (SELECT pdg.ID
  4169.                       FROM D_PATIENTS_DGROUP pdg
  4170.                      WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
  4171.                        AND pdg.PDG_CODE = (SELECT vpg.MIS_CODE
  4172.                                              FROM IMP70_V_KONVE_PAT_DGROUP vpg
  4173.                                             WHERE UPPER(vpg.FILE_CODE) = UPPER(cr.TUB_GRUDU)
  4174.                                               AND ROWNUM = 1)
  4175.                        AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  4176.                        AND pdg.AGE     = (SELECT AGE FROM PAT_DGROUP_AGE)
  4177.                        AND ROWNUM = 1)
  4178.  
  4179.               INTO nPAT_GROUP,
  4180.                    nFROM_GROUP
  4181.               FROM dual;
  4182.  
  4183.  
  4184.             BEGIN
  4185.               D_PKG_RTUB_CASES.ADD(pnD_INSERT_ID      => nRTUB_CASES_ID,
  4186.                                    pnLPU              => pnLPU,
  4187.                                    pnAGENT            => nAGENTS_ID,
  4188.                                    pnNR_PATIENT       => nNR_PATIENT_ID,
  4189.                                    pnPAT_GROUP        => nPAT_GROUP,
  4190.                                    pnFROM_DGROUP      => nFROM_GROUP,
  4191.                                    pnLPU_CREATE       => nLPUDICT_ID,
  4192.                                    pdCREATE_DATE      => cr.TUB_DATGRU,
  4193.                                    pdLAST_CHANGE_DATE => cr.TUB_DATKOR,
  4194.                                    pnLAST_CHANGE_EMP  => NULL,
  4195.                                    pdCLOSE_DATE       => NULL,
  4196.                                    pnCLOSE_EMP        => NULL,
  4197.                                    psCLOSE_REASON     => NULL,
  4198.                                    pnLPU_IN_CHARGE    => NULL);
  4199.             EXCEPTION
  4200.               WHEN OTHERS THEN
  4201.                 lg(pnLOG_IDENT,'ADD_RTUB_CASES','Ошибка добавления случая туберкулеза для пациента: '||cr.TUB_FIO, SQLERRM);
  4202.             END;
  4203.         END;
  4204.  
  4205.  
  4206.         ----------------------------------------
  4207.         --2.6 блок обработки данных в разделе RTUB_CASE_DISP
  4208.         ----------------------------------------
  4209.         IF nRTUB_CASES_ID IS NOT NULL THEN  
  4210.           BEGIN
  4211.             SELECT rcd.ID
  4212.               INTO nRTUB_CASE_DISP_ID
  4213.               FROM D_RTUB_CASE_DISP rcd
  4214.              WHERE rcd.PID = nRTUB_CASES_ID
  4215.                AND rcd.VERSION = nVER_RTUB_CASE_DISP
  4216.                AND rcd.DISP_LPU = nLPUDICT_ID
  4217.                AND COALESCE(cr.TUB_DATGRU,TRUNC(SYSDATE)) BETWEEN rcd.DATE_IN AND COALESCE(rcd.DATE_OUT,TRUNC(SYSDATE))
  4218.                AND ROWNUM = 1;
  4219.           EXCEPTION
  4220.             WHEN NO_DATA_FOUND THEN
  4221.               BEGIN
  4222.                 D_PKG_RTUB_CASE_DISP.ADD(pnD_INSERT_ID       => nRTUB_CASE_DISP_ID,
  4223.                                          pnLPU               => pnLPU,
  4224.                                          pnPID               => nRTUB_CASES_ID,
  4225.                                          pnDISP_LPU          => nLPUDICT_ID,
  4226.                                          pnDISP_EMP          => NULL,
  4227.                                          pdDATE_IN           => cr.TUB_DATGRU,
  4228.                                          pdDATE_OUT          => NULL,
  4229.                                          pnOUT_REASON        => NULL,
  4230.                                          pnCONTROL_CARD      => NULL,
  4231.                                          pdRECOMEND_DATE_OUT => NULL,
  4232.                                          pnRECOMEND_OUT_REAS => NULL);
  4233.               EXCEPTION
  4234.                 WHEN OTHERS THEN
  4235.                   lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP','Ошибка добавления данных учета в ЛПУ случая туберкулеза для пациента: '||cr.TUB_FIO, SQLERRM);
  4236.               END;
  4237.           END;
  4238.         END IF;
  4239.  
  4240.  
  4241.  
  4242.         ----------------------------------------
  4243.         --2.3 блок обработки данных в разделе RTUB_CASE_DISP_DATA
  4244.         ----------------------------------------
  4245.         IF nRTUB_CASE_DISP_ID IS NOT NULL THEN
  4246.           IF cr.TUB_GRUDU IS NOT NULL THEN
  4247.             BEGIN
  4248.               SELECT rcdd.ID
  4249.                 INTO nRTUB_CASE_DISP_DATA_ID
  4250.                 FROM D_RTUB_CASE_DISP_DATA rcdd
  4251.                WHERE rcdd.PID = nRTUB_CASE_DISP_ID
  4252.                  AND rcdd.VERSION = nVER_RTUB_CASE_DISP_DATA
  4253.                  AND COALESCE(cr.TUB_DATGRU,TRUNC(SYSDATE)) BETWEEN rcdd.DATE_IN AND COALESCE(rcdd.DATE_OUT,TRUNC(SYSDATE))
  4254.                  AND ROWNUM = 1;
  4255.             EXCEPTION
  4256.               WHEN NO_DATA_FOUND THEN
  4257.                 --получение данных для вставки в таблицу D_RTUB_CASE_DISP_DATA
  4258.                 WITH N_REGISTR_TYPES AS (SELECT rt.ID
  4259.                                            FROM D_NOS_REGISTR_TYPES rt
  4260.                                           WHERE rt.T_CODE  = nNOS_REG_TYPES_TUB -- ТуберкулезБП
  4261.                                             AND rt.VERSION = nVER_NOS_REGISTR_TYPES
  4262.                                             AND ROWNUM = 1),
  4263.                 PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.TUB_DATGRU,dAGENT_BIRTHDATE) >= 18 THEN 1
  4264.                                                 ELSE 2
  4265.                                             END) age
  4266.                                      FROM dual)
  4267.                  
  4268.                 SELECT (SELECT pdg.ID
  4269.                           FROM D_PATIENTS_DGROUP pdg
  4270.                          WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
  4271.                            AND UPPER(pdg.PDG_CODE) = (SELECT UPPER(vpdg.MIS_CODE)
  4272.                                                         FROM IMP70_V_KONVE_PAT_DGROUP vpdg
  4273.                                                        WHERE vpdg.FILE_CODE = UPPER(cr.TUB_GRUDU)
  4274.                                                          AND ROWNUM = 1)
  4275.                            AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  4276.                            AND pdg.AGE     = (SELECT AGE FROM PAT_DGROUP_AGE)
  4277.                            AND ROWNUM = 1),
  4278.                        
  4279.                        (SELECT pdg.ID
  4280.                           FROM D_PATIENTS_DGROUP pdg
  4281.                          WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
  4282.                            AND UPPER(pdg.PDG_CODE) = (SELECT UPPER(vpdg.MIS_CODE)
  4283.                                                         FROM IMP70_V_KONVE_PAT_DGROUP vpdg
  4284.                                                        WHERE vpdg.FILE_CODE = UPPER(cr.TUB_KUDA)
  4285.                                                          AND ROWNUM = 1)
  4286.                            AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
  4287.                            AND pdg.AGE     = (SELECT AGE FROM PAT_DGROUP_AGE)
  4288.                            AND ROWNUM = 1)
  4289.  
  4290.                   INTO nDGROUP,
  4291.                        nRECOM_TO_DGROUP
  4292.                   FROM dual;
  4293.  
  4294.                 IF nDGROUP IS NULL THEN
  4295.                   lg(pnLOG_IDENT,'NDF_RTUB_CASE_DISP_DATA','Не определена Группа Д-учета TUB_GRUDU='||cr.TUB_GRUDU||' для пациента: '||cr.TUB_FIO);
  4296.                 ELSE
  4297.                   BEGIN
  4298.                     D_PKG_RTUB_CASE_DISP_DATA.ADD(pnD_INSERT_ID     => nRTUB_CASE_DISP_DATA_ID,
  4299.                                                   pnLPU             => pnLPU,
  4300.                                                   pnPID             => nRTUB_CASE_DISP_ID,
  4301.                                                   pnDGROUP          => nDGROUP,
  4302.                                                   pdDATE_IN         => cr.TUB_DATGRU,
  4303.                                                   pdRECOM_DATE_OUT  => cr.TUB_DATKUD,
  4304.                                                   pnRECOM_TO_DGROUP => nRECOM_TO_DGROUP,
  4305.                                                   pdDATE_OUT        => NULL);
  4306.                   EXCEPTION
  4307.                     WHEN OTHERS THEN
  4308.                       lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP_DATA','Ошибка добавления Группы Д-учета для пациента : '||cr.TUB_FIO, SQLERRM);
  4309.                   END;
  4310.                 END IF;
  4311.             END;
  4312.           END IF;
  4313.         END IF;
  4314.  
  4315.  
  4316.       END IF;   -- конец условия if nAGENTS_ID is not null ПОСЛЕ создания D_AGENTS
  4317.     END LOOP;   -- конец цикла по таблице импорта
  4318.   END IF;       -- конец условия if nERROR = 0 or pnERR_IGNORE = 1
  4319.  
  4320.   lg(pnLOG_IDENT,'END_IMP','Завершение импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
  4321.  
  4322.  
  4323. EXCEPTION
  4324.   WHEN OTHERS THEN
  4325.     lg(pnLOG_IDENT,'ERROR_IMP','Ошибка - '||SQLERRM);
  4326.     D_P_EXC('Ошибка процедуры IMP70_P_GR0KONVE импорта данных из таблицы IMP70_GR0KONVE: Ошибка - '||SQLERRM);
  4327. END IMP70_P_GR0KONVE;
  4328. -----------------------------------------------------------------------------------------------------------------------------
  4329.  
  4330. END IMP70_PKG_KONVE;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement