/*
* Автор: Маркелов С.В.
* Дата: 2015-02-10
* Задача:http://192.168.2.17:3000/issues/1311
* Назначение: Изменения типа колонки MEMBER_PHONE таблицы IMP_MEMBERS
* Изменяются объекты:
		alter table IMP_MEMBERS
		package KFM.PKG_IMPORT
		package body KFM.PKG_IMPORT
		package body KFM.PKG_MESS_CFM_1
		package body KFM.PKG_MESS_CFM_2
		package body KFM.PKG_REPORTS
*/

/*
  ****** Инструкции для SQLPlus (обязательно) ******
  Для печати сообщений:
  DBMS_OUTPUT.put_line('<Message>');
*/
whenever sqlerror exit 1;
set serveroutput on;
set echo off;

declare
	filename      varchar2(256) := 'sfm.database-update.2015-02-10.ChangeColumnTypeOfIMP_MEMBERS.sql';
	purpose       varchar2(4000) := 'Изменения типа колонки MEMBER_PHONE таблицы IMP_MEMBERS';
	script_exists number := 0;
begin

	--delete from DB_Update_History where script_name = filename;	commit;
	select count(*)
		into script_exists
		from DB_Update_History
	 where script_name = filename;

	if (script_exists > 0) then
		RAISE_APPLICATION_ERROR(-20001, '"' || filename || '" уже присутствует в базе');
	else
		insert into DB_Update_History
			(script_name, purpose)
		values
			(filename, purpose);
	end if;

exception
	when others then
		rollback;
		raise;
end;

/
/*
****** Begin update script ******
*/
	-- Не транзакционный апдейт
	-- Необходимы свои транзакции, если требуются

	create table imp_members_temp
	as
	select log_id, member_id, member_phone from imp_members;

	update imp_members
	set member_phone = null;
	alter table imp_members modify member_phone varchar2(300);

	update imp_members i
	set member_phone = (select member_phone from imp_members_temp t where t.log_id = i.log_id and t.member_id = i.member_id);

	drop table imp_members_temp;

	commit;

CREATE OR REPLACE PACKAGE KFM."PKG_IMPORT" as

  /*
  Загрузка информации по одному сообщению проходит в порядке:
  1) StartLoadingForm – генерируется идентификатор загрузки (plogid), согласно которому дописываются последующие данные;
  2) SetMessageInfo  - записывается основная информация об операции (единожды, согласно указанному в выходном параметре plogid функции StartLoadingForm). В случае попытки повторной записи генерируется исключение. Дальнейшие операции должны быть прерваны;
  3) SetMessageRefers –
  4) SetMessageMembers – записывается информация по каждому из участников операции (в количестве, указанном в параметре poper_members_count функции SetMessageInfo),
  5) По каждому из юридических лиц-участников функцией SetMessageMemberFounders записывается информация по всем его учредителям (согласно идентификатору участника pmember_id, возвращенному функцией SetMessageMembers);
  6) FinishLoadingForm  - сигнализирует о завершении загрузки данных по операции. В случае успешной проверки данные сохраняются в СДФО для дальнейшего редактирования отправки. В случае ошибки в процессе загрузки, во входной параметр передается код ошибки pInternalError, отличный от 0. При необходимости инициализировать повторную загрузку.
  */

  function FinishLoadingForm(plogid           number,
                             pInternalError   number,
                             IsAccepted       out number,
                             ErrorDescription out varchar2) return number;
  --Завершить загрузку провести предварительный контроль данных  для формирования ОДНОГО сообщения об операциии подлежащей финансвому мониторингу
  --Входные параметры:
  /*   plogid     - number  - Идентификатор  загрузки
       pInternalError - number - Код внешней ошибки (в случае возникновения ошибки, если успешно -  передать 0)
  */
  --Выходные параметры:
  /*   IsAccepted - number  - Показатель прохождения предварительного контроля (1 - пройден успешно, 0 -не пройден)
  ErrorDescription - varchar2(4000 char) - Описание ошибки при прохождении предварительного контроля сообщения */
  --Результат:
  /*       0  - загрузка завершена успешно */

  function StartLoadingForm(pversionid in number,
                            plogid     out number) return number;
  --Начать загрузку данных для формирования ОДНОГО сообщения об операциии подлежащей финансвому мониторингу
  --Входные параметры:
  /*   pversionid - number  - Идентификатор версии (на данный момент равен 1,2 или 3) */
  --Выходные параметры:
  /*   plogid     - number  - Идентификатор  загрузки*/
  --Результат:
  /*       0  - загрузка начата успешно (во все остальные функции передать plogid)
       -8030  - Неверный идентификатор версии
  */

  function PerformControl(plogid            number,
                          perrordescription out varchar2) return number;
  function SetMessageInfo(plogid                 number,
                          pmess_oper_status      number,
                          pmess_reason_code      number,
                          pmess_suspic_code      number,
                          poper_number           varchar2,
                          poper_idview           number,
                          poper_idtype           number,
                          poper_members_count    number,
                          poper_currency_code   number,
                          poper_currency_amount number,
                          poper_tenge_amount     number,
                          poper_reason           varchar2,
                          poper_doc_date         date,
                          poper_doc_number       varchar2,
                          poper_susp_first       number,
                          poper_susp_second      number,
                          poper_susp_third       number,
                          poper_difficulties     varchar2,
                          poper_dopinfo          varchar2,
                          poper_isnotidtyped     number := 0, --15.04.2010
                          poper_trans_date       date := null, --15.04.2010
                          pmess_trans_date       date := null,
                          poper_merch_types      number := null,
                          poper_merch_reginfo    varchar2 := null,
                          poper_refers_count     number := 0) return number;

  --Начать загрузку общих данных об операции для формирования ОДНОГО сообщения об операциии подлежащей финансвому мониторингу
  --Входные параметры:
  /*   plogid                 number              - Идентификатор  загрузки
       pmess_oper_status      number              - Состояние операции
                                                    1  Совершена
                                                    2  Продолжается
                                                    3  Приостановлена
                                                    4  Отказано в проведении операции
       pmess_reason_code      number              - Основание для подачи сообщения
                                                    1  Равна или превышает пороговую сумму
                                                    2  Финансирование терроризма и (или) экстремизма (для версии 1, для версий 2,3 - Подозрительная операция)
                                                    3  Подозрительная операция(для версии 1)

       pmess_suspic_code      number              - Критерий подозрительности (если выбрано основание - подозрительная операция)
       poper_number           varchar2(300)       - Номер операции
       poper_idview           number              - Код вида операции
                                                  1  Получение выигрыша, в том числе в электронной форме, по результатам проведения пари, азартной игры в игорных заведениях, а также лотереи
                                                  2  Покупка, продажа и обмен наличной иностранной валюты через обменные пункты;
                                                  3  Получение денег по чеку или векселю как разовая операция, так и операция, осуществляемая в течение семи последовательных календарных дней
                                                  4  Обмен банкнот одного достоинства на банкноты другого достоинства как разовая операция, так и операция, осуществляемая в течение семи последовательных календарных дней
                                                  5  Снятие с банковского счета или зачисление на банковский счет клиента денег как разовая операция, так и операция, осуществляемая в течение семи последовательных календарных дней
                                                  6  Зачисление или перевод на банковский счет клиента денег, осуществляемые физическим или юридическим лицом, имеющим соответственно регистрацию, место жительства или местонахождение в оффшорной зоне, а равно владеющим счетом в банке, зарегистрированном в оффшорной зоне, либо перевод денег клиентом в пользу указанной категории лиц как разовая операция, так и операция, осуществляемая в течение семи последовательных календарных дней
                                                  7  Переводы денег за границу на счета (во вклады), открытые на анонимного владельца; поступление денег из-за границы со счета (вклада), открытого на анонимного владельца, совершенные как разовая операция, так и операция, осуществляемая в течение семи последовательных календарных дней
                                                  8  Открытие сберегательного счета (вклада) в пользу третьего лица и (или) внесение денег на такой счет как разовая операция, так и операция, осуществляемая в течение семи последовательных календарных дней
                                                  9  Платежи и переводы денег, осуществляемые клиентом в пользу другого лица на безвозмездной основе
                                                  10  Приобретение (продажа), ввоз в Республику Казахстан либо вывоз из Республики Казахстан культурных ценностей
                                                  11  Операции, совершаемые юридическими лицами, с момента государственной регистрации которых прошло менее трех месяцев
                                                  12  Ввоз в Республику Казахстан либо вывоз из Республики Казахстан наличной валюты, за исключением ввоза или вывоза, осуществляемого Национальным Банком Республики Казахстан, банками и Национальным оператором почты
                                                  13  Осуществление страховой выплаты или получение страховой премии
                                                  14  Внесение, перечисление добровольных пенсионных взносов в накопительные пенсионные фонды, а также осуществление пенсионных выплат из накопительных пенсионных фондов за счет добровольных пенсионных взносов
                                                  15  Получение или предоставление имущества по договору финансового лизинга
                                                  16  Сделки по оказанию услуг, в том числе подряда, перевозки, транспортной экспедиции, хранения, комиссии, доверительного управления имуществом
                                                  17  Купля–продажа и иные операции с драгоценными металлами, драгоценными камнями и изделиями из них
                                                  18  Сделки с недвижимым и иным имуществом, подлежащим обязательной государственной регистрации
                                                  19  Сделки с ценными бумагами
       poper_idtype           number              - Код ЕКНП (В соответствии с таблицей кодов назначения платежей (приложение 2 к правилам  применения государственного классификатора Республики Казахстан - единого классификатора назначения платежей от 15.11.1999г.N 388)
       poper_members_count    number              - Количество участников в операции
       poper_currency_code    number              - Код валюты операции ( В соответствии с Государственным классификатором Республики Казахстан 07 ИСО 4217 - 2001 «Коды для обозначения валют и фондов»)
       poper_currency_amount  number              - Сумма операции в валюте ее проведения
       poper_tenge_amount     number              - Сумма операции в тенге
       poper_reason           varchar2(300)       - Основание совершения операции
       poper_doc_date         date                - Дата документа, на основании которого проведена операция
       poper_doc_number       varchar2(300)       - Номер документа, на основании которого проведена операция
       poper_susp_first       number              - Код 1-го признака подозрительности операции (справочник 1008)
                                                  1  1. Совершение сделки, не имеющей очевидного экономического смысла
                                                  2  1.1  Платежи за финансовые и иные услуги, комиссии  от сделки в которой значительно  превышают общеустановленные размеры в данном сегменте рынка
                                                  3  1.2  Снятие или зачисление на  счет   юридического  лица  денежных средств в наличной форме в случаях, когда это не обусловлено  характером  его хозяйственной деятельности
                                                  4  1.3  Осуществление платежей, переводов или зачисление денежных средств на депозит в пользу третьего лица, не имеющего очевидного экономического смысла
                                                  5  1.4  Совершение сделок с ценными бумагами на торгах фондовых бирж и иных организаторов торговли на рынке ценных бумаг, в результате которых не меняется владелец этих ценных бумаг
                                                  6  1.5  Одновременное выставление поручений на покупку и продажу ценных бумаг по ценам, имеющим существенное отклонение от текущих рыночных цен по аналогичным сделкам
                                                  7  1.6  Соглашение двух или нескольких участников торгов или их представителей о покупке (продаже) ценных бумаг по ценам, имеющим существенное отклонение от текущих рыночных цен по  аналогичным сделкам.
                                                  8  1.7  Распространение ложной или недостоверной информации с целью побудить инвесторов продавать или приобретать публично размещаемые и/или публично обращаемые ценные бумаги
                                                  9  1.8  Приобретение имущества и иных материальных ценностей в пользу третьего лица, не имеющего очевидного экономического смысла
                                                  10  1.9  Поступления или платежи за товароматериальные ценности, рыночная стоимость которых неадекватно завышена или занижена
                                                  11  1.10  Платежи или поступления денежных средств за товары и услуги лицам, не соответствующие основному профилю его деятельности и его реальным потребностям
                                                  12  1.11  Не принятие клиентом своевременных мер, предусмотренных условиями договора и требованиями законодательства Республики Казахстан для возврата валютной выручки  от экспорта товаров и (или) авансовых платежей, в случае непоставки товаров по импорту и (или) услуг.
                                                  13  1.12  Размещение   денежных   средств   во  вклад  (на депозит)     с      оформлением      документов на предъявителя
                                                  14  1.13  Перевод денежных  средств  за  границу  на  счет (вклад), открытый на анонимного владельца
                                                  15  1.14  Поступление денежных средств  из-за  границы  со счета    (вклада),   открытого   на   анонимного владельца
                                                  16  1.15  Пренебрежение более выгодными условиями оказания услуг, а также предложение необычно высокой комиссии и (или) комиссии отличающейся от обычной, сложившейся в деловой практике
                                                  17  1.16  Несоответствие сделки  деятельности организации, установленной    уставным    документом  этой организации
                                                  18  1.17  Предоставление    лицом,   беспроцентных займов  другим физическим и (или) юридическим  лицам, а равно получение такого займа
                                                  19  1.18  Получение и/или предоставление   имущества   по договору финансовой аренды (лизинга), по невыгодным, экономически нецелесообразным условиям договора
                                                  20  1.19  Поступления или платежи за услуги, которые не могут быть оказаны плательщиком или получателем средств, в силу объективных причин: отсутствие квалифицированного персонала; машин и оборудования; оборотных средств; материальных запасов и т.п.
                                                  21  1.20  Наличие нестандартных или необычно сложных инструкции по порядку проведения расчетов, отличающихся от обычной деловой практики
                                                  22  2. Совершение действий, направленных на уклонение от процедур финансового мониторинга, предусмотренных Законом.
                                                  23  2.1  Попытка проведения операций по утерянным либо похищенным документам, удостоверяющим личность клиента
                                                  24  2.2  Скупка, купля-продажа драгоценных металлов  и   драгоценных камней, ювелирных изделий,  лома драгоценных металлов, за исключением случаев, когда данная деятельность входить в круг его профессиональной деятельности
                                                  25  2.3  Немотивированный отказ в предоставлении клиентом дополнительных сведений (кроме установленных нормативными правовыми документами), но запрашиваемых в соответствии со сложившейся практикой, в том числе о своем доверителе (в случае, когда клиент выступает в качестве представителя юридического или физического лица), а также излишняя озабоченность клиента вопросами конфиденциальности в отношении проводимой операций
                                                  26  2.4  Настоятельное желание клиента работать самостоятельно только с удаленного терминала
                                                  27  2.5  Приобретение физическим и/или юридическим лицом  ценных  бумаг за наличный расчет
                                                  28  2.6  Внесение физическим     лицом     в     уставный капитал   организации   денежных средств в наличной форме
                                                  29  2.7  Получение физическим лицом наличных денежных  средств  по чеку на предъявителя, выданным нерезидентом
                                                  30  2.8  Заполнение документов на перевод или на получение денежного перевода под диктовку (под общим руководством) третьего лица и (или) лиц, присутствующих при операции
                                                  31  2.9  Проведение операции (сделки) одной из сторон которой выступают физическое и/или юридическое лицо, а равно их учредители (акционеры), имеющие регистрацию, место жительство, в оффшорной зоне, а равно владеющем счетом в банке, зарегистрированном в оффшорной зоне
                                                  32  2.10  Необоснованная поспешность в проведении операции, на которой настаивает клиент
                                                  33  2.11  Дробление платежей, переводов и иных финансовых операций с целью уклонения от обязательных процедур финансового мониторинга
                                                  34  3. Совершение операции, по которой имеются основания полагать, что данная операция направлена на финансирование терроризма и (или) экстремизма
                                                  35  3.1  Операция (сделки) и (или) ряд связанных операции одной из сторон которой прямо либо косвенно, через других лиц выступают лица и (или) организаций, включенные в соответствии данными правоохранительных и судебных органов Республики Казахстан и международных организации, признаваемых в Республике Казахстан в Перечень лиц, связанных с участием в террористической и (или) экстремисткой  деятельности
                                                  36  3.2  Операция (сделки) или ряд связанных операции одной из сторон выступают юридические лица, в состав учредителей (собственников) которых входят лица и/или организации, включенные в соответствии с данными правоохранительных и судебных органов Республики Казахстан и международных организации, признаваемых в Республике Казахстан в Перечень лиц, связанных с участием в террористической и (или) экстремисткой  деятельности
       poper_susp_second      number              - Код 2-го признака подозрительности операции
       poper_susp_third       number              - Код 3-го признака подозрительности операции
       poper_difficulties     varchar2(3000 char)      - Описание возникших затруднений квалификации опреации как подозрительной
       poper_dopinfo          varchar2(3000 char)      - Дополнительная информация по операциии

       poper_isnotidtyped            number        - Флаг - Нельзя установить код ЕКНП (1-да(нельзя), 0 -нет(установлен))
       poper_trans_date              date          - Время завершения\начала\приостановки операции

  */

  --Результат:
  /*       0  - загрузка данных завершена успешно
           -- -8031  - Неверный лог загрузки

  */

  function SetMessageRefers(plogid          number,
                            preferid        out number,
                            prefer_doc_num  varchar2,
                            prefer_doc_date date,
                            prefer_doc_oper varchar2) return number;
  --Собрать данные об
  --Входные параметры:
  /*   plogid                number              - Идентификатор  загрузки

  */

  function SetMessageMembers(plogid number,

                             pmember_kind                   number,
                             pmember_role                   number,
                             pmember_residence              number,
                             pmember_residence_countrycode  number,
                             pmember_type                   number,
                             pmember_foreign                number,
                             pmember_foreign_add            varchar2,
                             pmember_bank_code              varchar2,
                             pmember_bank_city              varchar2,
                             pmember_bank_name              varchar2,
                             pmember_bank_account           varchar2,
                             pmember_bank_address           varchar2,
                             pmember_BANK_OFFSHORE_ADDR     varchar2,
                             pmember_taxcode                varchar2, --25/03/2010 R--
                             pmember_okpo                   varchar2, --25/03/2010 R--
                             pmember_oked                   varchar2,
                             pmember_maincode               varchar2, --25/03/2010 R--
                             pmember_phone                  varchar2,
                             pmember_email                  varchar2,
                             pmember_reg_counrycode         number,
                             pmember_reg_area               varchar2,
                             pmember_reg_region             varchar2,
                             pmember_reg_sity               varchar2,
                             pmember_reg_street             varchar2,
                             pmember_reg_house              varchar2,
                             pmember_reg_office             varchar2,
                             pmember_seat_counrycode        number,
                             pmember_seat_area              varchar2,
                             pmember_seat_region            varchar2,
                             pmember_seat_sity              varchar2,
                             pmember_seat_street            varchar2,
                             pmember_seat_house             varchar2,
                             pmember_seat_office            varchar2,
                             pmember_seat_postcode          number,
                             pmember_comments               varchar2,
                             pmember_ur_name                varchar2,
                             pmember_ur_fisthead_name       varchar2,
                             pmember_ac_secondname          varchar2,
                             pmember_ac_firstname           varchar2,
                             pmember_ac_middlename          varchar2,
                             pmember_ac_doc_typecode        number,
                             pmember_ac_doc_number          varchar2, --25/03/2010 R--
                             pmember_ac_doc_series          varchar2,
                             pmember_ac_doc_whom            varchar2,
                             pmember_ac_doc_date            date,
                             pmember_ac_birth_date          date,
                             pmember_ac_birth_place         varchar2,
                             pmember_ur_founders_count      number,
                             pmember_id                     out number,
                             pmember_reg_postcode           number := 0, --31.12.2009,
                             pMEMBER_ISCLIENT               number := null, --15.04.2010
                             pMEMBER_ISNOTNAMED             number := 0, --15.04.2010
                             pMEMBER_MEMBERCODE             number := null, --15.04.2010
                             pMEMBER_REG_AREA_CODE          number := null, --03.10.2011
                             pMEMBER_REG_REGION_CODE        number := null, --03.10.2011
                             pMEMBER_REG_SITY_CODE          number := null, --03.10.2011
                             pMEMBER_REG_STREET_CODE        number := null, --03.10.2011
                             pMEMBER_REG_HOUSE_CODE         number := null, --03.10.2011
                             pMEMBER_REG_OFFICE_CODE        number := null, --03.10.2011
                             pMEMBER_SEAT_AREA_CODE         number := null, --03.10.2011
                             pMEMBER_SEAT_REGION_CODE       number := null, --03.10.2011
                             pMEMBER_SEAT_SITY_CODE         number := null, --03.10.2011
                             pMEMBER_SEAT_STREET_CODE       number := null, --03.10.2011
                             pMEMBER_SEAT_HOUSE_CODE        number := null, --03.10.2011
                             pMEMBER_SEAT_OFFICE_CODE       number := null, --03.10.2011
                             pMEMBER_UR_OPF_CODE            number := null, --03.10.2011
                             pMEMBER_UR_FISTHEAD_SECONDNAME varchar2 := null, --03.10.2011
                             pMEMBER_UR_FISTHEAD_FIRSTNAME  varchar2 := null, --03.10.2011
                             pMEMBER_UR_FISTHEAD_MIDDLENAME varchar2 := null, --03.10.2011
                             pmoney_trans_sys               number := null) return number;

  --Собрать данные об ОДНОМ из участников операции
  --Входные параметры:
  /*   plogid                number              - Идентификатор  загрузки
       pmember_kind          number              - Вид участника операции (справочник 1006). Для версии 2 - другой справочник
                                                  1  Продавец
                                                  2  Покупатель
                                                  3  Поставщик
                                                  4  Производитель
                                                  5  Участник
                                                  6  Патентообладатель
                                                  7  Абонент
                                                  8  Даритель
                                                  9  Одаряемый
                                                  10  Получатель ренты
                                                  11  Плательщик ренты
                                                  12  Арендодатель
                                                  13  Арендатор
                                                  14  Лизингодатель
                                                  15  Лизингополучатель
                                                  16  Наймодатель
                                                  17  Наниматель
                                                  18  Ссудодатель
                                                  19  Ссудополучатель
                                                  20  Заказчик
                                                  21  Подрядчик
                                                  22  Проектировщик
                                                  23  Изыскатель
                                                  24  Исполнитель
                                                  25  Отправитель
                                                  26  Перевозчик
                                                  27  Получатель
                                                  28  Экспедитор
                                                  29  Займодатель
                                                  30  Заемщик
                                                  31  Кредитор
                                                  32  Финансовый агент
                                                  33  Вкладчик
                                                  34  Клиент
                                                  35  Эмитент
                                                  36  Владелец
                                                  37  Принципал
                                                  38  Залогодатель
                                                  39  Залогодержатель
                                                  40  Хранитель
                                                  41  Поклажедатель
                                                  42  Страховщик
                                                  43  Страхователь
                                                  44  Доверитель
                                                  45  Поверенный
                                                  46  Комитент
                                                  47  Комиссионер
                                                  48  Учредитель управления
                                                  49  Доверительный управляющий
                                                  50  Правообладатель
                                                  51  Пользователь
                                                  52  Иной участник
                                                  53  Учредитель
                                                  54  Организатор лотереи, тотализатора
                                                  55  Участник лотереи, тотализатора
                                                  56  Уполномоченное лицо
                                                  57  Выгодоприобретатель
                                                  58  Застрахованный
                                                  59  Должник
                                                  60  Инициатор
                                                  61  Лицензиар
                                                  62  Лицензиат
                                                  63  Бенефициар
                                                  64  Банк-бенефициар
                                                  65  Банк-посредник
                                                  66  Банк-получатель
       pmember_role                   number     - Участие в операции.  В версии 2 отсутствует
                                                 1  Самостоятельно
                                                 2  От имени
                                                 3  По поручению (с указанием наименования, даты и номера документа, на основании которого вступает по поручению)
       pmember_residence              number     - Резиденство (1-резидент, 0 - не резидент)
       pmember_residence_countrycode  number     - Код страны резидентства (если не резидент)
       pmember_type                   number     - Код типа участника операции
                                                 1  Юридическое лицо
                                                 2  Физическое лицо
                                                 3  Индивидуальный предприниматель
       pmember_foreign                number     - Код показателя иностранного публичного лица и аффилированных с ним лиц
                                                 1  Не является
                                                 2  Иностранное публичное должностное лицо (в случае выбора данного пункта, необходимо заполнить дополнительное поле с подробным указанием)
                                                 3  Аффилированные с иностранным публичным должностным лицом лица (в случае выбора данного пункта, необходимо заполнить дополнительное поле с подробным указанием)
       pmember_foreign_add            varchar2(3000 char)  - Дополнительное поле к коду показателя иностранного публичного лица и аффилированных с ним лиц (в случае выбора )
       pmember_bank_code              varchar2(11 char)    - Код банка-корреспондента участника операции . Для версии 2 - Код банка/филиала  участника
       pmember_bank_name              varchar2(300)   - Наименование банка-корреспондента участника операции . Для версии 2 - Наименование банка/филиала  участника
       pmember_bank_account           varchar2(300)   - Номер счета в банке-корреспонденте участника операции . Для версии 2 - Наименование банка/филиала  участника
       pmember_bank_address           varchar2(1000 char)  - Адрес банка-корреспондента участника операции . Для версии 2 - Адрес банка/филиала  участника

       --25/03/2010 R--
       pmember_taxcode                varchar2(12)      - РНН(только цифры)

       --25/03/2010 R--
       pmember_okpo                   varchar2(12)    - ОКПО(только цифры). В версии 2 отсутствует

       pmember_oked                   varchar2(5 char)     - ОКЭД

       --25/03/2010 R--
       pmember_maincode               varchar2(12)    - ИИН\БИН(только цифры)

       pmember_phone                  varchar2(300)   - Контактный телефон
       pmember_email                  varchar2(300)   - Электронная почта
       pmember_reg_counrycode         number          - Юридический адрес - код страны (В соответствии с государственным классификатором Республики Казахстан ГК РК 06 ИСО 3166.1 - 2001 "Коды для обозначения наименований стран и их административно - территориальных подразделений. Часть 1. Коды стран")
                                                        В версии 2 - в соостветствии со справочником "Классификатор стран мира" ,
                                                        согласно приложению 6 к Правилам декларирования товаров и транспортных средств, утвержденных приказом  Агентства  таможенного контроля РК от 20.05.2003 №2355
       pmember_reg_area               varchar2(300)   - Юридический адрес - область
       pmember_reg_region             varchar2(300)   - Юридический адрес - регион
       pmember_reg_sity               varchar2(300)   - Юридический адрес - населенный пункт
       pmember_reg_street             varchar2(300)   - Юридический адрес - улица/проспект/мр-н
       pmember_reg_house              varchar2(300)   - Юридический адрес - № дома
       pmember_reg_office             varchar2(300)   - Юридический адрес - № офиса (при наличии)
       pmember_reg_postcode           number          - Юридический адрес - почтовый индекс. В версии 2 отсутствует
       pmember_seat_counrycode        number          - Фактический адрес - код страны (В соответствии с государственным классификатором Республики Казахстан ГК РК 06 ИСО 3166.1 - 2001 "Коды для обозначения наименований стран и их административно - территориальных подразделений. Часть 1. Коды стран")
                                                        В версии 2 - в соостветствии со справочником "Классификатор стран мира" ,
                                                        согласно приложению 6 к Правилам декларирования товаров и транспортных средств, утвержденных приказом  Агентства  таможенного контроля РК от 20.05.2003 №2355
       pmember_seat_area              varchar2(300)   - Фактический адрес - область
       pmember_seat_region            varchar2(300)   - Фактический адрес - район
       pmember_seat_sity              varchar2(300)   - Фактический адрес - населенный пункт
       pmember_seat_street            varchar2(300)   - Фактический адрес - улица/проспект/мр-н
       pmember_seat_house             varchar2(300)   - Фактический адрес - № дома
       pmember_seat_office            varchar2(300)   - Фактический адрес - № офиса (при наличии)
       pmember_seat_postcode          number          - Фактический адрес - почтовый индекс. В версии 2 отсутствует
       pmember_comments               varchar2(3000 char)  - Комментарии
       pmember_ur_name                varchar2(1000 char)  - Наименование участника (для юридических лиц). В версии 2 - Наименование\ФИО участника операции
       pmember_ur_fisthead_name       varchar2(300)   - ФИО первого руководителя (для юридических лиц)
       pmember_ac_secondname          varchar2(300)   - Фамилия (для физических лиц и ИП)
       pmember_ac_firstname           varchar2(300)   - Имя (для физических лиц и ИП)
       pmember_ac_middlename          varchar2(300)   - Отчество (для физических лиц и ИП)
       pmember_ac_doc_typecode        number          - Код типа документа, удостоверяющего личность (для физических лиц и ИП)
                                                      1  Удостоверение личности
                                                      2  Паспорт гражданина Республики Казахстан
                                                      3  Свидетельство о рождении (для граждан в возрасте до 16 лет)
                                                      4  Справка о приеме гражданства Республики Казахстан
                                                      5  Временное удостоверение личности*
                                                      6  Свидетельство на возвращение*
                                                      7  Справка об освобождении из мест лишения свободы
                                                      8  Военный билет - в отношении военнослужащих, офицеров и прапорщиков Вооруженных Сил, состоящих на военной службе в частях, дислоцированных на территории Республики Казахстан
                                                      9  Иные документы, признаваемые в соответствии с законодательством Республики Казахстан документами, удостоверяющие личность
                                                      11  Паспорт иностранного государства
                                                      12  Вид на жительство иностранца в Республике Казахстан
                                                      13  Удостоверение лица без гражданства
        --25/03/2010 R--
                                                       В версии 2 -
                                                       1  Удостоверение личности
                                                       2  Паспорт гражданина Республики Казахстан
                                                       3  Паспорт гражданина иностранного государства
                                                       4  Вид на жительство иностранца в Республике Казахстан
                                                       5  Удостоверение лица без гражданства
       pmember_ac_doc_number          varchar2(50 char)    - Номер  документа, удостоверяющего личность  (для физических лиц и ИП). В версии 2 - для всех типов  участников
       pmember_ac_doc_series          varchar2(300)   - Серия  документа, удостоверяющего личность  (для физических лиц и ИП). В версии 2 - для всех типов участников
       pmember_ac_doc_whom            varchar2(300)   - Кем выдан  документ, удостоверяющий личность  (для физических лиц и ИП). В версии 2 - для всех типов участников
       pmember_ac_doc_date            date            - Когда выдан  документ, удостоверяющий личность  (для физических лиц и ИП). В версии 2 - для всех типов участников
       pmember_ac_birth_date          date            - Дата рождения  (для физических лиц и ИП)
       pmember_ac_birth_place         varchar2(1000 char)  - Место рождения  (для физических лиц и ИП)
       pmember_founders_count         number,         - Количество учредителей участника (для юридических лиц, для остальных - 0)
       pmember_isclient               number          - В версии 2 - Является ли клиентом СФМ (1 - Является, 2 - Не является)
       pmember_isnotnamed              number          - В версии 2 - Флаг, нельзя ли установить имя\наименование (1- нельзя установить, 0-можно)
       pmember_membercode              number          - В версии 2 - Участник (справочник 1013):
                                                        1  Плательщик по операции
                                                        2  Получатель по операции
                                                        3  Представитель плательщика
                                                        4  Представитель получателя
                                                        5  Лицо от имени и по поручению
                                                        6  Выгодоприобретатель
      pMEMBER_REG_AREA_CODE             NUMBER        Юридический адрес - код области
      pMEMBER_REG_REGION_CODE           NUMBER        Юридический адрес - код района
      pMEMBER_REG_SITY_CODE             NUMBER        Юридический адрес - код населенного пункта
      pMEMBER_REG_STREET_CODE           NUMBER        Юридический адрес - код улицы
      pMEMBER_REG_HOUSE_CODE           NUMBER        Юридический адрес - код дома
      pMEMBER_REG_OFFICE_CODE           NUMBER        Юридический адрес - код офиса
      pMEMBER_SEAT_AREA_CODE           NUMBER        Фактический адрес - код области
      pMEMBER_SEAT_REGION_CODE         NUMBER        Фактический адрес - код района
      pMEMBER_SEAT_SITY_CODE           NUMBER        Фактический адрес - код населенного пункта
      pMEMBER_SEAT_STREET_CODE         NUMBER        Фактический адрес - код улицы
      pMEMBER_SEAT_HOUSE_CODE           NUMBER        Фактический адрес - код дома
      pMEMBER_SEAT_OFFICE_CODE         NUMBER        Фактический адрес - код офиса
      pMEMBER_UR_OPF_CODE               NUMBER        ОПФ код юридического лица
      pMEMBER_UR_FISTHEAD_SECONDNAME   VARCHAR2(300)        Фамилия первого руководителя (для юридических лиц)
      pMEMBER_UR_FISTHEAD_FIRSTNAME     VARCHAR2(300)        Имя первого руководителя (для юридических лиц)
      pMEMBER_UR_FISTHEAD_MIDDLENAME   VARCHAR2(300)        Отчество первого руководителя (для юридических лиц)
  --Выходные параметры:
       /* pmember_id                    number          - ID участника операции*/
  --Результат:
  /*       0  - загрузка данных завершена успешно
           -- -8031  - Неверный лог загрузки
           -- -8036;--нeверный номер РНН  (заменено на null)     --25/03/2010 R--
           -- -8037;--нeверный номер ОКПО  (заменено на null)    --25/03/2010 R--
           -- -8038;--нeверный номер ИИН/БИН  (заменено на null) --25/03/2010 R--
  */

  function SetMessageMemberFounders(plogid                       number,
                                    pmember_id                   number,
                                    pfounder_type                number := null,
                                    pfounder_maincode            varchar2 := null, --25/03/2010 R--
                                    pfounder_reg_counrycode      number := null,
                                    pfounder_reg_area            varchar2 := null,
                                    pfounder_reg_region          varchar2 := null,
                                    pfounder_reg_sity            varchar2 := null,
                                    pfounder_reg_street          varchar2 := null,
                                    pfounder_reg_house           varchar2 := null,
                                    pfounder_reg_office          varchar2 := null,
                                    pfounder_reg_postcode        number := null,
                                    pfounder_seat_counrycode     number := null,
                                    pfounder_seat_area           varchar2 := null,
                                    pfounder_seat_region         varchar2 := null,
                                    pfounder_seat_sity           varchar2 := null,
                                    pfounder_seat_street         varchar2 := null,
                                    pfounder_seat_house          varchar2 := null,
                                    pfounder_seat_office         varchar2 := null,
                                    pfounder_seat_postcode       number := null,
                                    pfounder_ur_name             varchar2,
                                    pfounder_ur_residence        number,
                                    pfounder_ur_residence_c_code number,
                                    pfounder_ur_reg_whom         varchar2 := null,
                                    pfounder_ur_reg_number       varchar2 := null,
                                    pfounder_ur_reg_date         date := null,
                                    pfounder_ur_taxcode          varchar2 := null, --25/03/2010 R--
                                    pfounder_ac_secondname       varchar2 := null,
                                    pfounder_ac_firstname        varchar2 := null,
                                    pfounder_ac_middlename       varchar2 := null,
                                    pfounder_ac_birth_date       date := null,
                                    pfounder_ac_reg_number       varchar2 := null, --25/03/2010 R--
                                    pfounder_ac_reg_series       varchar2 := null,
                                    pfounder_ac_reg_whom         varchar2 := null,
                                    pfounder_ac_reg_date         date := null,
                                    pfounder_id                  out number,
                                    pfounder_ur_opf_code         in number := null --03.10.2011
                                    ) return number;
  --Собрать данные об ОДНОМ из учредителей участника (идентифицируемого pmember_id)операции
  --Входные параметры:
  /*   plogid                        number        - Идентификатор  загрузки
       pmember_id                    number        - ID участника операции
       pfounder_type                 number        - Код типа учредителя операции. В версии 2 отсутствует.
                                                    1  Юридическое лицо
                                                    2  Физическое лицо
       --03.10.2011 -- Используется как обязательный параметр в версии 3!!!!!!!
                     1  Юридическое лицо
                     2  Физическое лицо
                     3  И.П.

       --25/03/2010 R--
       pfounder_maincode             varchar2(12)    - ИИН/БИН (только цифры)

       pfounder_reg_counrycode       number        - Юридический адрес - код страны (В соответствии с государственным классификатором Республики Казахстан ГК РК 06 ИСО 3166.1 - 2001 "Коды для обозначения наименований стран и их административно - территориальных подразделений. Часть 1. Коды стран")
                                                     В версии 2 отсутствует
       pfounder_reg_area             varchar2(300) - Юридический адрес - область
                                                     В версии 2 отсутствует
       pfounder_reg_region           varchar2(300) - Юридический адрес - регион
                                                     В версии 2 отсутствует
       pfounder_reg_sity             varchar2(300) - Юридический адрес - населенный пункт
                                                     В версии 2 отсутствует
       pfounder_reg_street           varchar2(300) - Юридический адрес - улица/проспект/мр-н
                                                     В версии 2 отсутствует
       pfounder_reg_house            varchar2(300) - Юридический адрес - № дома
                                                     В версии 2 отсутствует
       pfounder_reg_office           varchar2(300) - Юридический адрес - № офиса (при наличии)
                                                     В версии 2 отсутствует
       pfounder_reg_postcode         number        - Юридический адрес - почтовый индекс
                                                     В версии 2 отсутствует
       pfounder_seat_counrycode      number        - Фактический адрес - код страны (В соответствии с государственным классификатором Республики Казахстан ГК РК 06 ИСО 3166.1 - 2001 "Коды для обозначения наименований стран и их административно - территориальных подразделений. Часть 1. Коды стран")
                                                     В версии 2 отсутствует
       pfounder_seat_area            varchar2(300) - Фактический адрес - область
                                                     В версии 2 отсутствует
       pfounder_seat_region          varchar2(300) - Фактический адрес - район
                                                     В версии 2 отсутствует
       pfounder_seat_sity            varchar2(300) - Фактический адрес - населенный пункт
                                                     В версии 2 отсутствует
       pfounder_seat_street          varchar2(300) - Фактический адрес - улица/проспект/мр-н
                                                     В версии 2 отсутствует
       pfounder_seat_house           varchar2(300) - Фактический адрес - № дома
                                                     В версии 2 отсутствует
       pfounder_seat_office          varchar2(300) - Фактический адрес - № офиса (при наличии)
                                                     В версии 2 отсутствует
       pfounder_seat_postcode        number        - Фактический адрес - почтовый индекс
                                                     В версии 2 отсутствует
       pfounder_ur_name              varchar2(1000 char)- Наименование (для юридического лица). В версии 2- Наименование\ФИО учредителя.
        --03.10.2011 !!!!!Используется в версии 3 как "Название Юр.лица !!!!!!!

       pfounder_ur_residence         number        - Резиденство (1-резидент, 0 - не резидент)(для юридического лица)
       pfounder_ur_residence_c_code  number        - Код страны резидентства (если не резидент)(для юридического лица)(В соответствии с государственным классификатором Республики Казахстан ГК РК 06 ИСО 3166.1 - 2001 "Коды для обозначения наименований стран и их административно - территориальных подразделений. Часть 1. Коды стран")

       pfounder_ur_reg_whom          varchar2(300) - Орган регистрации(для юридического лица)
                                                     В версии 2 отсутствует
       pfounder_ur_reg_number        varchar2(300) - Номер государственной регистрации(для юридического лица)
                                                     В версии 2 отсутствует
       pfounder_ur_reg_date          date          - Дата регистрации (для юридического лица)
                                                     В версии 2 отсутствует
        --25/03/2010 R--
       pfounder_ur_taxcode           varchar2(12)  - РНН (для юридического лица)(только цифры)
                                                     В версии 2 отсутствует
       pfounder_ac_secondname        varchar2(300) - Фамилия (для физических лиц и ИП)
                                                     В версии 2 отсутствует.
       --03.10.2011 !!!!! !!!!!!!Используется в версии 3 для физ лиц!!!!!!!

       pfounder_ac_firstname         varchar2(300) - Имя (для физических лиц и ИП)
                                                     В версии 2 отсутствует.
       --03.10.2011 !!!!! !!!!!!!Используется в версии 3 для физ лиц!!!!!!!

       pfounder_ac_middlename        varchar2(300) - Отчество (для физических лиц и ИП)
                                                     В версии 2 отсутствует. Используется в версии 3!!!!!!!
       --03.10.2011 !!!!! !!!!!!!Используется в версии 3 для физ лиц!!!!!!!

       pfounder_ac_birth_date        date          - Дата рождения (для физических лиц и ИП)
                                                     В версии 2 отсутствует
        pfounder_ac_reg_number        varchar2(50 char)  - Номер паспорта  (для физических лиц и ИП)
                                                     В версии 2 отсутствует
       pfounder_ac_reg_series        varchar2(300) - Серия паспорта  (для физических лиц и ИП)
                                                     В версии 2 отсутствует
       pfounder_ac_reg_whom          varchar2(300) - Кем выдан паспорт  (для физических лиц и ИП)
                                                     В версии 2 отсутствует
       pfounder_ac_reg_date          date          - Когда выдан паспорт  (для физических лиц и ИП)
                                                     В версии 2 отсутствует
        --03.10.2011
       pfounder_ur_opf_code          number        - ОПФ код юридического лица. Только для для версии 3!!!!!!!
  --Выходные параметры:
       /*  pfounder_id                   number    -  ID учредителя участника операции*/
  --Результат:
  /*       0  - загрузка данных завершена успешно
           -- -8031  - Неверный лог загрузки
           -- -8036;--нeверный номер РНН  (заменено на null) --25/03/2010 R--
           -- -8038;--нeверный номер ИИН/БИН (заменено на null) --25/03/2010 R--

  */

  function SetMessageMemberAccounts(plogid         number,
                                    pmember_id     number,
                                    paccountnumber varchar2,
                                    pbankname      varchar2,
                                    pbankcode      varchar2,
                                    pbankaddress   varchar2,
                                    paccount_id    out number) return number;

  --Собрать данные об ОДНОМ из корреспондетских счетов участника (идентифицируемого pmember_id)операции
  --  Только для 2 версии
  --Входные параметры:
  /*   plogid                        number        - Идентификатор  загрузки
      pmember_id                    number        - ID участника операции
      paccountnumber                varchar2(300) - Номер счета
      pbankname                     varchar2(300) - Наименование банка
      pbankcode                     varchar2(50 char)  - Код банка
      pbankaddress                  varchar2(1000 char) - Cтрана местонахождения банка
       --25/03/2010 R--
  --Выходные параметры:
      /*  paccount_id       number    -  ID записи о корреспондентских счетах*/
  --Результат:
  /*       0  - загрузка данных завершена успешно
           -- -8031  - Неверный лог загрузки


  */

  function GetEmptyTag(ptype number) return clob;
  function GetAdditionalInfoXML(plogid      number,
                                pmembertype number,
                                pmemberid   number) return clob;
  function GetFounderInfoXML(plogid       number,
                             pfoundertype number,
                             pmemberid    number,
                             pfounderid   number) return clob;
  function LoadMessageInfo(plogid       number,
                           pMessInfoCur out sys_refcursor) return number;
  /*  plogid - лог выполняемой загрузки
  pMessInfoCur - курсор структуры:

    -- MESS_OPER_STATUS      NUMBER          Y                  Состояние операции
    -- MESS_REASON_CODE      NUMBER          Y                  Основание для подачи сообщения (справочник 1011)
    -- MESS_SUSPIC_CODE      NUMBER          Y                  Критерий подозрительности (если выбрано основание - подозрительная операция)
    -- OPER_NUMBER           VARCHAR2(300)   Y                  Номер операции
    -- OPER_IDVIEW           NUMBER          Y                  Код вида операции (справочник 1004)
    -- OPER_IDTYPE           NUMBER          Y                  Код ЕКНП (справочник 1017)
    -- OPER_MEMBERS_COUNT    NUMBER          Y                  Количество участников в операции
    -- OPER_CURRENCY_CODE    NUMBER          Y                  Код валюты операции (справочник 1018)
    -- OPER_CURRENCY_AMOUNT  NUMBER          Y                  Сумма операции в валюте ее проведения
    -- OPER_TENGE_AMOUNT     NUMBER          Y                  Сумма операции в тенге
    -- OPER_REASON           VARCHAR2(300)   Y                  Основание совершения операции
    -- OPER_DOC_DATE         DATE            Y                  Дата документа, на основании которого проведена операция
    -- OPER_DOC_NUMBER       VARCHAR2(300)   Y                  Номер документа, на основании которого проведена операция
    -- OPER_SUSP_FIRST       NUMBER          Y                  Код 1-го признака подозрительности операции (справочник 1008)
    -- OPER_SUSP_SECOND      NUMBER          Y                  Код 2-го признака подозрительности операции (справочник 1008)
    -- OPER_SUSP_THIRD       NUMBER          Y                  Код 3-го признака подозрительности операции (справочник 1008)
    -- OPER_DIFFICULTIES     varchar2(3000 char)  Y                  Описание возникших затруднений квалификации опреации как подозрительной
    -- OPER_DOPINFO          varchar2(3000 char)  Y                  Дополнительная информация по операциии

  */

  function LoadMessageMembers(plogid      number,
                              pMembersCur out sys_refcursor) return number;
  /*  plogid - лог выполняемой загрузки
  pMembersCur - курсор структуры:

   -- MEMBER_ID                     NUMBER                             ID участника операции
   -- MEMBER_KIND                   NUMBER          Y                  Вид участника операции (справочник 1006)
   -- MEMBER_ROLE                   NUMBER          Y                  Участие в операции (справочник 102)
   -- MEMBER_RESIDENCE              NUMBER          Y                  Резиденство (1-резидент, 0 - не резидент)
   -- MEMBER_RESIDENCE_COUNTRYCODE  NUMBER          Y                  Код страны резидентства (если не резидент)
   -- MEMBER_TYPE                   NUMBER          Y                  Код типа участника операции (справочник 10)
   -- MEMBER_FOREIGN                NUMBER          Y                  Код показателя иностранного публичного лица и аффилированных с ним лиц (справочник 1014)
   -- MEMBER_FOREIGN_ADD            varchar2(3000 char)  Y                  Дополнительное поле к коду показателя иностранного публичного лица и аффилированных с ним лиц (в случае выбора )
   -- MEMBER_BANK_CODE              varchar2(11 char)    Y                  Код банка-корреспондента участника операции
   -- MEMBER_BANK_NAME              VARCHAR2(300)   Y                  Наименование банка-корреспондента участника операции
   -- MEMBER_BANK_ACCOUNT           VARCHAR2(300)   Y                  Номер счета в банке-корреспонденте участника операции
   -- MEMBER_BANK_ADDRESS           varchar2(1000 char)  Y                  Адрес банка-корреспондента участника операции
   -- MEMBER_TAXCODE                NUMBER(12)      Y                  РНН
   -- MEMBER_OKPO                   NUMBER(8)       Y                  ОКПО
   -- MEMBER_OKED                   varchar2(5 char)     Y                  ОКЭД
   -- MEMBER_MAINCODE               NUMBER(12)      Y                  ИИН\БИН
   -- MEMBER_PHONE                  VARCHAR2(300)   Y                  Контактный телефон
   -- MEMBER_EMAIL                  VARCHAR2(300)   Y                  Электронная почта
   -- MEMBER_REG_COUNRYCODE         NUMBER          Y                  Юридический адрес - код страны (справочник 1019)
   -- MEMBER_REG_AREA               VARCHAR2(300)   Y                  Юридический адрес - область
   -- MEMBER_REG_REGION             VARCHAR2(300)   Y                  Юридический адрес - регион
   -- MEMBER_REG_SITY               VARCHAR2(300)   Y                  Юридический адрес - населенный пункт
   -- MEMBER_REG_STREET             VARCHAR2(300)   Y                  Юридический адрес - улица/проспект/мр-н
   -- MEMBER_REG_HOUSE              VARCHAR2(300)   Y                  Юридический адрес - № дома
   -- MEMBER_REG_OFFICE             VARCHAR2(300)   Y                  Юридический адрес - № офиса (при наличии)
   -- MEMBER_REG_POSTCODE           NUMBER          Y                  Юридический адрес - почтовый индекс
   -- MEMBER_SEAT_COUNRYCODE        NUMBER          Y                  Фактический адрес - код страны (справочник 1019)
   -- MEMBER_SEAT_AREA              VARCHAR2(300)   Y                  Фактический адрес - область
   -- MEMBER_SEAT_REGION            VARCHAR2(300)   Y                  Фактический адрес - район
   -- MEMBER_SEAT_SITY              VARCHAR2(300)   Y                  Фактический адрес - населенный пункт
   -- MEMBER_SEAT_STREET            VARCHAR2(300)   Y                  Фактический адрес - улица/проспект/мр-н
   -- MEMBER_SEAT_HOUSE             VARCHAR2(300)   Y                  Фактический адрес - № дома
   -- MEMBER_SEAT_OFFICE            VARCHAR2(300)   Y                  Фактический адрес - № офиса (при наличии)
   -- MEMBER_SEAT_POSTCODE          NUMBER          Y                  Фактический адрес - почтовый индекс
   -- MEMBER_COMMENTS               varchar2(3000 char)  Y                  Комментарии
   -- MEMBER_UR_NAME                varchar2(1000 char)  Y                  Наименование участника (для юридических лиц)
   -- MEMBER_UR_FISTHEAD_NAME       VARCHAR2(300)   Y                  ФИО первого руководителя (для юридических лиц)
   -- MEMBER_AC_SECONDNAME          VARCHAR2(300)   Y                  Фамилия (для физических лиц и ИП)
   -- MEMBER_AC_FIRSTNAME           VARCHAR2(300)   Y                  Имя (для физических лиц и ИП)
   -- MEMBER_AC_MIDDLENAME          VARCHAR2(300)   Y                  Отчество (для физических лиц и ИП)
   -- MEMBER_AC_DOC_TYPECODE        NUMBER          Y                  Код типа документа, удостоверяющего личность (справочник 100)  (для физических лиц и ИП)
   -- MEMBER_AC_DOC_NUMBER          NUMBER          Y                  Номер  документа, удостоверяющего личность  (для физических лиц и ИП)
   -- MEMBER_AC_DOC_SERIES          VARCHAR2(300)   Y                  Серия  документа, удостоверяющего личность  (для физических лиц и ИП)
   -- MEMBER_AC_DOC_WHOM            VARCHAR2(300)   Y                  Кем выдан  документ, удостоверяющий личность  (для физических лиц и ИП)
   -- MEMBER_AC_DOC_DATE            DATE            Y                  Когда выдан  документ, удостоверяющий личность  (для физических лиц и ИП)
   -- MEMBER_AC_BIRTH_DATE          DATE            Y                  Дата рождения  (для физических лиц и ИП)
   -- MEMBER_AC_BIRTH_PLACE         varchar2(1000 char)  Y                  Место рождения  (для физических лиц и ИП)

  */

  function LoadMessageFounders(plogid       in number,
                               pmember_id   number,
                               pFoundersCur out sys_refcursor) return number;
  /*  plogid - лог выполняемой загрузки
      pmember_id - id участника

  pFoundersCur - курсор структуры:

  -- FOUNDER_ID                   NUMBER                             ID учредителя участника операции
  -- FOUNDER_TYPE                 NUMBER          Y                  Код типа учредителя операции (справочник 10)
  -- FOUNDER_MAINCODE             NUMBER(12)      Y                  ИИН/БИН
  -- FOUNDER_REG_COUNRYCODE       NUMBER          Y                  Юридический адрес - код страны (справочник 1019)
  -- FOUNDER_REG_AREA             VARCHAR2(300)   Y                  Юридический адрес - область
  -- FOUNDER_REG_REGION           VARCHAR2(300)   Y                  Юридический адрес - регион
  -- FOUNDER_REG_SITY             VARCHAR2(300)   Y                  Юридический адрес - населенный пункт
  -- FOUNDER_REG_STREET           VARCHAR2(300)   Y                  Юридический адрес - улица/проспект/мр-н
  -- FOUNDER_REG_HOUSE            VARCHAR2(300)   Y                  Юридический адрес - № дома
  -- FOUNDER_REG_OFFICE           VARCHAR2(300)   Y                  Юридический адрес - № офиса (при наличии)
  -- FOUNDER_REG_POSTCODE         NUMBER          Y                  Юридический адрес - почтовый индекс
  -- FOUNDER_SEAT_COUNRYCODE      NUMBER          Y                  Фактический адрес - код страны (справочник 1019)
  -- FOUNDER_SEAT_AREA            VARCHAR2(300)   Y                  Фактический адрес - область
  -- FOUNDER_SEAT_REGION          VARCHAR2(300)   Y                  Фактический адрес - район
  -- FOUNDER_SEAT_SITY            VARCHAR2(300)   Y                  Фактический адрес - населенный пункт
  -- FOUNDER_SEAT_STREET          VARCHAR2(300)   Y                  Фактический адрес - улица/проспект/мр-н
  -- FOUNDER_SEAT_HOUSE           VARCHAR2(300)   Y                  Фактический адрес - № дома
  -- FOUNDER_SEAT_OFFICE          VARCHAR2(300)   Y                  Фактический адрес - № офиса (при наличии)
  -- FOUNDER_SEAT_POSTCODE        NUMBER          Y                  Фактический адрес - почтовый индекс
  -- FOUNDER_UR_NAME              varchar2(1000 char)  Y                  Наименование (для юридического лица)
  -- FOUNDER_UR_RESIDENCE         NUMBER          Y                  Резиденство (1-резидент, 0 - не резидент)(для юридического лица)
  -- FOUNDER_UR_RESIDENCE_C_CODE  NUMBER          Y                  Код страны резидентства (если не резидент)(для юридического лица)
  -- FOUNDER_UR_REG_WHOM          VARCHAR2(300)   Y                  Орган регистрации(для юридического лица)
  -- FOUNDER_UR_REG_NUMBER        VARCHAR2(300)   Y                  Номер государственной регистрации(для юридического лица)
  -- FOUNDER_UR_REG_DATE          DATE            Y                  Дата регистрации (для юридического лица)
  -- FOUNDER_UR_TAXCODE           NUMBER(12)      Y                  РНН
  -- FOUNDER_AC_SECONDNAME        VARCHAR2(300)   Y                  Фамилия (для физических лиц и ИП)
  -- FOUNDER_AC_FIRSTNAME         VARCHAR2(300)   Y                  Имя (для физических лиц и ИП)
  -- FOUNDER_AC_MIDDLENAME        VARCHAR2(300)   Y                  Отчество (для физических лиц и ИП)
  -- FOUNDER_AC_BIRTH_DATE        DATE            Y                  Дата рождения (для физических лиц и ИП)
  -- FOUNDER_AC_REG_NUMBER        NUMBER          Y                  Номер паспорта  (для физических лиц и ИП)
  -- FOUNDER_AC_REG_SERIES        VARCHAR2(300)   Y                  Серия паспорта  (для физических лиц и ИП)
  -- FOUNDER_AC_REG_WHOM          VARCHAR2(300)   Y                  Кем выдан паспорт  (для физических лиц и ИП)
  -- FOUNDER_AC_REG_DATE          DATE            Y                  Когда выдан паспорт  (для физических лиц и ИП)


  */
  --
  function refers_2_xml(p_log_id in NUMBER) return xmltype;

  function GetFoundersXML(plogid    number,
                          pmemberid number) return clob;
  function GetMembersXML(plogid number) return CLOB;
  function GetMessInfoXML(plogid number) return CLOB;

  function CreateImportXML(plogid number) return CLOB;
  /*function GetBool(param in number) return varchar2;*/
  function CreateImportXML_2(plogid number) return CLOB;
  function GetAccountsXML_2(plogid    number,
                            pmemberid number) return CLOB;
  function GetFounderInfoXML_2(plogid     number,
                               pmemberid  number,
                               pfounderid number) return clob;
  function GetFoundersXML_2(plogid    number,
                            pmemberid number) return xmltype;
  function GetAdditionalInfoXML_2(plogid      number,
                                  pmembertype number,
                                  pmemberid   number) return clob;
  function GetAdditionalInfoXML_3(plogid      number,
                                  pmembertype number,
                                  pmemberid   number) return clob;
  function GetFounderInfoXML_3(plogid       number,
                               pfoundertype number,
                               pmemberid    number,
                               pfounderid   number) return clob;
  function GetFoundersXML_3(plogid    number,
                            pmemberid number) return CLOB;
  function CreateImportXML_3(plogid number) return CLOB;
  /*function IsRightCodeVal(plogid number,
  pTableName varchar2,
  pFieldName varchar2,
  pCodeType number,

  pException out varchar2) return number;*/

end PKG_Import;
/

CREATE OR REPLACE PACKAGE BODY KFM."PKG_IMPORT" as

  function PerformControl(plogid            number,
                          perrordescription out varchar2) return number is
    result        number default 0;
    vcount        number;
    vcount_refer  number default 0;
    vcount_memb   number default 0;
    vcount_found  number default 0;
    vcounter_memb number default 1;
    pExc          varchar2(3000 char);
    pversion      number;

  begin
    --1 - проверка количества участников
    select count(*)
    into vcount
    from imp_messinfo
    where log_id = plogid;
    if vcount = 0 then
      perrordescription := 'Ошибочные данные, либо не внесена информация об операции и\или основаниях подачи сообщения';
      result            := -8032;
    end if;

    select count(*)
    into vcount
    from imp_refer im
    where im.log_id = plogid;
    select oper_refers_count
    into vcount_refer
    from imp_messinfo
    where log_id = plogid;
    if vcount <> vcount_refer then
      perrordescription := 'Число ссылок на документы не соответствует их количеству';
      result            := -8032;
    end if;

    select count(*)
    into vcount
    from imp_members im
    where im.log_id = plogid;
    select oper_members_count
    into vcount_memb
    from imp_messinfo
    where log_id = plogid;
    if vcount <> vcount_memb then
      perrordescription := 'Число участников не соответствует их количеству';
      result            := -8032;
    end if;
    loop
      exit when vcounter_memb > vcount_memb;
      select count(*)
      into vcount
      from imp_found imf
      where imf.log_id = plogid
      and imf.member_id = vcounter_memb;
      select MEMBER_UR_FOUNDERS_COUNT
      into vcount_found
      from imp_members
      where log_id = plogid
      and member_id = vcounter_memb;

      if vcount <> vcount_found then
        perrordescription := 'Число уредителей участника не соответствует их количеству';
        result            := -8032;
        exit;
      end if;
      vcounter_memb := vcounter_memb + 1;
    end loop;
    select version
    into pversion
    from imp_audit
    where logid = plogid;

    for prec in ( /*select tablename,tablefield,analytictype
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              from analytictypes_depend
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              where version=pversion and tablename is not null*/
                 select c.analytictype,
                         t.tablename,
                         t.tablefield
                 from analytictypes_column_depend t
                 join analytictypes_vers_depend c
                 on (t.datacode = c.datacode and t.version = c.version)
                 where t.version = pversion
                 and t.stepid = 1) loop
      begin

        if pkg_common.IsRightCodeVal(plogid, prec.tablename, prec.tablefield, prec.analytictype, pExc) = -1 then
          perrordescription := perrordescription || pExc;
          result            := -8032;
        end if;
      exception
        when others then
          null;

      end;
    end loop;

    return result;
  exception
    when others then
      null;

      --3 - проверка вводимых данных по  типам участников
      --4 - проерка вводимых данных по типам учредителей

      return result;
  end;

  --Завершить загрузку провести предварительный контроль данных  для формирования ОДНОГО сообщения об операциии подлежащей финансвому мониторингу
  --Входные параметры:
  /*   plogid     - number  - Идентификатор  загрузки*/
  --Выходные параметры:
  /*   IsAccepted - number  - Показатель прохождения предварительного контроля (1 - пройден успешно, 0 -не пройден)
  ErrorDescription - varchar2(4000 char) - Описание ошибки при прохождении предварительного контроля сообщения */
  --Результат:
  /*       0  - загрузка завершена успешно */

  function FinishLoadingForm(plogid           number,
                             pInternalError   number,
                             IsAccepted       out number,
                             ErrorDescription out varchar2) return number is
    result      number default 0;
    errorresult clob;
    pXml        clob;
    pXmlcheck   Clob;
    --pElectr number default 0;
    pmessid  number default 0;
    vcount   number default 0;
    pversion number;
    pragma autonomous_transaction;
  begin
    select count(*)
    into vcount
    from imp_audit
    where logid = plogid;
    if vcount = 0 then
      return - 8031;
    end if;

    result := 0;--PerformControl(plogid, errorresult);
    if result <> 0 then
      update imp_audit
      set pimportfinish    = sysdate,
          isaccepted       = 0,
          errordescription = substr(errorresult, 1, 4000)
      where logid = plogid;

      ErrorDescription := substr(errorresult, 1, 4000);
      IsAccepted       := 0;
    else
      begin
        select version
        into pversion
        from imp_audit
        where logid = plogid;
        case pversion
          when 1 then
            pXml := CreateImportXML(plogid);
          when 2 then
            pXml := CreateImportXML_2(plogid);
          when 3 then
            pXml := CreateImportXML_3(plogid);
        end case;
        update imp_audit
        set pimportfinish = sysdate,
            isaccepted    = 1
        where logid = plogid;

        IsAccepted := 1;
      exception
        when others then
          update imp_audit
          set pimportfinish    = sysdate,
              isaccepted       = 0,
              errordescription = 'Ошибка при формировании XML'
          where logid = plogid;
      end;
      result := pkg_messages_cfm.Save_Message(pXml, pmessid, pXmlcheck);
      update imp_audit
      set messid          = pmessid,
          ploading_finish = sysdate
      where logid = plogid;
      if result <> 0 then
        null;
      end if;
    end if;
    commit;
    return result;
  end;

  --Начать загрузку данных для формирования ОДНОГО сообщения об операциии подлежащей финансвому мониторингу
  --Входные параметры:
  /*   pversionid - number  - Идентификатор версии (на данный момент равен 1) */
  --Выходные параметры:
  /*   plogid     - number  - Идентификатор  загрузки*/
  --Результат:
  /*       0  - загрузка начата успешно (во все остальные функции передать plogid)
       -8030  - Неверный идентификатор версии
       -8031  - Неверный лог загрузки
       -8032  - загрузка не произведена, т.к. промежуточный контроль прошел неудачно
  */
  function StartLoadingForm(pversionid in number,
                            plogid     out number) return number is
    result number default 0;

    pragma autonomous_transaction;
  begin
    if pversionid not in (1, 2, 3) then
      result := -8030;
    else
      --добавить проверку на удачное завершение
      insert into imp_audit
        (pimportstart,
         version)
      values
        (sysdate,
         pversionid)
      returning logid into plogid;
      commit;
    end if;
    return result;
  end;

  function SetMessageInfo(plogid                 number,
                          pmess_oper_status      number,
                          pmess_reason_code      number,
                          pmess_suspic_code      number,
                          poper_number           varchar2,
                          poper_idview           number,
                          poper_idtype           number,
                          poper_members_count    number,
                          poper_currency_code   number,
                          poper_currency_amount number,
                          poper_tenge_amount     number,
                          poper_reason           varchar2,
                          poper_doc_date         date,
                          poper_doc_number       varchar2,
                          poper_susp_first       number,
                          poper_susp_second      number,
                          poper_susp_third       number,
                          poper_difficulties     varchar2,
                          poper_dopinfo          varchar2,
                          poper_isnotidtyped     number := 0,
                          poper_trans_date       date := null,
                          pmess_trans_date       date := null,
                          poper_merch_types      number := null,
                          poper_merch_reginfo    varchar2 := null,
                          poper_refers_count     number := 0) return number is
    result number default 0;

    pversion number;
    pragma autonomous_transaction;
  begin
    begin
      select version
      into pversion
      from imp_audit
      where logid = plogid;
    exception
      when others then
        commit;
        return - 8031;
    end;
    insert into imp_messinfo
      (log_id,
       mess_oper_status,
       mess_reason_code,
       mess_suspic_code,
       oper_number,
       oper_idview,
       oper_idtype,
       oper_members_count,
       oper_currency_code,
       oper_currency_amount,
       oper_tenge_amount,
       oper_reason,
       oper_doc_date,
       oper_doc_number,
       oper_susp_first,
       oper_susp_second,
       oper_susp_third,
       oper_difficulties,
       oper_dopinfo,
       oper_isnotidtyped,
       oper_trans_date,
       mess_trans_date,
       oper_merch_types,
       oper_merch_reginfo,
       oper_refers_count)
    values
      (plogid,
       pmess_oper_status,
       pmess_reason_code,
       pmess_suspic_code,
       poper_number,
       poper_idview,
       poper_idtype,
       poper_members_count,
       poper_currency_code,
       poper_currency_amount,
       poper_tenge_amount,
       poper_reason,
       poper_doc_date,
       poper_doc_number,
       poper_susp_first,
       poper_susp_second,
       poper_susp_third,
       poper_difficulties,
       poper_dopinfo,
       poper_isnotidtyped,
       poper_trans_date,
       pmess_trans_date,
       poper_merch_types,
       poper_merch_reginfo,
       poper_refers_count);
    commit;
    return result;

    --exception when others then null;
    -- -8031  - Неверный лог загрузки
    --Добавить поле readyforimport - когда число участников будет равно их количеству (в том числе и учредителей участника)

  end;

  function SetMessageRefers(plogid          number,
                            preferid        out number,
                            prefer_doc_num  varchar2,
                            prefer_doc_date date,
                            prefer_doc_oper varchar2) return number is
    result number default 0;
    vcount number default 0;
    pragma autonomous_transaction;
  begin
    select count(*)
    into vcount
    from imp_audit
    where logid = plogid;
    if vcount = 0 then
      commit;
      return - 8031;
    end if;
    --25/03/2010 R--

    select nvl(max(im.referid), 0) + 1
    into preferid
    from imp_refer im
    where im.log_id = plogid;

    insert into imp_refer
      (log_id,
       referid,
       refer_doc_num,
       refer_doc_date,
       refer_doc_oper)
    values
      (plogid,
       preferid,
       prefer_doc_num,
       prefer_doc_date,
       prefer_doc_oper)
    returning referid into preferid;
    commit;
    return result;
  end;

  function SetMessageMembers(plogid                         number,
                             pmember_kind                   number,
                             pmember_role                   number,
                             pmember_residence              number,
                             pmember_residence_countrycode  number,
                             pmember_type                   number,
                             pmember_foreign                number,
                             pmember_foreign_add            varchar2,
                             pmember_bank_code              varchar2,
                             pmember_bank_city              varchar2,
                             pmember_bank_name              varchar2,
                             pmember_bank_account           varchar2,
                             pmember_bank_address           varchar2,
                             pmember_BANK_OFFSHORE_ADDR     varchar2,
                             pmember_taxcode                varchar2, --25/03/2010 R--
                             pmember_okpo                   varchar2, --25/03/2010 R--
                             pmember_oked                   varchar2,
                             pmember_maincode               varchar2, --25/03/2010 R--
                             pmember_phone                  varchar2,
                             pmember_email                  varchar2,
                             pmember_reg_counrycode         number,
                             pmember_reg_area               varchar2,
                             pmember_reg_region             varchar2,
                             pmember_reg_sity               varchar2,
                             pmember_reg_street             varchar2,
                             pmember_reg_house              varchar2,
                             pmember_reg_office             varchar2,
                             pmember_seat_counrycode        number,
                             pmember_seat_area              varchar2,
                             pmember_seat_region            varchar2,
                             pmember_seat_sity              varchar2,
                             pmember_seat_street            varchar2,
                             pmember_seat_house             varchar2,
                             pmember_seat_office            varchar2,
                             pmember_seat_postcode          number,
                             pmember_comments               varchar2,
                             pmember_ur_name                varchar2,
                             pmember_ur_fisthead_name       varchar2,
                             pmember_ac_secondname          varchar2,
                             pmember_ac_firstname           varchar2,
                             pmember_ac_middlename          varchar2,
                             pmember_ac_doc_typecode        number,
                             pmember_ac_doc_number          varchar2, --25/03/2010 R--
                             pmember_ac_doc_series          varchar2,
                             pmember_ac_doc_whom            varchar2,
                             pmember_ac_doc_date            date,
                             pmember_ac_birth_date          date,
                             pmember_ac_birth_place         varchar2,
                             pmember_ur_founders_count      number,
                             pmember_id                     out number,
                             pmember_reg_postcode           number := 0,
                             pMEMBER_ISCLIENT               number := null,
                             pMEMBER_ISNOTNAMED             number := 0,
                             pMEMBER_MEMBERCODE             number := null,
                             pMEMBER_REG_AREA_CODE          number := null, --03.10.2011
                             pMEMBER_REG_REGION_CODE        number := null, --03.10.2011
                             pMEMBER_REG_SITY_CODE          number := null, --03.10.2011
                             pMEMBER_REG_STREET_CODE        number := null, --03.10.2011
                             pMEMBER_REG_HOUSE_CODE         number := null, --03.10.2011
                             pMEMBER_REG_OFFICE_CODE        number := null, --03.10.2011
                             pMEMBER_SEAT_AREA_CODE         number := null, --03.10.2011
                             pMEMBER_SEAT_REGION_CODE       number := null, --03.10.2011
                             pMEMBER_SEAT_SITY_CODE         number := null, --03.10.2011
                             pMEMBER_SEAT_STREET_CODE       number := null, --03.10.2011
                             pMEMBER_SEAT_HOUSE_CODE        number := null, --03.10.2011
                             pMEMBER_SEAT_OFFICE_CODE       number := null, --03.10.2011
                             pMEMBER_UR_OPF_CODE            number := null, --03.10.2011
                             pMEMBER_UR_FISTHEAD_SECONDNAME varchar2 := null, --03.10.2011
                             pMEMBER_UR_FISTHEAD_FIRSTNAME  varchar2 := null, --03.10.2011
                             pMEMBER_UR_FISTHEAD_MIDDLENAME varchar2 := null, --03.10.2011
                             pmoney_trans_sys               number := null) return number is
    result            number default 0;
    vcount            number default 0;
    tempnumber        number;
    pmember_taxcode_  varchar2(12);
    pmember_okpo_     varchar2(12);
    pmember_maincode_ varchar2(12);
    pragma autonomous_transaction;
  begin
    select count(*)
    into vcount
    from imp_audit
    where logid = plogid;
    if vcount = 0 then
      commit;
      return - 8031;
    end if;
    --25/03/2010 R--
    begin
      select to_number(pmember_taxcode)
      into tempnumber
      from dual;
      pmember_taxcode_ := pmember_taxcode;
    exception
      when others then
        pmember_taxcode_ := null;
        result           := -8036; --нeверный номер РНН
    end;
    begin
      select to_number(pmember_okpo)
      into tempnumber
      from dual;
      pmember_okpo_ := pmember_okpo;
    exception
      when others then
        pmember_okpo_ := null;
        result        := -8037; --нeверный номер ОКПО
    end;
    begin
      select to_number(pmember_maincode)
      into tempnumber
      from dual;
      pmember_maincode_ := pmember_maincode;
    exception
      when others then
        pmember_maincode_ := null;
        result            := -8038; --нeверный номер ИИН/БИН
    end;
    --25/03/2010 R--

    select nvl(max(im.member_id), 0) + 1
    into pmember_id
    from imp_members im
    where im.log_id = plogid;

    insert into imp_members
      (log_id,
       member_id,
       member_kind,
       member_role,
       member_residence,
       member_residence_countrycode,
       member_type,
       member_foreign,
       member_foreign_add,
       member_bank_code,
       member_bank_city,
       member_bank_name,
       member_bank_account,
       member_bank_address,
       MEMBER_BANK_OFFSHORE_ADDR,
       member_taxcode,
       member_okpo,
       member_oked,
       member_maincode,
       member_phone,
       member_email,
       member_reg_counrycode,
       member_reg_area,
       member_reg_region,
       member_reg_sity,
       member_reg_street,
       member_reg_house,
       member_reg_office,
       member_reg_postcode,
       member_seat_counrycode,
       member_seat_area,
       member_seat_region,
       member_seat_sity,
       member_seat_street,
       member_seat_house,
       member_seat_office,
       member_seat_postcode,
       member_comments,
       member_ur_name,
       member_ur_fisthead_name,
       member_ac_secondname,
       member_ac_firstname,
       member_ac_middlename,
       member_ac_doc_typecode,
       member_ac_doc_number,
       member_ac_doc_series,
       member_ac_doc_whom,
       member_ac_doc_date,
       member_ac_birth_date,
       member_ac_birth_place,
       member_isclient,
       member_isnotnamed,
       member_membercode,
       member_ur_founders_count,
       member_reg_area_code,
       member_reg_region_code,
       member_reg_sity_code,
       member_reg_street_code,
       member_reg_house_code,
       member_reg_office_code,
       member_seat_area_code,
       member_seat_region_code,
       member_seat_sity_code,
       member_seat_street_code,
       member_seat_house_code,
       member_seat_office_code,
       member_ur_opf_code,
       member_ur_fisthead_secondname,
       member_ur_fisthead_firstname,
       member_ur_fisthead_middlename,
       money_trans_sys)
    values
      (plogid,
       pmember_id,
       pmember_kind,
       pmember_role,
       pmember_residence,
       pmember_residence_countrycode,
       pmember_type,
       pmember_foreign,
       pmember_foreign_add,
       pmember_bank_code,
       pmember_bank_city,
       pmember_bank_name,
       pmember_bank_account,
       pmember_bank_address,
       pmember_BANK_OFFSHORE_ADDR,
       pmember_taxcode_,
       pmember_okpo_,
       pmember_oked,
       pmember_maincode_,
       pmember_phone,
       pmember_email,
       pmember_reg_counrycode,
       pmember_reg_area,
       pmember_reg_region,
       pmember_reg_sity,
       pmember_reg_street,
       pmember_reg_house,
       pmember_reg_office,
       pmember_reg_postcode,
       pmember_seat_counrycode,
       pmember_seat_area,
       pmember_seat_region,
       pmember_seat_sity,
       pmember_seat_street,
       pmember_seat_house,
       pmember_seat_office,
       pmember_seat_postcode,
       pmember_comments,
       pmember_ur_name,
       pmember_ur_fisthead_name,
       pmember_ac_secondname,
       pmember_ac_firstname,
       pmember_ac_middlename,
       pmember_ac_doc_typecode,
       pmember_ac_doc_number,
       pmember_ac_doc_series,
       pmember_ac_doc_whom,
       pmember_ac_doc_date,
       pmember_ac_birth_date,
       pmember_ac_birth_place,
       pmember_isclient,
       pmember_isnotnamed,
       pmember_membercode,
       pmember_ur_founders_count,
       pmember_reg_area_code,
       pmember_reg_region_code,
       pmember_reg_sity_code,
       pmember_reg_street_code,
       pmember_reg_house_code,
       pmember_reg_office_code,
       pmember_seat_area_code,
       pmember_seat_region_code,
       pmember_seat_sity_code,
       pmember_seat_street_code,
       pmember_seat_house_code,
       pmember_seat_office_code,
       pmember_ur_opf_code,
       pmember_ur_fisthead_secondname,
       pmember_ur_fisthead_firstname,
       pmember_ur_fisthead_middlename,
       pmoney_trans_sys)
    returning member_id into pmember_id;
    commit;
    return result;
  end;

  function SetMessageMemberFounders(plogid                       number,
                                    pmember_id                   number,
                                    pfounder_type                number := null,
                                    pfounder_maincode            varchar2 := null, --25/03/2010 R--
                                    pfounder_reg_counrycode      number := null,
                                    pfounder_reg_area            varchar2 := null,
                                    pfounder_reg_region          varchar2 := null,
                                    pfounder_reg_sity            varchar2 := null,
                                    pfounder_reg_street          varchar2 := null,
                                    pfounder_reg_house           varchar2 := null,
                                    pfounder_reg_office          varchar2 := null,
                                    pfounder_reg_postcode        number := null,
                                    pfounder_seat_counrycode     number := null,
                                    pfounder_seat_area           varchar2 := null,
                                    pfounder_seat_region         varchar2 := null,
                                    pfounder_seat_sity           varchar2 := null,
                                    pfounder_seat_street         varchar2 := null,
                                    pfounder_seat_house          varchar2 := null,
                                    pfounder_seat_office         varchar2 := null,
                                    pfounder_seat_postcode       number := null,
                                    pfounder_ur_name             varchar2,
                                    pfounder_ur_residence        number,
                                    pfounder_ur_residence_c_code number,
                                    pfounder_ur_reg_whom         varchar2 := null,
                                    pfounder_ur_reg_number       varchar2 := null,
                                    pfounder_ur_reg_date         date := null,
                                    pfounder_ur_taxcode          varchar2 := null, --25/03/2010 R--
                                    pfounder_ac_secondname       varchar2 := null,
                                    pfounder_ac_firstname        varchar2 := null,
                                    pfounder_ac_middlename       varchar2 := null,
                                    pfounder_ac_birth_date       date := null,
                                    pfounder_ac_reg_number       varchar2 := null, --25/03/2010 R--
                                    pfounder_ac_reg_series       varchar2 := null,
                                    pfounder_ac_reg_whom         varchar2 := null,
                                    pfounder_ac_reg_date         date := null,
                                    pfounder_id                  out number,
                                    pfounder_ur_opf_code         in number := null --03.10.2011
                                    ) return number is
    result               number default 0;
    vcount               number default 0;
    pfounder_maincode_   varchar2(12);
    pfounder_ur_taxcode_ varchar2(12);
    tempnumber           number;
    pragma autonomous_transaction;
  begin
    select count(*)
    into vcount
    from imp_audit
    where logid = plogid;
    if vcount = 0 then
      commit;
      return - 8031;
    end if;
    --25/03/2010 R--
    begin
      select to_number(pfounder_maincode)
      into tempnumber
      from dual;
      pfounder_maincode_ := pfounder_maincode;
    exception
      when others then
        pfounder_maincode_ := null;
        result             := -8038; --нeкорректный номер ИНН\БИН
    end;
    begin
      select to_number(pfounder_ur_taxcode)
      into tempnumber
      from dual;
      pfounder_ur_taxcode_ := pfounder_ur_taxcode;
    exception
      when others then
        pfounder_ur_taxcode_ := null;
        result               := -8036; --нeкорректный номер РНН
    end;
    --25/03/2010 R--
    select nvl(max(ifnd.founder_id), 0) + 1
    into pfounder_id
    from imp_found ifnd
    where ifnd.log_id = plogid
    and ifnd.member_id = pmember_id;

    insert into imp_found
      (log_id,
       member_id,
       founder_id,
       founder_type,
       founder_maincode,
       founder_reg_counrycode,
       founder_reg_area,
       founder_reg_region,
       founder_reg_sity,
       founder_reg_street,
       founder_reg_house,
       founder_reg_office,
       founder_reg_postcode,
       founder_seat_counrycode,
       founder_seat_area,
       founder_seat_region,
       founder_seat_sity,
       founder_seat_street,
       founder_seat_house,
       founder_seat_office,
       founder_seat_postcode,
       founder_ur_name,
       founder_ur_residence,
       founder_ur_residence_c_code,
       founder_ur_reg_whom,
       founder_ur_reg_number,
       founder_ur_reg_date,
       founder_ur_taxcode,
       founder_ac_secondname,
       founder_ac_firstname,
       founder_ac_middlename,
       founder_ac_birth_date,
       founder_ac_reg_number,
       founder_ac_reg_series,
       founder_ac_reg_whom,
       founder_ac_reg_date,
       founder_ur_opf_code)
    values
      (plogid,
       pmember_id,
       pfounder_id,
       pfounder_type,
       pfounder_maincode_,
       pfounder_reg_counrycode,
       pfounder_reg_area,
       pfounder_reg_region,
       pfounder_reg_sity,
       pfounder_reg_street,
       pfounder_reg_house,
       pfounder_reg_office,
       pfounder_reg_postcode,
       pfounder_seat_counrycode,
       pfounder_seat_area,
       pfounder_seat_region,
       pfounder_seat_sity,
       pfounder_seat_street,
       pfounder_seat_house,
       pfounder_seat_office,
       pfounder_seat_postcode,
       pfounder_ur_name,
       pfounder_ur_residence,
       pfounder_ur_residence_c_code,
       pfounder_ur_reg_whom,
       pfounder_ur_reg_number,
       pfounder_ur_reg_date,
       pfounder_ur_taxcode_,
       pfounder_ac_secondname,
       pfounder_ac_firstname,
       pfounder_ac_middlename,
       pfounder_ac_birth_date,
       pfounder_ac_reg_number,
       pfounder_ac_reg_series,
       pfounder_ac_reg_whom,
       pfounder_ac_reg_date,
       pfounder_ur_opf_code)
    returning founder_id into pfounder_id;
    commit;
    return result;
  end;

  function SetMessageMemberAccounts(plogid         number,
                                    pmember_id     number,
                                    paccountnumber varchar2,
                                    pbankname      varchar2,
                                    pbankcode      varchar2,
                                    pbankaddress   varchar2,
                                    paccount_id    out number) return number is
    result number default 0;
    vcount number default 0;
    pragma autonomous_transaction;
  begin
    select count(*)
    into vcount
    from imp_audit
    where logid = plogid;
    if vcount = 0 then
      commit;
      return - 8031;
    end if;
    select nvl(max(ifnd.accountid), 0) + 1
    into paccount_id
    from imp_accounts ifnd
    where ifnd.log_id = plogid
    and ifnd.memberid = pmember_id;
    insert into imp_accounts
      (log_id,
       memberid,
       accountid,
       accountnumber,
       bankname,
       bankcode,
       bankaddress)
    values
      (plogid,
       pmember_id,
       paccount_id,
       paccountnumber,
       pbankname,
       pbankcode,
       pbankaddress);
    commit;
    return result;
  end;

  function LoadMessageInfo(plogid       number,
                           pMessInfoCur out sys_refcursor) return number is
    result number default 0;
  begin
    open pMessInfoCur for
      select mess_oper_status,
             mess_reason_code,
             mess_suspic_code,
             oper_number,
             oper_idview,
             oper_idtype,
             oper_members_count,
             oper_currency_code,
             oper_currency_amount,
             oper_tenge_amount,
             oper_reason,
             oper_doc_date,
             oper_doc_number,
             oper_susp_first,
             oper_susp_second,
             oper_susp_third,
             oper_difficulties,
             oper_dopinfo,
             oper_merch_types,
             oper_merch_reginfo,
             oper_refers_count
      from imp_messinfo
      where log_id = plogid;
    return result;
  end;
  function LoadMessageMembers(plogid      number,
                              pMembersCur out sys_refcursor) return number is
    result number default 0;
  begin
    open pMembersCur for
      select member_id,
             member_kind,
             member_role,
             member_residence,
             member_residence_countrycode,
             member_type,
             member_foreign,
             member_foreign_add,
             member_bank_code,
             member_bank_city,
             member_bank_name,
             member_bank_account,
             member_bank_address,
             MEMBER_BANK_OFFSHORE_ADDR,
             member_taxcode,
             member_okpo,
             member_oked,
             member_maincode,
             member_phone,
             member_email,
             member_reg_counrycode,
             member_reg_area,
             member_reg_region,
             member_reg_sity,
             member_reg_street,
             member_reg_house,
             member_reg_office,
             member_reg_postcode,
             member_seat_counrycode,
             member_seat_area,
             member_seat_region,
             member_seat_sity,
             member_seat_street,
             member_seat_house,
             member_seat_office,
             member_seat_postcode,
             member_comments,
             member_ur_name,
             member_ur_fisthead_name,
             member_ac_secondname,
             member_ac_firstname,
             member_ac_middlename,
             member_ac_doc_typecode,
             member_ac_doc_number,
             member_ac_doc_series,
             member_ac_doc_whom,
             member_ac_doc_date,
             member_ac_birth_date,
             member_ac_birth_place,
             money_trans_sys
      from imp_members
      where log_id = plogid;

    return result;
  end;

  function LoadMessageFounders(plogid       in number,
                               pmember_id   number,
                               pFoundersCur out sys_refcursor) return number is
    result number default 0;
  begin
    open pFoundersCur for
      select founder_id,
             founder_type,
             founder_maincode,
             founder_reg_counrycode,
             founder_reg_area,
             founder_reg_region,
             founder_reg_sity,
             founder_reg_street,
             founder_reg_house,
             founder_reg_office,
             founder_reg_postcode,
             founder_seat_counrycode,
             founder_seat_area,
             founder_seat_region,
             founder_seat_sity,
             founder_seat_street,
             founder_seat_house,
             founder_seat_office,
             founder_seat_postcode,
             founder_ur_name,
             founder_ur_residence,
             founder_ur_residence_c_code,
             founder_ur_reg_whom,
             founder_ur_reg_number,
             founder_ur_reg_date,
             founder_ur_taxcode,
             founder_ac_secondname,
             founder_ac_firstname,
             founder_ac_middlename,
             founder_ac_birth_date,
             founder_ac_reg_number,
             founder_ac_reg_series,
             founder_ac_reg_whom,
             founder_ac_reg_date,
             FOUNDER_UR_OPF_CODE    -- roma 13.08.2013
      from imp_found
      where log_id = plogid
      and member_id = pmember_id;

    return result;
  end;

  function CompleteLoading(plogid  number,
                           pmessid number) return number is
    result number default 0;
  begin
    insert into imp_audit
      (logid,
       messid,
       ploading_finish)
    values
      (plogid,
       pmessid,
       sysdate);
    return result;
  end;
  /*
  function GetReadyForLoading(pstartdate date, pfinishdate date); */

  function GetFoundersXML(plogid    number,
                          pmemberid number) return CLOB is
    lRes xmltype;
  begin
    SELECT XMLElement("FoundersList", NULL)
    INTO lRes
    from dual;

    SELECT XMLElement("FoundersList", XMLAgg(XMLtype(GetFounderInfoXml(plogid, imf.founder_type, imf.member_id, imf.founder_id))))
    INTO lRes
    from imp_found imf
    where imf.log_id = plogid
    and imf.member_id = pmemberid
    order by imf.founder_id;

    return lRes.getclobval();
  exception
    when no_data_found then
      return lRes.getclobval();
  end;

  function GetEmptyTag(ptype number) return clob is
    lRes xmltype;
  begin
    if ptype = 2 then
      --физик
      select XMLElement("AdditionalInformationAc",
                        XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                        XMLElement("URAddress",
                                   XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil")),
                                   XMLElement("Area", null),
                                   XMLElement("District", null),
                                   XMLElement("Town", null),
                                   XMLElement("Street", null),
                                   XMLElement("HomeNumber", null),
                                   XMLElement("OfficeNumber", null),
                                   XMLElement("PostalCode", null),
                                   XMLElement("AddressNotStruct", null)

                                   ),
                        XMLElement("ACAddress",
                                   XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil")),
                                   XMLElement("Area", null),
                                   XMLElement("District", null),
                                   XMLElement("Town", null),
                                   XMLElement("Street", null),
                                   XMLElement("HomeNumber", null),
                                   XMLElement("OfficeNumber", null),
                                   XMLElement("PostalCode", null),
                                   XMLElement("AddressNotStruct", null)),
                        XMLElement("FirstName", null),
                        XMLElement("SecondName", null),
                        XMLElement("MiddleName", null),
                        XMLElement("PlaceBirdth", null),
                        XMLElement("DateBirdth", XMLATTRIBUTES('true' as "xsi:nil")),
                        XMLElement("DocumentIdentity", XMLATTRIBUTES('true' as "xsi:nil")),
                        XMLElement("SeriesDocIdentity", null),
                        XMLElement("NumberDocIdentity", null),
                        XMLElement("IssuedDocument", null),
                        XMLElement("DateIssuance", XMLATTRIBUTES('true' as "xsi:nil"))

                        )
      into lRes
      from dual;

    elsif ptype = 3 then
      --ИП
      select XMLElement("AdditionalInformationIp",
                        XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                        XMLElement("URAddress",
                                   XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil")),
                                   XMLElement("Area", null),
                                   XMLElement("District", null),
                                   XMLElement("Town", null),
                                   XMLElement("Street", null),
                                   XMLElement("HomeNumber", null),
                                   XMLElement("OfficeNumber", null),
                                   XMLElement("PostalCode", null),
                                   XMLElement("AddressNotStruct", null)

                                   ),
                        XMLElement("ACAddress",
                                   XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil")),
                                   XMLElement("Area", null),
                                   XMLElement("District", null),
                                   XMLElement("Town", null),
                                   XMLElement("Street", null),
                                   XMLElement("HomeNumber", null),
                                   XMLElement("OfficeNumber", null),
                                   XMLElement("PostalCode", null),
                                   XMLElement("AddressNotStruct", null)),
                        XMLElement("FirstName", null),
                        XMLElement("SecondName", null),
                        XMLElement("MiddleName", null),
                        XMLElement("PlaceBirdth", null),
                        XMLElement("DateBirdth", XMLATTRIBUTES('true' as "xsi:nil")),
                        XMLElement("DocumentIdentity", XMLATTRIBUTES('true' as "xsi:nil")),
                        XMLElement("SeriesDocIdentity", null),
                        XMLElement("NumberDocIdentity", null),
                        XMLElement("IssuedDocument", null),
                        XMLElement("DateIssuance", XMLATTRIBUTES('true' as "xsi:nil"))

                        )
      into lRes
      from dual;
    elsif ptype = 1 then
      --юр
      select XMLElement("AdditionalInformationUr",
                        XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                        XMLElement("URAddress",
                                   XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil")),
                                   XMLElement("Area", null),
                                   XMLElement("District", null),
                                   XMLElement("Town", null),
                                   XMLElement("Street", null),
                                   XMLElement("HomeNumber", null),
                                   XMLElement("OfficeNumber", null),
                                   XMLElement("PostalCode", null),
                                   XMLElement("AddressNotStruct", null)),
                        XMLElement("ACAddress",
                                   XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil")),
                                   XMLElement("Area", null),
                                   XMLElement("District", null),
                                   XMLElement("Town", null),
                                   XMLElement("Street", null),
                                   XMLElement("HomeNumber", null),
                                   XMLElement("OfficeNumber", null),
                                   XMLElement("PostalCode", null),
                                   XMLElement("AddressNotStruct", null)),
                        XMLElement("FullName", null),
                        XMLElement("FirstHead", null))

      into lRes
      from dual;
    elsif ptype = 4 then
      -- учредитель  - юрик
      select XMLElement("founderUR",
                        XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                        XMLElement("URAddress",
                                   XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil")),
                                   XMLElement("Area", null),
                                   XMLElement("District", null),
                                   XMLElement("Town", null),
                                   XMLElement("Street", null),
                                   XMLElement("HomeNumber", null),
                                   XMLElement("OfficeNumber", null),
                                   XMLElement("PostalCode", null)),
                        XMLElement("ACAddress",
                                   XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil")),
                                   XMLElement("Area", null),
                                   XMLElement("District", null),
                                   XMLElement("Town", null),
                                   XMLElement("Street", null),
                                   XMLElement("HomeNumber", null),
                                   XMLElement("OfficeNumber", null),
                                   XMLElement("PostalCode", null)

                                   ),
                        XMLElement("FounderName", null),
                        XMLElement("Residence", 'false'),
                        XMLElement("ResidenceSity", XMLATTRIBUTES('true' as "xsi:nil")),
                        XMLElement("Authority", null),
                        XMLElement("RegistrationDate", XMLATTRIBUTES('true' as "xsi:nil")),
                        XMLElement("RegistrationNumber", null),
                        XMLElement("BIN", null),
                        XMLElement("RNN", null))

      into lRes
      from dual;
      null;
    elsif ptype = 5 then
      -- учредитель - физик
      select XMLElement("FounderAC",
                        XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                        XMLElement("URAddress",
                                   XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil")),
                                   XMLElement("Area", null),
                                   XMLElement("District", null),
                                   XMLElement("Town", null),
                                   XMLElement("Street", null),
                                   XMLElement("HomeNumber", null),
                                   XMLElement("OfficeNumber", null),
                                   XMLElement("PostalCode", null)

                                   ),
                        XMLElement("ACAddress",
                                   XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil")),
                                   XMLElement("Area", null),
                                   XMLElement("District", null),
                                   XMLElement("Town", null),
                                   XMLElement("Street", null),
                                   XMLElement("HomeNumber", null),
                                   XMLElement("OfficeNumber", null),
                                   XMLElement("PostalCode", null)

                                   ),
                        XMLElement("FirstName", null),
                        XMLElement("SecondName", null),
                        XMLElement("MiddleName", null),
                        XMLElement("DateBirdth", XMLATTRIBUTES('true' as "xsi:nil")),
                        XMLElement("PassportSeries", null),
                        XMLElement("PassportNumber", null),
                        XMLElement("IssuedDocument", null),
                        XMLElement("DateIssuance", XMLATTRIBUTES('true' as "xsi:nil")),
                        XMLElement("IIN", null))

      INTO lRes
      from dual;
    end if;

    return lRes.getclobval();
  end;
  function GetFounderInfoXML(plogid       number,
                             pfoundertype number,
                             pmemberid    number,
                             pfounderid   number) return clob is
    lRes xmltype;
  begin
    SELECT XMLElement("Founder", NULL)
    INTO lRes
    from dual;

    case pfoundertype
      when 1 then
        select XMLElement("Founder",
                          XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                          XMLElement("PersonType", decode(imf.founder_type, 1, 2, 2, 1)),
                          xmltype(GetEmptyTag(5)),
                          XMLElement("founderUR",
                                     XMLElement("URAddress",
                                                nvl2(imf.founder_reg_counrycode, XMLElement("Country", imf.founder_reg_counrycode), XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil"))),
                                                XMLElement("Area", imf.founder_reg_area),
                                                XMLElement("District", imf.founder_reg_region),
                                                XMLElement("Town", imf.founder_reg_sity),
                                                XMLElement("Street", imf.founder_reg_street),
                                                XMLElement("HomeNumber", imf.founder_reg_house),
                                                XMLElement("OfficeNumber", imf.founder_reg_office),
                                                XMLElement("PostalCode", imf.founder_reg_postcode)

                                                ),
                                     XMLElement("ACAddress",
                                                nvl2(imf.founder_seat_counrycode, XMLElement("Country", imf.founder_seat_counrycode), XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil"))),
                                                XMLElement("Area", imf.founder_seat_area),
                                                XMLElement("District", imf.founder_seat_region),
                                                XMLElement("Town", imf.founder_seat_sity),
                                                XMLElement("Street", imf.founder_seat_street),
                                                XMLElement("HomeNumber", imf.founder_seat_house),
                                                XMLElement("OfficeNumber", imf.founder_seat_office),
                                                XMLElement("PostalCode", imf.founder_seat_postcode)

                                                ),
                                     XMLElement("FounderName", imf.founder_ur_name),
                                     nvl2(imf.founder_ur_residence, XMLElement("Residence", decode(imf.founder_ur_residence, 0, 'false', 1, 'true')), XMLElement("Residence", XMLATTRIBUTES('true' as "xsi:nil"))),
                                     nvl2(imf.founder_ur_residence_c_code, XMLElement("ResidenceSity", imf.founder_ur_residence_c_code), XMLElement("ResidenceSity", XMLATTRIBUTES('true' as "xsi:nil"))),
                                     XMLElement("Authority", imf.founder_ur_reg_whom),
                                     nvl2(imf.founder_ur_reg_date, XMLElement("RegistrationDate", to_char(imf.founder_ur_reg_date, 'yyyy-mm-dd')), XMLElement("RegistrationDate", XMLATTRIBUTES('true' as "xsi:nil"))),
                                     XMLElement("RegistrationNumber", imf.founder_ur_reg_number),
                                     XMLElement("BIN", imf.founder_maincode),
                                     XMLElement("RNN", imf.founder_ur_taxcode)

                                     ))
        into lRes
        from imp_found imf
        where imf.log_id = plogid
        and imf.member_id = pmemberid
        and imf.founder_id = pfounderid;
      when 2 then
        select XMLElement("Founder",
                          XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                          XMLElement("PersonType", decode(imf.founder_type, 1, 2, 2, 1)),

                          XMLElement("FounderAC",
                                     XMLElement("URAddress",
                                                nvl2(imf.founder_reg_counrycode, XMLElement("Country", imf.founder_reg_counrycode), XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil"))),
                                                XMLElement("Area", imf.founder_reg_area),
                                                XMLElement("District", imf.founder_reg_region),
                                                XMLElement("Town", imf.founder_reg_sity),
                                                XMLElement("Street", imf.founder_reg_street),
                                                XMLElement("HomeNumber", imf.founder_reg_house),
                                                XMLElement("OfficeNumber", imf.founder_reg_office),
                                                XMLElement("PostalCode", imf.founder_reg_postcode)

                                                ),
                                     XMLElement("ACAddress",
                                                nvl2(imf.founder_seat_counrycode, XMLElement("Country", imf.founder_seat_counrycode), XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil"))),
                                                XMLElement("Area", imf.founder_seat_area),
                                                XMLElement("District", imf.founder_seat_region),
                                                XMLElement("Town", imf.founder_seat_sity),
                                                XMLElement("Street", imf.founder_seat_street),
                                                XMLElement("HomeNumber", imf.founder_seat_house),
                                                XMLElement("OfficeNumber", imf.founder_seat_office),
                                                XMLElement("PostalCode", imf.founder_seat_postcode)

                                                ),
                                     XMLElement("FirstName", imf.founder_ac_secondname),
                                     XMLElement("SecondName", imf.founder_ac_firstname),
                                     XMLElement("MiddleName", imf.founder_ac_middlename),
                                     nvl2(imf.founder_ac_birth_date, XMLElement("DateBirdth", to_char(imf.founder_ac_birth_date, 'yyyy-mm-dd')), XMLElement("DateBirdth", XMLATTRIBUTES('true' as "xsi:nil"))),
                                     XMLElement("PassportSeries", imf.founder_ac_reg_series),
                                     XMLElement("PassportNumber", imf.founder_ac_reg_number),
                                     XMLElement("IssuedDocument", imf.founder_ac_reg_whom),
                                     nvl2(imf.founder_ac_reg_date, XMLElement("DateIssuance", to_char(imf.founder_ac_reg_date, 'yyyy-mm-dd')), XMLElement("DateIssuance", XMLATTRIBUTES('true' as "xsi:nil"))),
                                     XMLElement("IIN", imf.founder_maincode)),
                          xmltype(GetEmptyTag(4)))

        into lRes
        from imp_found imf
        where imf.log_id = plogid
        and imf.member_id = pmemberid
        and imf.founder_id = pfounderid;
    end case;
    return lRes.getclobval();
  exception
    when others then
      return lRes.getclobval();
  end;
  function GetAdditionalInfoXML(plogid      number,
                                pmembertype number,
                                pmemberid   number) return clob is
    lRes xmltype;
  begin
    SELECT XMLElement("AdditionalPersonInfo", NULL)
    INTO lRes
    from dual;

    case pmembertype
      when 1 then
        SELECT XMLElement("AdditionalPersonInfo",
                          XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                          XMLElement("PersonType", 2),
                          --Ac
                          xmltype(GetEmptyTag(2)),
                          --Ip
                          xmltype(GetEmptyTag(3)),
                          --Ur

                          XMLElement("AdditionalInformationUr",
                                     XMLElement("URAddress",
                                                nvl2(member_reg_counrycode, XMLElement("Country", member_reg_counrycode), XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil"))),
                                                XMLElement("Area", member_reg_area),
                                                XMLElement("District", member_reg_region),
                                                XMLElement("Town", member_reg_sity),
                                                XMLElement("Street", member_reg_street),
                                                XMLElement("HomeNumber", member_reg_house),
                                                XMLElement("OfficeNumber", member_reg_office),
                                                XMLElement("PostalCode", member_reg_postcode),
                                                XMLElement("AddressNotStruct", null)

                                                ),
                                     XMLElement("ACAddress",
                                                nvl2(member_seat_counrycode, XMLElement("Country", member_seat_counrycode), XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil"))),
                                                XMLElement("Area", member_seat_area),
                                                XMLElement("District", member_seat_region),
                                                XMLElement("Town", member_seat_sity),
                                                XMLElement("Street", member_seat_street),
                                                XMLElement("HomeNumber", member_seat_house),
                                                XMLElement("OfficeNumber", member_seat_office),
                                                XMLElement("PostalCode", to_char(member_seat_postcode)),
                                                XMLElement("AddressNotStruct", null)

                                                ),
                                     XMLForest(member_ur_name as "FullName",
                                               member_ur_fisthead_name as "FirstHead"

                                               )))
        into lRes
        from imp_members imm
        where imm.log_id = plogid
        and imm.member_id = pmemberid
        order by imm.member_id;
      when 2 then
        SELECT XMLElement("AdditionalPersonInfo",
                          XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                          XMLElement("PersonType", 1),
                          XMLElement("AdditionalInformationAc",
                                     XMLElement("URAddress",
                                                nvl2(member_reg_counrycode, XMLElement("Country", member_reg_counrycode), XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil"))),
                                                XMLElement("Area", member_reg_area),
                                                XMLElement("District", member_reg_region),
                                                XMLElement("Town", member_reg_sity),
                                                XMLElement("Street", member_reg_street),
                                                XMLElement("HomeNumber", member_reg_house),
                                                XMLElement("OfficeNumber", member_reg_office),
                                                XMLElement("PostalCode", member_reg_postcode),
                                                XMLElement("AddressNotStruct", null)),
                                     XMLElement("ACAddress",
                                                nvl2(member_seat_counrycode, XMLElement("Country", member_seat_counrycode), XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil"))),
                                                XMLElement("Area", member_seat_area),
                                                XMLElement("District", member_seat_region),
                                                XMLElement("Town", member_seat_sity),
                                                XMLElement("Street", member_seat_street),
                                                XMLElement("HomeNumber", member_seat_house),
                                                XMLElement("OfficeNumber", member_seat_office),
                                                XMLElement("PostalCode", member_seat_postcode),
                                                XMLElement("AddressNotStruct", null)),
                                     XMLElement("FirstName", member_ac_secondname),
                                     XMLElement("SecondName", member_ac_firstname),
                                     XMLElement("MiddleName", member_ac_middlename),
                                     XMLElement("PlaceBirdth", member_ac_birth_place),
                                     nvl2(member_ac_birth_date, XMLElement("DateBirdth", to_char(member_ac_birth_date, 'yyyy-mm-dd')), XMLElement("DateBirdth", XMLATTRIBUTES('true' as "xsi:nil"))),
                                     nvl2(member_ac_doc_typecode, XMLElement("DocumentIdentity", member_ac_doc_typecode), XMLElement("DocumentIdentity", XMLATTRIBUTES('true' as "xsi:nil"))),
                                     XMLElement("SeriesDocIdentity", member_ac_doc_series),
                                     XMLElement("NumberDocIdentity", member_ac_doc_number),
                                     XMLElement("IssuedDocument", member_ac_doc_whom),
                                     nvl2(member_ac_doc_date, XMLElement("DateIssuance", to_char(member_ac_doc_date, 'yyyy-mm-dd')), XMLElement("DateIssuance", XMLATTRIBUTES('true' as "xsi:nil")))),
                          --Ip
                          xmltype(GetEmptyTag(3)),
                          --Ur
                          xmltype(GetEmptyTag(1)))
        into lRes
        from imp_members imm
        where imm.log_id = plogid
        and imm.member_id = pmemberid
        order by imm.member_id;
      when 3 then
        SELECT XMLElement("AdditionalPersonInfo",
                          XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                          XMLElement("PersonType", 3),
                          xmltype(GetEmptyTag(2)),
                          --Ip
                          XMLElement("AdditionalInformationIp",
                                     XMLElement("URAddress",
                                                nvl2(member_reg_counrycode, XMLElement("Country", member_reg_counrycode), XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil"))),
                                                XMLElement("Area", member_reg_area),
                                                XMLElement("District", member_reg_region),
                                                XMLElement("Town", member_reg_sity),
                                                XMLElement("Street", member_reg_street),
                                                XMLElement("HomeNumber", member_reg_house),
                                                XMLElement("OfficeNumber", member_reg_office),
                                                XMLElement("PostalCode", member_reg_postcode),
                                                XMLElement("AddressNotStruct", null)),
                                     XMLElement("ACAddress",
                                                nvl2(member_seat_counrycode, XMLElement("Country", member_seat_counrycode), XMLElement("Country", XMLATTRIBUTES('true' as "xsi:nil"))),
                                                XMLElement("Area", member_seat_area),
                                                XMLElement("District", member_seat_region),
                                                XMLElement("Town", member_seat_sity),
                                                XMLElement("Street", member_seat_street),
                                                XMLElement("HomeNumber", member_seat_house),
                                                XMLElement("OfficeNumber", member_seat_office),
                                                XMLElement("PostalCode", member_seat_postcode),
                                                XMLElement("AddressNotStruct", null)),
                                     XMLElement("FirstName", member_ac_secondname),
                                     XMLElement("SecondName", member_ac_firstname),
                                     XMLElement("MiddleName", member_ac_middlename),
                                     XMLElement("PlaceBirdth", member_ac_birth_place),
                                     nvl2(member_ac_birth_date, XMLElement("DateBirdth", to_char(member_ac_birth_date, 'yyyy-mm-dd')), XMLElement("DateBirdth", XMLATTRIBUTES('true' as "xsi:nil"))),
                                     nvl2(member_ac_doc_typecode, XMLElement("DocumentIdentity", member_ac_doc_typecode), XMLElement("DocumentIdentity", XMLATTRIBUTES('true' as "xsi:nil"))),
                                     XMLElement("SeriesDocIdentity", member_ac_doc_series),
                                     XMLElement("NumberDocIdentity", member_ac_doc_number),
                                     XMLElement("IssuedDocument", member_ac_doc_whom),
                                     nvl2(member_ac_doc_date, XMLElement("DateIssuance", to_char(member_ac_doc_date, 'yyyy-mm-dd')), XMLElement("DateIssuance", XMLATTRIBUTES('true' as "xsi:nil")))),

                          --Ur
                          xmltype(GetEmptyTag(1)))
        into lRes
        from imp_members imm
        where imm.log_id = plogid
        and imm.member_id = pmemberid
        order by imm.member_id;
      else
        SELECT XMLElement("AdditionalPersonInfo", XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"), XMLElement("PersonType", 0), xmltype(GetEmptyTag(2)), xmltype(GetEmptyTag(3)), xmltype(GetEmptyTag(1)))
        into lRes
        from dual;
        --Ip

    end case;

    return lRes.getclobval();
  exception
    when others then
      return lRes.getclobval();
  end;

  function GetMembersXML(plogid number) return CLOB is
    lRes xmltype;
  begin
    SELECT XMLElement("ParticipantsList", NULL)
    INTO lRes
    from dual;

    SELECT XMLElement("ParticipantsList",
                      XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                      XMLAgg(XMLElement("Participant",
                                        nvl2(imm.MEMBER_ROLE, XMLElement("ParticipantOperation", imm.MEMBER_ROLE), XMLElement("ParticipantOperation", XMLATTRIBUTES('true' as "xsi:nil"))),
                                        nvl2(imm.MEMBER_KIND, XMLElement("ParticipantsView", imm.MEMBER_KIND), XMLElement("ParticipantsView", XMLATTRIBUTES('true' as "xsi:nil"))),
                                        nvl2(imm.member_type, XMLElement("ParticipantsType", imm.member_type), XMLElement("ParticipantsType", XMLATTRIBUTES('true' as "xsi:nil"))),
                                        XMLElement("OKED", imm.member_oked),
                                        nvl2(imm.member_foreign, XMLElement("ForeignPerson", imm.member_foreign), XMLElement("ForeignPerson", XMLATTRIBUTES('true' as "xsi:nil"))),
                                        nvl2(imm.member_residence, XMLElement("MemberCommunity", decode(imm.member_residence, 0, 'false', 1, 'true')), XMLElement("MemberCommunity", XMLATTRIBUTES('true' as "xsi:nil"))),
                                        nvl2(imm.member_residence_countrycode, XMLElement("MemberCommunitySityCode", imm.member_residence_countrycode), XMLElement("MemberCommunitySityCode", XMLATTRIBUTES('true' as "xsi:nil"))),
                                        XMLElement("ForeignAdditionalField", imm.member_foreign_add),
                                        XMLElement("RNN", imm.member_taxcode),
                                        XMLElement("Email", imm.MEMBER_EMAIL),
                                        XMLElement("OKPO", imm.member_okpo),
                                        XMLElement("IndividualIssue", imm.Member_MainCode),
                                        XMLElement("PhoneNumber", imm.MEMBER_PHONE),
                                        XMLElement("BankCode", imm.member_bank_code),
                                        XMLElement("BankCity", imm.member_bank_city),
                    XMLElement("BankOffshoreAddr", imm.MEMBER_BANK_OFFSHORE_ADDR),
                                        XMLElement("CorrespondentBankName", imm.member_bank_name),
                                        XMLElement("CorrespondentBankAccountNumber", imm.member_bank_account),
                                        XMLElement("CorrespondentBankAddress", imm.member_bank_address),
                                        XMLElement("AdditionalInformation", imm.MEMBER_COMMENTS),
                                        XMLElement("MoneyTransSys", imm.money_trans_sys),
                                        xmltype(GetFoundersXML(plogid, imm.member_id)),
                                        xmltype(GetAdditionalInfoXML(plogid, imm.member_type, imm.member_id)))))

    INTO lRes
    from imp_members imm
    where imm.log_id = plogid
    order by imm.member_id;

    return lRes.getclobval();
  end;

  function GetMessInfoXML(plogid number) return CLOB is
    lRes xmltype;
  begin
    select XMLElement("MessageInformation", NULL)
    INTO lRes
    from dual;

    select XMLElement("MessageInformation",
                      XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),

                      XMLElement("ReportsType", 1),
                      XMLElement("MessageNumber", pkg_messages_cfm.GenerateMessageNumber),
                      XMLElement("LastModifyDate", TO_CHAR(sysdate(), 'yyyy-mm-dd')),
                      nvl2(oper_idview, XMLElement("IDViewOperation", oper_idview), XMLElement("IDViewOperation", XMLATTRIBUTES('true' as "xsi:nil"))),
                      nvl2(oper_idtype, XMLElement("IDTypeOperation", oper_idtype), XMLElement("IDTypeOperation", XMLATTRIBUTES('true' as "xsi:nil"))),
                      XMLElement("OperationNumber", oper_number),
                      XMLElement("DocOperationName", oper_reason),
                      nvl2(oper_doc_date, XMLElement("DocOperationDate", to_char(oper_doc_date, 'yyyy-mm-dd')), XMLElement("DocOperationDate", XMLATTRIBUTES('true' as "xsi:nil"))),
                      XMLElement("DocOperationNumber", oper_doc_number),
                      nvl2(oper_currency_code, XMLElement("CurrencyCode", oper_currency_code), XMLElement("CurrencyCode", XMLATTRIBUTES('true' as "xsi:nil"))),
                      XMLElement("AmountCurrency", oper_currency_amount),
                      XMLElement("AmountCurrencyTenge", oper_tenge_amount),
                      nvl2(mess_oper_status, XMLElement("OperationStatuses", mess_oper_status), XMLElement("OperationStatuses", XMLATTRIBUTES('true' as "xsi:nil"))),
                      nvl2(MESS_REASON_CODE, XMLElement("SubmissionsBasises", MESS_REASON_CODE), XMLElement("SubmissionsBasises", XMLATTRIBUTES('true' as "xsi:nil"))),
                      nvl2(MESS_SUSPIC_CODE, XMLElement("SuspicionsCriterians", MESS_SUSPIC_CODE), XMLElement("SuspicionsCriterians", XMLATTRIBUTES('true' as "xsi:nil"))),
                      nvl2(oper_susp_first, XMLElement("SuspicionFirst", oper_susp_first), XMLElement("SuspicionFirst", XMLATTRIBUTES('true' as "xsi:nil"))),
                      nvl2(oper_susp_second, XMLElement("SuspicionSecond", oper_susp_second), XMLElement("SuspicionSecond", XMLATTRIBUTES('true' as "xsi:nil"))),
                      nvl2(oper_susp_third, XMLElement("SuspicionThird", oper_susp_third), XMLElement("SuspicionThird", XMLATTRIBUTES('true' as "xsi:nil"))),
                      XMLElement("DescriptionDifficulties", OPER_DIFFICULTIES),
                      XMLElement("MoreInformation", OPER_DOPINFO),
                      XMLElement("ParticipantCount", oper_members_count),
                      XMLElement("MerchTypes", imi.oper_merch_types),
                      XMLElement("MerchReginfo", imi.oper_merch_reginfo),
                      XMLElement("ReferCount", imi.oper_refers_count))

    INTO lRes
    from imp_messinfo imi
    where imi.log_id = plogid;

    return lRes.getclobval();
  exception
    when others then
      return lRes.getclobval();
  end;
  --
  function refers_2_xml(p_log_id in NUMBER) return xmltype as
    v_result xmltype;
  begin
    v_result := null;

    SELECT XMLElement("References",
                      XMLAgg(XMLElement("Reference",
                                        XMLElement("ReferenceId", ta.referid),
                                        XMLElement("ReferenceOperationNumber", ta.refer_doc_oper),
                                        XMLElement("ReferenceDocOperationDate", to_char(ta.refer_doc_date, 'dd.mm.yyyy')),
                                        XMLElement("ReferencerDocOperationNumber", ta.refer_doc_num)))) AS xmltype
    INTO v_result
    FROM imp_refer ta
    WHERE ta.log_id = p_log_id;

    return v_result;
  end;
  --
  function CreateImportXML(plogid number) return CLOB is
    result CLOB;
    lRes   xmltype;
    lXML   xmltype;

    lPersonalData CLOB;
    lMessInfo     CLOB;
    lMembers      CLOB;
  begin
    lMessInfo := GetMessInfoXML(plogid);
    lMembers  := GetMembersXML(plogid);
    select

     XMLElement("Root",
                XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi", 'http://www.w3.org/2001/XMLSchema' as "xmlns:xsd"),
                pkg_rqst_cfm.rqst_personal_data,
                XMLType(lMessInfo),
                refers_2_xml(plogid),
                XMLType(lMembers),
                XMLElement("Version", '52FF370C-8B35-42da-9B9A-B48F44F10C6F'),
                XMLElement("DocumentUniqueIdentifier", sys_guid()))

    INTO lRes
    from dual;

    lXML   := SYS.XMLType.CreateXML('<?xml version="1.0" encoding="windows-1251"?>' || lRes.getclobval());
    Result := lXML.getclobval();
    return Result;
  end;

  function GetMessInfoXML_2(plogid number) return CLOB is
    lRes xmltype;
  begin
    select XMLElement("MessageInformation", NULL)
    INTO lRes
    from dual;

    select XMLElement("MessageInformation",
                      XMLElement("DocumentType", 1),
                      XMLElement("MessageNumber", pkg_messages_cfm.GenerateMessageNumber),
                      XMLElement("LastModifyDate", TO_CHAR(sysdate(), 'dd.mm.yyyy')),
                      XMLElement("TransactionDate", TO_CHAR(nvl(Oper_Trans_Date, mess_Trans_Date), 'dd.mm.yyyy hh24:mi:ss')),
                      XMLElement("MessTransDate", TO_CHAR(nvl(Oper_Trans_Date, mess_Trans_Date), 'dd.mm.yyyy hh24:mi:ss')),
                      XMLElement("ViewOperationId", oper_idview),
                      XMLElement("EknpId", XMLATTRIBUTES(pkg_common.GetBool(oper_isnotidtyped) as "IsEknpNotSetup"), oper_idtype),
                      XMLElement("OperationNumber", oper_number),
                      XMLElement("DocOperationReason", oper_reason),
                      XMLElement("DocOperationDate", to_char(oper_doc_date, 'dd.mm.yyyy')),
                      XMLElement("DocOperationNumber", oper_doc_number),
                      XMLElement("CurrencyCodeId", oper_currency_code),
                      XMLElement("AmountCurrency", oper_currency_amount),
                      XMLElement("AmountCurrencyTenge", oper_tenge_amount),
                      XMLElement("OperationStatusId", mess_oper_status),
                      XMLElement("ReasonFilingId", MESS_REASON_CODE),
                      XMLElement("SuspicionsCriterians", MESS_SUSPIC_CODE),
                      XMLElement("SuspicionFirst", oper_susp_first),
                      XMLElement("SuspicionSecond", oper_susp_second),
                      XMLElement("SuspicionThird", oper_susp_third),
                      XMLElement("DescriptionDifficulties", OPER_DIFFICULTIES),
                      XMLElement("MoreInformation", OPER_DOPINFO),
                      XMLElement("ParticipantCount", oper_members_count),
                      XMLElement("MerchTypes", imi.oper_merch_types),
                      XMLElement("MerchReginfo", imi.oper_merch_reginfo),
                      XMLElement("ReferCount", imi.oper_refers_count))

    INTO lRes
    from imp_messinfo imi
    where imi.log_id = plogid;

    return lRes.getclobval();
  exception
    when others then
      return lRes.getclobval();
  end;

  function GetAccountsXML_2(plogid    number,
                            pmemberid number) return CLOB is
    lRes xmltype;
  begin
    SELECT XMLElement("CorrespondentsInformations", NULL)
    INTO lRes
    from dual;

    SELECT XMLElement("CorrespondentsInformations",
                      XMLAgg(XMLElement("CorrespondentInformation",
                                        --          nvl2(imm.MEMBER_ROLE,XMLElement("ParticipantOperation",imm.MEMBER_ROLE),XMLElement("ParticipantOperation",XMLATTRIBUTES('true' as "xsi:nil"))),
                                        XMLElement("AccountNumber", iac.accountnumber),
                                        XMLElement("BankName", iac.bankname),
                                        XMLElement("BankCode", iac.bankcode),
                                        XMLElement("BankAddress", iac.bankaddress))) --CorrespondentBank
                      )
    INTO lRes
    from imp_accounts iac
    where iac.log_id = plogid
    and iac.memberid = pmemberid
    order by iac.accountid;

    return lRes.getclobval();
  end;
  function GetFounderInfoXML_2(plogid     number,
                               pmemberid  number,
                               pfounderid number) return clob is
    lRes xmltype;
  begin
    SELECT XMLElement("Founder", NULL)
    INTO lRes
    from dual;

    select XMLElement("Founder", XMLElement("Name", imf.founder_ur_name), XMLElement("MemberCommunityCityCode", founder_ur_residence_c_code))
    into lRes
    from imp_found imf
    where imf.log_id = plogid
    and imf.member_id = pmemberid
    and imf.founder_id = pfounderid;
    return lRes.getclobval();
  exception
    when others then
      return lRes.getclobval();
  end;

  function GetFoundersXML_2(plogid    number,
                            pmemberid number) return xmltype is
    lRes    CLOB;
    lResxml xmltype;
  begin
    SELECT empty_clob()
    INTO lRes
    from dual;

    SELECT

     XMLForest(XMLAgg(nvl2(GetFounderInfoXml_2(plogid, imf.member_id, imf.founder_id), xmltype(GetFounderInfoXml_2(plogid, imf.member_id, imf.founder_id)), null)) as "Founders").getclobval()
    INTO lRes
    from imp_found imf
    where imf.log_id = plogid
    and imf.member_id = pmemberid
    order by imf.founder_id;

    IF LRES IS NULL THEN

      lResxml := null;
    else
      lResxml := xmltype(lres);
    END IF;

    return lResxml;
  exception
    when no_data_found then
      return null;
  end;

  function GetAdditionalInfoXML_2(plogid      number,
                                  pmembertype number,
                                  pmemberid   number) return clob is
    lRes xmltype;
  begin
    SELECT XMLElement("AdditionalPersonInfo", NULL)
    INTO lRes
    from dual;

    case pmembertype
      when 1 then
        SELECT XMLElement("AdditionalPersonInfo",
                          XMLElement("PersonType", 1),

                          XMLElement("AdditionalInformationUr",
                                     XMLElement("URAddress",
                                                XMLElement("Country", member_reg_counrycode),
                                                XMLElement("Area", member_reg_area),
                                                XMLElement("District", member_reg_region),
                                                XMLElement("Town", member_reg_sity),
                                                XMLElement("Street", member_reg_street),
                                                XMLElement("HomeNumber", member_reg_house),
                                                XMLElement("OfficeNumber", member_reg_office)

                                                ),
                                     XMLElement("ACAddress",
                                                XMLElement("Country", member_seat_counrycode),
                                                XMLElement("Area", member_seat_area),
                                                XMLElement("District", member_seat_region),
                                                XMLElement("Town", member_seat_sity),
                                                XMLElement("Street", member_seat_street),
                                                XMLElement("HomeNumber", member_seat_house),
                                                XMLElement("OfficeNumber", member_seat_office)

                                                ),
                                     XMLElement("FullName", XMLATTRIBUTES(pkg_common.GetBool(member_isnotnamed) as "IsFullNameSetup"), member_ur_name),

                                     XMLElement("FirstHead", member_ur_fisthead_name)))
        into lRes
        from imp_members imm
        where imm.log_id = plogid
        and imm.member_id = pmemberid
        order by imm.member_id;
      when 2 then
        SELECT XMLElement("AdditionalPersonInfo",
                          XMLElement("PersonType", 2),
                          XMLElement("AdditionalInformationAc",
                                     XMLElement("URAddress",
                                                XMLElement("Country", member_reg_counrycode),
                                                XMLElement("Area", member_reg_area),
                                                XMLElement("District", member_reg_region),
                                                XMLElement("Town", member_reg_sity),
                                                XMLElement("Street", member_reg_street),
                                                XMLElement("HomeNumber", member_reg_house),
                                                XMLElement("OfficeNumber", member_reg_office)

                                                ),
                                     XMLElement("ACAddress",
                                                XMLElement("Country", member_seat_counrycode),
                                                XMLElement("Area", member_seat_area),
                                                XMLElement("District", member_seat_region),
                                                XMLElement("Town", member_seat_sity),
                                                XMLElement("Street", member_seat_street),
                                                XMLElement("HomeNumber", member_seat_house),
                                                XMLElement("OfficeNumber", member_seat_office)

                                                ),
                                     XMLElement("FIO", XMLATTRIBUTES(pkg_common.GetBool(member_isnotnamed) as "IsFioNotSetup"), member_ur_name),

                                     XMLElement("PlaceBirdth", member_ac_birth_place),
                                     XMLElement("DateBirdth", to_char(member_ac_birth_date, 'dd.mm.yyyy')),
                                     XMLElement("DocumentIdentity", member_ac_doc_typecode),
                                     XMLElement("SeriesDocIdentity", member_ac_doc_series),
                                     XMLElement("NumberDocIdentity", member_ac_doc_number),
                                     XMLElement("DocumentIssued", member_ac_doc_whom),
                                     XMLElement("DateIssuance", to_char(member_ac_doc_date, 'dd.mm.yyyy'))

                                     ))
        into lRes
        from imp_members imm
        where imm.log_id = plogid
        and imm.member_id = pmemberid
        order by imm.member_id;
      when 3 then
        SELECT XMLElement("AdditionalPersonInfo",
                          XMLElement("PersonType", 3),
                          XMLElement("AdditionalInformationIp",
                                     XMLElement("URAddress",
                                                XMLElement("Country", member_reg_counrycode),
                                                XMLElement("Area", member_reg_area),
                                                XMLElement("District", member_reg_region),
                                                XMLElement("Town", member_reg_sity),
                                                XMLElement("Street", member_reg_street),
                                                XMLElement("HomeNumber", member_reg_house),
                                                XMLElement("OfficeNumber", member_reg_office)

                                                ),
                                     XMLElement("ACAddress",
                                                XMLElement("Country", member_seat_counrycode),
                                                XMLElement("Area", member_seat_area),
                                                XMLElement("District", member_seat_region),
                                                XMLElement("Town", member_seat_sity),
                                                XMLElement("Street", member_seat_street),
                                                XMLElement("HomeNumber", member_seat_house),
                                                XMLElement("OfficeNumber", member_seat_office)

                                                ),
                                     XMLElement("FIO", XMLATTRIBUTES(pkg_common.GetBool(member_isnotnamed) as "IsFioNotSetup"), member_ur_name),

                                     XMLElement("PlaceBirdth", member_ac_birth_place),
                                     XMLElement("DateBirdth", to_char(member_ac_birth_date, 'dd.mm.yyyy')),
                                     XMLElement("DocumentIdentity", member_ac_doc_typecode),
                                     XMLElement("SeriesDocIdentity", member_ac_doc_series),
                                     XMLElement("NumberDocIdentity", member_ac_doc_number),
                                     XMLElement("DocumentIssued", member_ac_doc_whom),
                                     XMLElement("DateIssuance", to_char(member_ac_doc_date, 'dd.mm.yyyy'))

                                     ))

        into lRes
        from imp_members imm
        where imm.log_id = plogid
        and imm.member_id = pmemberid
        order by imm.member_id;
      else
        SELECT XMLElement("AdditionalPersonInfo", XMLElement("PersonType", 0))
        into lRes
        from dual;
        --Ip

    end case;

    return lRes.getclobval();
  exception
    when others then
      return lRes.getclobval();
  end;

  function GetMembersXML_2(plogid number) return CLOB is
    lRes xmltype;
  begin
    SELECT XMLElement("ParticipantsList", NULL)
    INTO lRes
    from dual;

    SELECT XMLElement("Participants",
                      XMLAgg(XMLElement("Participant",
                                        --          nvl2(imm.MEMBER_ROLE,XMLElement("ParticipantOperation",imm.MEMBER_ROLE),XMLElement("ParticipantOperation",XMLATTRIBUTES('true' as "xsi:nil"))),
                                        XMLElement("MemberId", imm.member_membercode),
                                        XMLElement("ParticipantsView", imm.MEMBER_KIND),
                                        XMLElement("ParticipantsType", imm.member_type),
                                        XMLElement("IsClientSubject", imm.member_isclient),
                                        XMLElement("MemberCommunityCityCode", member_residence_countrycode),
                                        XMLElement("ForeignPerson", imm.member_foreign),

                                        --CorrespondentBank
                                        XMLElement("CorrespondentBank",

                                                   XMLElement("AccountNumber", imm.member_bank_account),
                                                   XMLElement("Name", imm.member_bank_name),
                                                   XMLElement("Code", imm.member_bank_code),
                                                   XMLElement("BankCity", imm.member_bank_city),
                                                   XMLElement("BankAddress", imm.member_bank_address),
                           XMLElement("BankOffshoreAddr", imm.MEMBER_BANK_OFFSHORE_ADDR),
                                                   xmltype(GetAccountsXML_2(plogid, imm.member_id))

                                                   ),
                                        XMLElement("RNN", imm.member_taxcode),
                                        XMLElement("OKED", imm.member_oked),
                                        XMLElement("IndividualIssue", imm.Member_MainCode),
                                        XMLElement("PhoneNumber", imm.MEMBER_PHONE),
                                        XMLElement("Email", imm.MEMBER_EMAIL),
                                        XMLElement("AdditionalInformation", imm.MEMBER_COMMENTS),
                                        XMLElement("MoneyTransSys", imm.money_trans_sys),

                                        XMLForest(Extract(GetFoundersXML_2(plogid, imm.member_id), '/Founders/*') as "Founders"),

                                        xmltype(GetAdditionalInfoXML_2(plogid, imm.member_type, imm.member_id)))))
    INTO lRes
    from imp_members imm
    where imm.log_id = plogid
    order by imm.member_id;

    return lRes.getclobval();
  end;

  function CreateImportXML_2(plogid number) return CLOB is
    result CLOB;
    lRes   xmltype;
    lXML   xmltype;

    lMessInfo CLOB;
    lMembers  CLOB;
  begin
    lMessInfo := GetMessInfoXML_2(plogid);
    lMembers  := GetMembersXML_2(plogid);
    select

     XMLElement("Root",
                XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi", 'http://www.w3.org/2001/XMLSchema' as "xmlns:xsd"),
                pkg_rqst_cfm.rqst_personal_data,
                XMLType(lMessInfo),
                refers_2_xml(plogid),
                XMLType(lMembers),
                XMLElement("Version", 'E5505800-A19B-47ed-AF5F-9A8BAF169E52'),
                XMLElement("DocumentUniqueIdentifier", sys_guid()))

    INTO lRes
    from dual;

    lXML   := SYS.XMLType.CreateXML('<?xml version="1.0" encoding="windows-1251"?>' || lRes.getclobval());
    Result := lXML.getclobval();
    return Result;
  end;

  function GetAdditionalInfoXML_3(plogid      number,
                                  pmembertype number,
                                  pmemberid   number) return clob is
    lRes xmltype;

  begin

    SELECT XMLElement("AdditionalPersonInfo", NULL)
    INTO lRes
    from dual;
    case pmembertype
      when 1 then
        SELECT XMLElement("AdditionalPersonInfo",
                          XMLElement("PersonType", 1),
                          XMLElement("AdditionalInformationUr",

                                        XMLElement("URAddress",
                                                   --XMLElement("Country", member_reg_counrycode),
                                                   XMLElement("Country",pkg_messages_xml.GetSingleOKSMTAbbr(member_reg_counrycode)),
                                                   XMLElement("Area", XMLATTRIBUTES(member_reg_area_code as "Code"), member_reg_area),
                                                   XMLElement("District", XMLATTRIBUTES(member_reg_region_code as "Code"), member_reg_region),
                                                   XMLElement("Town", XMLATTRIBUTES(member_reg_sity_code as "Code"), member_reg_sity),
                                                   XMLElement("Street", XMLATTRIBUTES(member_reg_street_code as "Code"), member_reg_street),
                                                   XMLElement("HomeNumber", XMLATTRIBUTES(member_reg_house_code as "Code"), member_reg_house),
                                                   XMLElement("OfficeNumber", XMLATTRIBUTES(member_reg_office_code as "Code"), member_reg_office),
                                                   XMLElement("PostalCode", XMLATTRIBUTES(member_reg_postcode as "Code"), member_reg_postcode)),
                                        XMLElement("ACAddress",
                                                  -- XMLElement("Country", member_seat_counrycode),
                                                   XMLElement("Country",pkg_messages_xml.GetSingleOKSMTAbbr(member_seat_counrycode)),
                                                   XMLElement("Area", XMLATTRIBUTES(member_seat_area_code as "Code"), member_seat_area),
                                                   XMLElement("District", XMLATTRIBUTES(member_seat_region_code as "Code"), member_seat_region),
                                                   XMLElement("Town", XMLATTRIBUTES(member_seat_sity_code as "Code"), member_seat_sity),
                                                   XMLElement("Street", XMLATTRIBUTES(member_seat_street_code as "Code"), member_seat_street),
                                                   XMLElement("HomeNumber", XMLATTRIBUTES(member_seat_house_code as "Code"), member_seat_house),
                                                   XMLElement("OfficeNumber", XMLATTRIBUTES(member_seat_office_code as "Code"), member_seat_office),
                                                   XMLElement("PostalCode", XMLATTRIBUTES(member_seat_postcode as "Code"), member_seat_postcode)),
                                     XMLElement("ParticipantOPF", imm.member_ur_opf_code),
                                     XMLElement("FullName", XMLATTRIBUTES(pkg_common.GetBool(member_isnotnamed) as "IsFullNameSetup"), member_ur_name),
                                     XMLElement("FirstHead", XMLElement("FirstName", imm.member_ur_fisthead_firstname), XMLElement("SecondName", imm.member_ur_fisthead_secondname), XMLElement("MiddleName", imm.member_ur_fisthead_middlename))))

        into lRes
        from imp_members imm
        where imm.log_id = plogid
        and imm.member_id = pmemberid
        order by imm.member_id;
      when 2 then
        SELECT XMLElement("AdditionalPersonInfo",
                          XMLElement("PersonType", 2),
                          XMLElement("AdditionalInformationAc",

                                        XMLElement("URAddress",
                                                   --XMLElement("Country", member_reg_counrycode),
                                                   XMLElement("Country",pkg_messages_xml.GetSingleOKSMTAbbr(member_reg_counrycode)),
                                                   XMLElement("Area", XMLATTRIBUTES(member_reg_area_code as "Code"), member_reg_area),
                                                   XMLElement("District", XMLATTRIBUTES(member_reg_region_code as "Code"), member_reg_region),
                                                   XMLElement("Town", XMLATTRIBUTES(member_reg_sity_code as "Code"), member_reg_sity),
                                                   XMLElement("Street", XMLATTRIBUTES(member_reg_street_code as "Code"), member_reg_street),
                                                   XMLElement("HomeNumber", XMLATTRIBUTES(member_reg_house_code as "Code"), member_reg_house),
                                                   XMLElement("OfficeNumber", XMLATTRIBUTES(member_reg_office_code as "Code"), member_reg_office),
                                                   XMLElement("PostalCode", XMLATTRIBUTES(member_reg_postcode as "Code"), member_reg_postcode)),
                                        XMLElement("ACAddress",
                                                   --XMLElement("Country", member_seat_counrycode),
                                                   XMLElement("Country",pkg_messages_xml.GetSingleOKSMTAbbr(member_seat_counrycode)),
                                                   XMLElement("Area", XMLATTRIBUTES(member_seat_area_code as "Code"), member_seat_area),
                                                   XMLElement("District", XMLATTRIBUTES(member_seat_region_code as "Code"), member_seat_region),
                                                   XMLElement("Town", XMLATTRIBUTES(member_seat_sity_code as "Code"), member_seat_sity),
                                                   XMLElement("Street", XMLATTRIBUTES(member_seat_street_code as "Code"), member_seat_street),
                                                   XMLElement("HomeNumber", XMLATTRIBUTES(member_seat_house_code as "Code"), member_seat_house),
                                                   XMLElement("OfficeNumber", XMLATTRIBUTES(member_seat_office_code as "Code"), member_seat_office),
                                                   XMLElement("PostalCode", XMLATTRIBUTES(member_seat_postcode as "Code"), member_seat_postcode)),
                                     XMLElement("FIO",
                                                XMLATTRIBUTES(pkg_common.GetBool(member_isnotnamed) as "IsFioNotSetup"),
                                                XMLElement("FirstName", imm.member_ac_firstname),
                                                XMLElement("SecondName", imm.member_ac_secondname),
                                                XMLElement("MiddleName", imm.member_ac_middlename)),

                                     XMLElement("PlaceBirdth", member_ac_birth_place),
                                     XMLElement("DateBirdth", to_char(member_ac_birth_date, 'dd.mm.yyyy')),
                                     XMLElement("DocumentIdentity", member_ac_doc_typecode),
                                     XMLElement("SeriesDocIdentity", member_ac_doc_series),
                                     XMLElement("NumberDocIdentity", member_ac_doc_number),
                                     XMLElement("DocumentIssued", member_ac_doc_whom),
                                     XMLElement("DateIssuance", to_char(member_ac_doc_date, 'dd.mm.yyyy'))

                                     ))
        into lRes
        from imp_members imm
        where imm.log_id = plogid
        and imm.member_id = pmemberid
        order by imm.member_id;
      when 3 then
        SELECT XMLElement("AdditionalPersonInfo",
                          XMLElement("PersonType", 3),
                          XMLElement("AdditionalInformationIp",

                                        XMLElement("URAddress",
                                                   --XMLElement("Country", member_reg_counrycode),
                                                   XMLElement("Country",pkg_messages_xml.GetSingleOKSMTAbbr(member_reg_counrycode)),
                                                   XMLElement("Area", XMLATTRIBUTES(member_reg_area_code as "Code"), member_reg_area),
                                                   XMLElement("District", XMLATTRIBUTES(member_reg_region_code as "Code"), member_reg_region),
                                                   XMLElement("Town", XMLATTRIBUTES(member_reg_sity_code as "Code"), member_reg_sity),
                                                   XMLElement("Street", XMLATTRIBUTES(member_reg_street_code as "Code"), member_reg_street),
                                                   XMLElement("HomeNumber", XMLATTRIBUTES(member_reg_house_code as "Code"), member_reg_house),
                                                   XMLElement("OfficeNumber", XMLATTRIBUTES(member_reg_office_code as "Code"), member_reg_office),
                                                   XMLElement("PostalCode", XMLATTRIBUTES(member_reg_postcode as "Code"), member_reg_postcode)),

                                        XMLElement("ACAddress",
                                                   --XMLElement("Country", member_seat_counrycode),
                                                   XMLElement("Country",pkg_messages_xml.GetSingleOKSMTAbbr(member_seat_counrycode)),
                                                   XMLElement("Area", XMLATTRIBUTES(member_seat_area_code as "Code"), member_seat_area),
                                                   XMLElement("District", XMLATTRIBUTES(member_seat_region_code as "Code"), member_seat_region),
                                                   XMLElement("Town", XMLATTRIBUTES(member_seat_sity_code as "Code"), member_seat_sity),
                                                   XMLElement("Street", XMLATTRIBUTES(member_seat_street_code as "Code"), member_seat_street),
                                                   XMLElement("HomeNumber", XMLATTRIBUTES(member_seat_house_code as "Code"), member_seat_house),
                                                   XMLElement("OfficeNumber", XMLATTRIBUTES(member_seat_office_code as "Code"), member_seat_office),
                                                   XMLElement("PostalCode", XMLATTRIBUTES(member_seat_postcode as "Code"), member_seat_postcode)),
                                     XMLElement("FIO",
                                                XMLATTRIBUTES(pkg_common.GetBool(member_isnotnamed) as "IsFioNotSetup"),
                                                XMLElement("FirstName", imm.member_ac_firstname),
                                                XMLElement("SecondName", imm.member_ac_secondname),
                                                XMLElement("MiddleName", imm.member_ac_middlename)),

                                     XMLElement("ParticipantOPF", imm.member_ur_opf_code),
                                     XMLElement("PlaceBirdth", member_ac_birth_place),
                                     XMLElement("DateBirdth", to_char(member_ac_birth_date, 'dd.mm.yyyy')),
                                     XMLElement("DocumentIdentity", member_ac_doc_typecode),
                                     XMLElement("SeriesDocIdentity", member_ac_doc_series),
                                     XMLElement("NumberDocIdentity", member_ac_doc_number),
                                     XMLElement("DocumentIssued", member_ac_doc_whom),
                                     XMLElement("DateIssuance", to_char(member_ac_doc_date, 'dd.mm.yyyy'))

                                     ))

        into lRes
        from imp_members imm
        where imm.log_id = plogid
        and imm.member_id = pmemberid
        order by imm.member_id;
      else
        SELECT XMLElement("AdditionalPersonInfo", XMLElement("PersonType", 0))
        into lRes
        from dual;
        --Ip

    end case;

    return lRes.getclobval();
  exception
    when others then
      return lRes.getclobval();
  end;
  function GetFounderInfoXML_3(plogid       number,
                               pfoundertype number,
                               pmemberid    number,
                               pfounderid   number) return clob is
    lRes xmltype;
  begin
    SELECT XMLElement("Founder", NULL)
    INTO lRes
    from dual;
    case pfoundertype
      when 1 then
        select XMLElement("Founder",
                          XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                          XMLElement("FounderType", pfoundertype),
                          XMLElement("FounderOPF", imf.founder_ur_opf_code),
                          XMLElement("Name", imf.founder_ur_name),
                          -- XMLElement("MemberCommunityCityCode", imf.founder_ur_residence_c_code))
                          XMLElement("MemberCommunityCityCode",pkg_messages_xml.GetSingleOKSMTAbbr(imf.founder_ur_residence_c_code)))

        into lRes
        from imp_found imf
        where imf.log_id = plogid
        and imf.member_id = pmemberid
        and imf.founder_id = pfounderid;
      when 2 then
        select XMLElement("Founder",
                          XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                          XMLElement("FounderType", pfoundertype),
                          XMLElement("FirstName", imf.founder_ac_firstname),
                          XMLElement("SecondName", imf.founder_ac_secondname),
                          XMLElement("MiddleName", imf.founder_ac_middlename),
                          XMLElement("MemberCommunityCityCode",pkg_messages_xml.GetSingleOKSMTAbbr(imf.founder_ur_residence_c_code)))

        into lRes
        from imp_found imf
        where imf.log_id = plogid
        and imf.member_id = pmemberid
        and imf.founder_id = pfounderid;
      when 3 then
        select XMLElement("Founder",
                          XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"),
                          XMLElement("FounderType", pfoundertype),
                          XMLElement("FirstName", imf.founder_ac_firstname),
                          XMLElement("SecondName", imf.founder_ac_secondname),
                          XMLElement("MiddleName", imf.founder_ac_middlename),
                         XMLElement("MemberCommunityCityCode",pkg_messages_xml.GetSingleOKSMTAbbr(imf.founder_ur_residence_c_code)))

        into lRes
        from imp_found imf
        where imf.log_id = plogid
        and imf.member_id = pmemberid
        and imf.founder_id = pfounderid;
    end case;

    return lRes.getclobval();
  exception
    when others then
      return lRes.getclobval();
  end;

  function GetFoundersXML_3(plogid    number,
                            pmemberid number) return CLOB is
    lRes xmltype;
  begin
    SELECT XMLElement("FoundersList", NULL)
    INTO lRes
    from dual;

    SELECT XMLElement("Founders", XMLAgg(XMLtype(GetFounderInfoXml_3(plogid, imf.founder_type, imf.member_id, imf.founder_id))))
    INTO lRes
    from imp_found imf
    where imf.log_id = plogid
    and imf.member_id = pmemberid
    order by imf.founder_id;

    return lRes.getclobval();
  exception
    when no_data_found then
      return lRes.getclobval();
  end;

  function GetMembersXML_3(plogid number) return CLOB is
    lRes xmltype;
  begin
    SELECT XMLElement("ParticipantsList", NULL)
    INTO lRes
    from dual;

    SELECT XMLElement("Participants",
                      XMLAgg(XMLElement("Participant",
                                        --          nvl2(imm.MEMBER_ROLE,XMLElement("ParticipantOperation",imm.MEMBER_ROLE),XMLElement("ParticipantOperation",XMLATTRIBUTES('true' as "xsi:nil"))),
                                        XMLElement("MemberId", imm.member_membercode),
                                        XMLElement("ParticipantsView", imm.MEMBER_KIND),
                                        XMLElement("ParticipantsType", imm.member_type),
                                        XMLElement("IsClientSubject", imm.member_isclient),
                                        -- XMLElement("MemberCommunityCityCode", member_residence_countrycode),
                                        XMLElement("MemberCommunityCityCode", pkg_messages_xml.GetSingleOKSMTAbbr(imm.member_residence_countrycode)),
                                        XMLElement("ForeignPerson", imm.member_foreign),

                                        --CorrespondentBank
                                        XMLElement("CorrespondentBank",
                                                   XMLElement("AccountNumber", imm.member_bank_account),
                                                   XMLElement("Name", imm.member_bank_name),
                                                   XMLElement("Code", imm.member_bank_code),
                                                   XMLElement("BankCity", imm.member_bank_city),
                                                   XMLElement("BankAddress",  pkg_messages_xml.GetSingleOKSMTAbbr(imm.member_bank_address)),
                           XMLElement("BankOffshoreAddr", imm.MEMBER_BANK_OFFSHORE_ADDR),
                                                   xmltype(GetAccountsXML_2(plogid, imm.member_id))

                                                   ),
                                        XMLElement("RNN", imm.member_taxcode),
                                        XMLElement("OKED", imm.member_oked),
                                        XMLElement("IndividualIssue", imm.Member_MainCode),
                                        XMLElement("PhoneNumber", imm.MEMBER_PHONE),
                                        XMLElement("Email", imm.MEMBER_EMAIL),
                                        XMLElement("AdditionalInformation", imm.MEMBER_COMMENTS),
                                        XMLElement("MoneyTransSys", imm.money_trans_sys),
                                        xmltype(GetFoundersXML_3(plogid, imm.member_id)),

                                        xmltype(GetAdditionalInfoXML_3(plogid, imm.member_type, imm.member_id)))))
    INTO lRes
    from imp_members imm
    where imm.log_id = plogid
    order by imm.member_id;

    return lRes.getclobval();
  end;

  function CreateImportXML_3(plogid number) return CLOB is
    result CLOB;
    lRes   xmltype;
    lXML   xmltype;

    lMessInfo CLOB;
    lMembers  CLOB;
  begin
    lMessInfo := GetMessInfoXML_2(plogid);
    lMembers  := GetMembersXML_3(plogid);
    select XMLElement("Root",
                      XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi", 'http://www.w3.org/2001/XMLSchema' as "xmlns:xsd"),
                      pkg_rqst_cfm.rqst_personal_data,
                      XMLType(lMessInfo),
                      refers_2_xml(plogid),
                      XMLType(lMembers),
                      XMLElement("Version", 'C6EC3F8D-2BE1-46A9-841B-5CF1130F0A12'),
                      XMLElement("DocumentUniqueIdentifier", sys_guid()))

    INTO lRes
    from dual;

    lXML   := SYS.XMLType.CreateXML('<?xml version="1.0" encoding="windows-1251"?>' || lRes.getclobval());
    Result := lXML.getclobval();
    return Result;
  end;

end PKG_Import;
/

CREATE OR REPLACE PUBLIC SYNONYM PKG_IMPORT FOR KFM.PKG_IMPORT
/

GRANT EXECUTE ON KFM.PKG_IMPORT TO KFM_ROLE
/

CREATE OR REPLACE PACKAGE BODY KFM."PKG_MESS_CFM_1" as
  --length cursor is

  function ExtractMessInSignedData(pXML      in clob,
                                   pExist    out number,
                                   pSender   out varchar2,
                                   pReceiver out varchar,
                                   pDate     out date) return number is
    result number default 0;
    vXML   xmltype;
  begin
    begin
      vXML := xmltype.createxml(pXML);
    exception
      when others then
        return - 305; --Сообщение is not valid
    end;
    select existsNode(vXML, '//ExportData')
    into pExist
    from dual;
    if pExist is null then
      pExist := 0;
    end if;

    select extractvalue(vXML, '/ExportData/SignedData/Sender'),
           extractvalue(vXML, '/ExportData/SignedData/Receiver'),
           to_date(extractvalue(vXML, '/ExportData/SignedData/TimeStamp'), 'dd.mm.yyyy hh24:mi:ss')
    into pSender,
         pReceiver,
         pDate
    from dual;
    return result;
  exception
    when others then
      return - 315; --В сообщении отсутствует информация  об отправителе и получателе
  end;

  function ExtractSignatureData(pXML       in clob,
                                pSignature out clob) return number is
    result number default 0;
    vXML   xmltype;
    outXML xmltype;
  begin
    begin
      vXML := xmltype.createxml(pXML);
    exception
      when others then
        return - 305; --Сообщение is not valid
    end;
    /*  select extractvalue(vXML,'/ExportData/SignedData/Signature')
    into pSignature
    from dual;*/
    select extract(vXML, '/ExportData/SignedData/Signature/text()')
    into outXML
    from dual;

    if outXML is null then
      pSignature := null;
    else
      pSignature := outXml.getclobval();
    end if;

    return result;
  exception
    when others then
      return - 316; --В сообщении отсутствует информация  об отправителе и получателе
  end;

  /*
  function ExtractMessOutSignedData(pXML in clob, pSender out varchar2,pReceiver out varchar, pDate out date) return number
  is
   result number default 0;
   vXML xmltype;
  begin
    begin
        vXML:=xmltype.createxml(pXML);
    exception
     when others then
        return -305; --Сообщение is not valid
    end;

    select extractvalue(vXML,'/ExportData/SignedData/Sender'),
           extractvalue(vXML,'/ExportData/SignedData/Receiver'),
           to_date(extractvalue(vXML,'/ExportData/SignedData/TimeStamp'),'dd.mm.yyyy HH24:mi:ss')
      into pReceiver,
           pSender,
           pDate
      from dual;
   return result;
  exception
   when others then
    return -315;--В сообщении отсутствует информация  об отправителе и получателе
  end;
  */

  function ParseMessageInfo(pnode   xmldom.domnode,
                            pmessid in number) return number is
    result    number default 0;
    vMess     mess_cfm_announce_info%rowtype;
    pmessdate date;

  begin
    select send_date
    into pmessdate
    from mess_cfm
    where mess_cfm_id = pmessid; -- Пока нету в сообщении, затем изменить
    vMess.mess_cfm_id      := pmessid;
    vMess.mess_number      := pkg_messages_xml.getsingleval(pnode, 'MessageInformation/MessageNumber');
    vMess.mess_date        := to_date(pkg_messages_xml.getsingleval(pnode, 'MessageInformation/LastModifyDate'), 'yyyy-mm-dd'); --pmessdate; -- Выдергивать напрямую из XML
    vMess.mess_type        := pkg_messages_xml.getsingleval(pnode, 'MessageInformation/ReportsType');
    vMess.mess_oper_status := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/OperationStatuses');
    vMess.mess_reason_code := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/SubmissionsBasises');
    vMess.mess_suspic_code := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/SuspicionsCriterians');

    insert into mess_cfm_announce_info
    values vMess;
    return result;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      return - 1000; --Сообщение не найдено
    WHEN OTHERS THEN
      return - 3004; --- 6001; --  Ошибка экпорта данных о сообщении по причине их неверного формата

  end;

  function ParseCMFInfo(pnode   xmldom.domnode,
                        pmessid in number) return number is
    result number default 0;
    vCFM   mess_cfm_announce_subj%rowtype;
  begin
    vCFM.mess_cfm_id       := pmessid;
    vCFM.cfm_code          := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationCode');
    vCFM.cfm_name          := pkg_messages_xml.getsingleval(pnode, 'PersonalData/Organisation');
    vCFM.cfm_taxcode       := pkg_messages_xml.getsingleval(pnode, 'PersonalData/RNN');
    vCFM.cfm_maincode      := pkg_messages_xml.getsingleval(pnode, 'PersonalData/IINBIN');
    vCFM.cfm_seat_area     := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationArea');
    vCFM.cfm_seat_region   := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationDistrict');
    vCFM.cfm_seat_sity     := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationSity');
    vCFM.cfm_seat_street   := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationStreet');
    vCFM.cfm_seat_house    := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationHouse');
    vCFM.cfm_seat_office   := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationOffice');
    vCFM.cfm_seat_postcode := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationPostalIndex');
    vCFM.CFM_AC_FIRSTNAME  := pkg_messages_xml.getsingleval(pnode, 'PersonalData/HeadName');
    vCFM.CFM_AC_SECONDNAME := pkg_messages_xml.getsingleval(pnode, 'PersonalData/HeadSurname');
    vCFM.CFM_AC_MIDDLENAME := pkg_messages_xml.getsingleval(pnode, 'PersonalData/HeadMidleName');
    insert into mess_cfm_announce_subj
    values vcfm;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3001; ---6000; --Ошибка экпорта данных о субъекте, подающем отчет, по причине их неверного формата

  end;

  function ParseCFMContactInfo(pnode   xmldom.domnode,
                               pmessid in number) return number is
    result     number default 0;
    vCFMConact mess_cfm_announce_cont%rowtype;
  begin
    vCFMConact.mess_cfm_id        := pmessid;
    vCFMConact.contact_secondname := pkg_messages_xml.getsingleval(pnode, 'PersonalData/FirstName');
    vCFMConact.contact_firstname  := pkg_messages_xml.getsingleval(pnode, 'PersonalData/SecondName');
    vCFMConact.contact_middlename := pkg_messages_xml.getsingleval(pnode, 'PersonalData/MiddleName');
    vCFMConact.contact_job        := pkg_messages_xml.getsingleval(pnode, 'PersonalData/JobName');
    vCFMConact.contact_phone      := pkg_messages_xml.getsingleval(pnode, 'PersonalData/Phone');
    vCFMConact.contact_email      := pkg_messages_xml.getsingleval(pnode, 'PersonalData/Email');
    insert into mess_cfm_announce_cont
    values vcfmconact;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3002; ---6002; --Ошибка экпорта данных о контактном лице субъекта по причине их неверного формата
  end;

  function ParseOperationInfo(pnode   xmldom.domnode,
                              pmessid in number) return number is
    result     number default 0;
    vOperation mess_cfm_announce_oper%rowtype;
  begin
    vOperation.mess_cfm_id           := pmessid;
    vOperation.oper_number           := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/OperationNumber');
    vOperation.oper_idview           := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/IDViewOperation');
    vOperation.oper_idtype           := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/IDTypeOperation');
    vOperation.oper_members_count    := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/ParticipantCount');
    vOperation.oper_currency_code   := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/CurrencyCode');
    vOperation.oper_currency_code := pkg_common.ConvertToNumber(pkg_messages_xml.getsingleval(pNode, 'MessageInformation/AmountCurrency'));
    --??? vOperation.oper_currency_amount := pkg_common.ConvertToNumber(pkg_messages_xml.getsingleval(pNode, 'MessageInformation/AmountCurrency'));
    vOperation.oper_tenge_amount     := pkg_common.ConvertToNumber(pkg_messages_xml.getsingleval(pNode, 'MessageInformation/AmountCurrencyTenge'));
    vOperation.oper_reason           := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/DocOperationName');
    vOperation.oper_doc_date         := to_date(pkg_messages_xml.getsingleval(pNode, 'MessageInformation/DocOperationDate'), 'yyyy-mm-dd');
    vOperation.oper_doc_number       := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/DocOperationNumber');
    vOperation.oper_susp_first       := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/SuspicionFirst');
    vOperation.oper_susp_second      := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/SuspicionSecond');
    vOperation.oper_susp_third       := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/SuspicionThird');
    vOperation.oper_difficulties     := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/DescriptionDifficulties');
    vOperation.oper_dopinfo          := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/MoreInformation');
    insert into mess_cfm_announce_oper
    values vOperation;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3000; ---6003; --Ошибка экпорта данных об операции причине их неверного формата
      return result;
  end;

  function ParseMemberInfo(pnode     xmldom.domnode,
                           pmessid   in number,
                           pmemberid in number) return number is
    result      number default 0;
    pMember     mess_cfm_announce_memb%rowtype;
    pAcInfoPath varchar2(50 char) := 'AdditionalPersonInfo/AdditionalInformationAc/';
    pIpInfoPath varchar2(50 char) := 'AdditionalPersonInfo/AdditionalInformationIp/';
    pUrInfoPath varchar2(50 char) := 'AdditionalPersonInfo/AdditionalInformationUr/';
    pInfoPath   varchar2(50 char);
  begin
    pMember.mess_cfm_id := pmessid;
    pMember.member_id   := pmemberid + 1;

    pMember.member_kind := pkg_messages_xml.getsingleval(pnode, 'ParticipantsView');
    pMember.member_role := pkg_messages_xml.getsingleval(pnode, 'ParticipantOperation');
    if (pkg_messages_xml.getsingleval(pnode, 'MemberCommunity') = 'true') then
      pMember.member_residence := 1;
    elsif (pkg_messages_xml.getsingleval(pnode, 'MemberCommunity') = 'false') then
      pMember.member_residence := 0;
    end if;
    pMember.member_residence_countrycode := pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, 'MemberCommunitySityCode'));
    pMember.member_type                  := to_number(pkg_messages_xml.getsingleval(pnode, 'ParticipantsType'));
    pMember.member_foreign               := pkg_messages_xml.getsingleval(pnode, 'ForeignPerson');
    pMember.member_foreign_add           := pkg_messages_xml.getsingleval(pnode, 'ForeignAdditionalField');

    pMember.member_bank_code    := pkg_messages_xml.getsingleval(pnode, 'BankCode');
    pMember.member_bank_city    := pkg_messages_xml.getsingleval(pnode, 'BankCity');
    pMember.member_bank_name    := pkg_messages_xml.getsingleval(pnode, 'CorrespondentBankName');
    pMember.member_bank_account := pkg_messages_xml.getsingleval(pnode, 'CorrespondentBankAccountNumber');
    pMember.member_bank_address := to_char(pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, 'CorrespondentBankAddress')));
    pMember.member_bank_offshore_addr := pkg_messages_xml.getsingleval(pnode, 'CorrespondentBankOffshoreAddress');
    pMember.member_taxcode      := pkg_messages_xml.getsingleval(pnode, 'RNN');
    pMember.member_okpo         := pkg_messages_xml.getsingleval(pnode, 'OKPO');
    pMember.member_oked    :=  to_char(pkg_messages_xml.GetSingleOKEDVal(pkg_messages_xml.getsingleval(pnode, 'OKED'),pmessid));
    pMember.member_maincode     := pkg_messages_xml.getsingleval(pnode, 'IndividualIssue');

    pMember.member_phone    := pkg_messages_xml.getsingleval(pnode, 'PhoneNumber');
    pMember.member_email    := pkg_messages_xml.getsingleval(pnode, 'Email');
    pMember.member_comments := pkg_messages_xml.getsingleval(pnode, 'AdditionalInformation');

    case pMember.member_type
      when 1 then
        pInfoPath := pUrInfoPath;
      when 2 then
        pInfoPath := pAcInfoPath;
      when 3 then
        pInfoPath := pIpInfoPath;
      else
        return - 3007; ---6010; --Неправильный код тип участника
    end case;

    pMember.member_reg_counrycode  := pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Country'));
    pMember.member_reg_area        := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Area');
    pMember.member_reg_region      := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/District');
    pMember.member_reg_sity        := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Town');
    pMember.member_reg_street      := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Street');
    pMember.member_reg_house       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/HomeNumber');
    pMember.member_reg_office      := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/OfficeNumber');
    pMember.member_reg_postcode    := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/PostalCode');
    pMember.member_seat_counrycode := pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Country'));
    pMember.member_seat_area       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Area');
    pMember.member_seat_region     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/District');
    pMember.member_seat_sity       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Town');
    pMember.member_seat_street     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Street');
    pMember.member_seat_house      := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/HomeNumber');
    pMember.member_seat_office     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/OfficeNumber');
    pMember.member_seat_postcode   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/PostalCode');

    pMember.member_ur_name          := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FullName');
    pMember.member_ur_fisthead_name := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FirstHead');

    pMember.member_ac_secondname   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FirstName');
    pMember.member_ac_firstname    := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'SecondName');
    pMember.member_ac_middlename   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'MiddleName');
    pMember.member_ac_doc_typecode := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DocumentIdentity');
    pMember.member_ac_doc_number   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'NumberDocIdentity');
    pMember.member_ac_doc_series   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'SeriesDocIdentity');
    pMember.member_ac_doc_whom     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'IssuedDocument');
    pMember.member_ac_doc_date     := to_date(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DateIssuance'), 'yyyy-mm-dd');
    pMember.member_ac_birth_date   := to_date(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DateBirdth'), 'yyyy-mm-dd');
    pMember.member_ac_birth_place  := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'PlaceBirdth');

    insert into mess_cfm_announce_memb
    values pMember;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3003; ---6004; --Ошибка экпорта данных об участнике операции по причине их неверного формата
      return result;
  end;

  function ParseFounderInfo(pnode      xmldom.domnode,
                            pmessid    in number,
                            pmemberid  in number,
                            pfounderid in number) return number is
    result      number default 0;
    pFounnder   mess_cfm_announce_found%rowtype;
    pAcInfoPath varchar2(50 char) := 'FounderAC/';

    pUrInfoPath varchar2(50 char) := 'founderUR/';
    pInfoPath   varchar2(50 char);
  begin
    pFounnder.Founder_Id   := pfounderid + 1;
    pFounnder.mess_cfm_id  := pmessid;
    pFounnder.member_id    := pmemberid + 1;
    pFounnder.founder_type := pkg_messages_xml.GetSingleVal(pnode, 'PersonType');
    case pFounnder.founder_type
      when 1 then
        pInfoPath := pAcInfoPath;
      when '' then
       pInfoPath := pAcInfoPath;
        when null then
       pInfoPath := pAcInfoPath;
      when 2 then
        pInfoPath := pUrInfoPath;
      else
        return - 3006; ---6011; --неправильно указан код типа учредителя
    end case;
    pFounnder.founder_maincode        := nvl(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'BIN'), pkg_messages_xml.getsingleval(pnode, pInfoPath || 'IIN'));
    pFounnder.founder_reg_counrycode  := pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Country'));
    pFounnder.founder_reg_area        := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Area');
    pFounnder.founder_reg_region      := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/District');
    pFounnder.founder_reg_sity        := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Town');
    pFounnder.founder_reg_street      := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Street');
    pFounnder.founder_reg_house       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/HomeNumber');
    pFounnder.founder_reg_office      := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/OfficeNumber');
    pFounnder.founder_reg_postcode    := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/PostalCode');
    pFounnder.founder_seat_counrycode := pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Country'));
    pFounnder.founder_seat_area       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Area');
    pFounnder.founder_seat_region     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/District');
    pFounnder.founder_seat_sity       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Town');
    pFounnder.founder_seat_street     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Street');
    pFounnder.founder_seat_house      := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/HomeNumber');
    pFounnder.founder_seat_office     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/OfficeNumber');
    pFounnder.founder_seat_postcode   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/PostalCode');
    pFounnder.founder_ur_name         := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FounderName');

    if (pkg_messages_xml.getsingleval(pnode, pInfoPath || 'Residence') = 'true') then
      pFounnder.founder_ur_residence := 1;
    elsif (pkg_messages_xml.getsingleval(pnode, pInfoPath || 'Residence') = 'false') then
      pFounnder.founder_ur_residence := 0;
    end if;

    pFounnder.founder_ur_residence_c_code := pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ResidenceSity'));
    pFounnder.founder_ur_reg_whom         := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'Authority');
    pFounnder.founder_ur_reg_number       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'RegistrationNumber');
    pFounnder.founder_ur_reg_date         := to_date(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'RegistrationDate'), 'yyyy-mm-dd');
    pFounnder.founder_ur_taxcode          := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'RNN');
    pFounnder.founder_ac_secondname       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FirstName');
    pFounnder.founder_ac_firstname        := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'SecondName');
    pFounnder.founder_ac_middlename       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'MiddleName');
    pFounnder.founder_ac_birth_date       := to_date(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DateBirdth'), 'yyyy-mm-dd');
    pFounnder.founder_ac_reg_number       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'PassportNumber');
    pFounnder.founder_ac_reg_series       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'PassportSeries');
    pFounnder.founder_ac_reg_whom         := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'IssuedDocument');
    pFounnder.founder_ac_reg_date         := to_date(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DateIssuance'), 'yyyy-mm-dd');

    insert into mess_cfm_announce_found
    values pFounnder;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3005; ---6004; --Ошибка экпорта данных об участнике операции по причине их неверного формата
      return result;
  end;

  function ParseFoundersInfo(pnode     xmldom.domnode,
                             pmessid   in number,
                             pmemberid in number) return number is
    result    number default 0;
    vNodeList xmldom.domnodelist;
    vnode     xmldom.domnode;

  begin
    vNodeList := pkg_messages_xml.GetNodesList(pnode, 'FoundersList/Founder');
    for i in 0 .. xmldom.getLength(vNodeList) - 1 loop
      vnode  := xmldom.item(vNodeList, i);
      result := ParseFounderInfo(vnode, pmessid, pmemberid, i);
      if result <> 0 then
        return result;
      end if;
    end loop;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3005; --Ошибка экпорта данных об учредителе участнике операции по причине их неверного формата
      return result;
  end;

  function ParseMembersInfo(pnode   xmldom.domnode,
                            pmessid in number) return number is
    result    number default 0;
    vNodeList xmldom.domnodelist;
    vnode     xmldom.domnode;

  begin
    vNodeList := pkg_messages_xml.GetNodesList(pnode, 'ParticipantsList/Participant');
    for i in 0 .. xmldom.getLength(vNodeList) - 1 loop
      vnode  := xmldom.item(vNodeList, i);
      result := ParseMemberInfo(vnode, pmessid, i);
      if result <> 0 then
        return result;
      end if;
      result := ParseFoundersInfo(vnode, pmessid, i);
      if result <> 0 then
        return result;
      end if;
    end loop;
    ------
    return result;
  end;

  function parseAnnounceXML(pmessid in number) return number is
    result   number default 0;
    vres     number default 0;
    vnode    xmldom.domnode;
    pxmlclob clob;
    tempres  number default 0;

  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;

    vnode  := pkg_messages_xml.GetParsedXML(pxmlclob);
    result := ParseMessageInfo(vnode, pmessid);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    result := ParseCmfInfo(vnode, pmessid);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    result := ParseCfmcontactInfo(vnode, pmessid);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    result := ParseOperationInfo(vnode, pmessid);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    result := ParseMembersInfo(vnode, pmessid);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    if tempres = 0 then
      vres := SetErrorCode(pmessid, 0);
      return vres;
    end if;
    return tempres;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      return - 305; --Неверный XML документ  -- изменть
      return result;
  end;

  function parseCheckXML(pmessid in number) return number is
    result   number default 0;
    vnode    xmldom.domnode;
    pxmlclob clob;

    vCheck mess_cfm_check%rowtype;
  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vCheck.Mess_Cfm_Id := pmessid;

    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);

    vCheck.Errorcode := pkg_messages_xml.getsingleval(vnode, 'ErrorCode');
    vCheck.ErrorName := pkg_messages_xml.getsingleval(vnode, 'ErrorName');
    insert into mess_cfm_check
    values vcheck;

    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3008);
      return - 3008; --Неверный формат данных в квитанции
      return result;
  end;

  function parseDopInfXML(pmessid in number) return number is
    result   number default 0;
    vnode    xmldom.domnode;
    pxmlclob clob;

    vDopInf mess_cfm_dopinf%rowtype;
  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vDopInf.Mess_Cfm_Id := pmessid;

    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);

    vDopInf.Description := pkg_messages_xml.getsingleval(vnode, 'Description');
    vDopInf.Days_Count  := pkg_messages_xml.getsingleval(vnode, 'CountDays');
    insert into mess_cfm_dopinf
    values vDopInf;

    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3009);
      return - 3009; --Неверный формат данных в запросе дополнительной информации
      return result;
  end;

  function parseDopInfAnswXML(pmessid in number) return number is
    result    number default 0;
    vnode     xmldom.domnode;
    pnode     xmldom.domnode;
    vNodeList xmldom.domnodelist;
    pxmlclob  clob;

    vDopInfAnsw mess_cfm_dopinf_answ%rowtype;
  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vDopInfAnsw.Mess_Cfm_Id := pmessid;

    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);

    vNodeList := pkg_messages_xml.GetNodesList(pnode, 'Attachments/Attachment');
    for i in 0 .. xmldom.getLength(vNodeList) - 1 loop
      vnode                     := xmldom.item(vNodeList, i);
      vDopInfAnsw.Attach_Id     := i;
      vDopInfAnsw.Attach_Name   := pkg_messages_xml.getsingleval(vnode, 'FileName');
      vDopInfAnsw.Attach_Length := pkg_messages_xml.getsingleval(vnode, 'Length');
      insert into mess_cfm_dopinf_answ
      values vDopInfansw;
    end loop;

    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3010); -- Неверный формат данных в ответе на дополнительную информацию
      return - 3010; --Неверный XML документ
      return result;
  end;

  function parseUpdateRequestXML(pmessid in number) return number --Запрос на обновление
   is
    result number default 0;
    vnode  xmldom.domnode;

    pxmlclob clob;

    vUpdate mess_cfm_update_info%rowtype;
  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vUpdate.Mess_Cfm_Id := pmessid;

    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);

    vUpdate.Update_Version := pkg_messages_xml.getsingleval(vnode, 'RequestedVersion');
    -- vUpdate.Release_Date:=to_date(pkg_messages_xml.getsingleval(vnode,'ReleaseDate'),'yyyy-mm-dd');

    insert into mess_cfm_update_info
    values vupdate;
    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3013); --Неверный формат данных в запросе на обновление
      return - 3013; --Неверный XML документ
      return result;
  end;

  function ParseUpdateInfoXML(pmessid in number) return number is
    result     number default 0;
    vnode      xmldom.domnode;
    pnode      xmldom.domnode;
    pnode1     xmldom.domnode;
    vNodeList  xmldom.domnodelist;
    vNodeList1 xmldom.domnodelist;
    pxmlclob   clob;

    vUpdateVersion varchar2(300);
    vDateRelease   date;
    vmodulename    varchar2(100 char);

  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);

    --Головное обновление
    vUpdateVersion := pkg_messages_xml.getsingleval(vnode, 'UpdateVersion');
    vDateRelease   := to_date(pkg_messages_xml.getsingleval(vnode, 'ReleaseDate'), 'yyyy-mm-dd');
    insert into mess_cfm_update_info
      (mess_cfm_id,
       update_version,
       release_date)
    values
      (pmessid,
       vupdateversion,
       vDateRelease);

    if pkg_updates_cfm.existsInHisory(vUpdateVersion, vDateRelease) = 0 then
      insert into updates_cfm_hist
        (messid,
         version,
         daterelease)
      values
        (pmessid,
         vUpdateVersion,
         vDateRelease);

      --Используемые модули
      vNodeList := pkg_messages_xml.GetNodesList(vnode, 'Using/Use');
      for i in 0 .. xmldom.getLength(vnodelist) - 1 loop
        pnode       := xmldom.item(vnodelist, i);
        vmodulename := xslprocessor.valueOf(pnode, 'text()');
        insert into updates_cfm_hist_mod
          (version,
           modulename,
           messid)
        values
          (vUpdateVersion,
           vmodulename,
           pmessid);
      end loop;
    end if;

    --История версий обновлений
    vNodeList := pkg_messages_xml.GetNodesList(vnode, 'Histories/History');
    for i in 0 .. xmldom.getLength(vnodelist) - 1 loop
      pnode          := xmldom.item(vnodelist, i);
      vUpdateVersion := pkg_messages_xml.getsingleval(pnode, 'Version');
      vDateRelease   := to_date(pkg_messages_xml.getsingleval(pnode, 'ReleaseDate'), 'yyyy-mm-dd');

      if pkg_updates_cfm.existsInHisory(vUpdateVersion, vDateRelease) = 0 then
        insert into updates_cfm_hist
          (messid,
           version,
           daterelease)
        values
          (pmessid,
           vUpdateVersion,
           vDateRelease);

        --Используемые модули
        vnodelist1 := pkg_messages_xml.GetNodesList(pnode, 'Using/Use');
        for j in 0 .. xmldom.getLength(vnodelist1) - 1 loop
          pnode1      := xmldom.item(vnodelist1, j);
          vmodulename := xslprocessor.valueOf(pnode1, 'text()');
          insert into updates_cfm_hist_mod
            (version,
             modulename,
             messid)
          values
            (vUpdateVersion,
             vmodulename,
             pmessid);
        end loop;
      end if;
    end loop;

    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3011); --Неверный формат данных в информационнном сообщении об обновлении
      return - 3011; --Неверный XML документ
      return result;
  end;

  function ParseUpdateXML(pmessid in number) return number is
    result    number default 0;
    vnode     xmldom.domnode;
    vNodeList xmldom.domnodelist;
    pxmlclob  clob;

    vUpdateVersion varchar2(300);
    vDateRelease   date;
    vmodulename    varchar2(100 char);
    cursor moduleCur is
      select distinct modulename
      from updates_cfm_modulenames;

  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vnode          := pkg_messages_xml.GetParsedXML(pxmlclob);
    vUpdateVersion := pkg_messages_xml.getsingleval(vnode, 'UpdateVersion');
    vDateRelease   := to_date(pkg_messages_xml.getsingleval(vnode, 'ReleaseDate'), 'yyyy-mm-dd');
    insert into mess_cfm_update_info
      (mess_cfm_id,
       update_version,
       release_date)
    values
      (pmessid,
       vupdateversion,
       vDateRelease);

    insert into updates_cfm_hist
      (messid,
       version,
       daterelease)
    values
      (pmessid,
       vUpdateVersion,
       vDateRelease);

    --Используемые модули
    vnodelist := xslprocessor.selectNodes(vnode, 'UpdateInformations/UpdateInformation/Using/Use/ModuleName');
    for i in 0 .. xmldom.getLength(vnodelist) - 1 loop
      vnode       := xmldom.item(vnodelist, i);
      vmodulename := xslprocessor.valueOf(vnode, 'text()');
      insert into updates_cfm_modulenames
        (modulename)
      values
        (vmodulename);
    end loop;

    for modulerow in moduleCur loop
      insert into updates_cfm_hist_mod
        (version,
         modulename,
         messid)
      values
        (vUpdateVersion,
         modulerow.modulename,
         pmessid);
    end loop;

    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3012); --Неверный формат данных в информационнном сообщении собновлением
      return - 3012; --Неверный XML документ
      return result;
  end;

  function SetErrorCode(pmessid  in number,
                        perrcode in number) return number is
  begin
    update mess_cfm
    set int_err_code = perrcode
    where mess_cfm_id = pmessid;
    return 0;

  exception
    when no_data_found then
      return - 1000;
  end;

  function getcolumn_length(p_table_name in varchar2,
                            p_name       in varchar2,
                            p_length     out number) return number is
    result number default 0;
  begin

    select data_length
    into p_length
    from USER_TAB_COLUMNS
    where table_name = upper(p_table_name)
    and column_name = upper(p_name);
    return result;

  exception
    when others then
      return - 2099;

  end;

--function GetNoDateVal()

end PKG_MESS_CFM_1;
/

CREATE OR REPLACE PUBLIC SYNONYM PKG_MESS_CFM_1 FOR KFM.PKG_MESS_CFM_1
/


GRANT EXECUTE ON KFM.PKG_MESS_CFM_1 TO KFM_ROLE
/

CREATE OR REPLACE PACKAGE BODY KFM."PKG_MESS_CFM_2" as

  function ExtractMessInSignedData(pXML      in clob,
                                   pExist    out number,
                                   pSender   out varchar2,
                                   pReceiver out varchar,
                                   pDate     out date) return number is
    result number default 0;
    vXML   xmltype;
  begin
    begin
      vXML := xmltype.createxml(pXML);
    exception
      when others then
        return - 305; --Сообщение is not valid
    end;
    select existsNode(vXML, '//ExportData')
    into pExist
    from dual;
    if pExist is null then
      pExist := 0;
    end if;

    select extractvalue(vXML, '/ExportData/SignedData/Sender'),
           extractvalue(vXML, '/ExportData/SignedData/Receiver'),
           to_date(extractvalue(vXML, '/ExportData/SignedData/TimeStamp'), 'dd.mm.yyyy hh24:mi:ss')
    into pSender,
         pReceiver,
         pDate
    from dual;
    return result;
  exception
    when others then
      return - 315; --В сообщении отсутствует информация  об отправителе и получателе
  end;

  function ExtractSignatureData(pXML       in clob,
                                pSignature out varchar2) return number is
    result number default 0;
    vXML   xmltype;
  begin
    begin
      vXML := xmltype.createxml(pXML);
    exception
      when others then
        return - 305; --Сообщение is not valid
    end;
    select extractvalue(vXML, '/ExportData/SignedData/Signature')
    into pSignature
    from dual;

    return result;
  exception
    when others then
      return - 316; --В сообщении отсутствует информация  об отправителе и получателе
  end;

  function ParseMessageInfo(pnode       xmldom.domnode,
                            pmessid     in number,
                            pversion_id number) return number is
    result    number default 0;
    vMess     mess_cfm_announce_info%rowtype;
    pmessdate date;

  begin
    select send_date
    into pmessdate
    from mess_cfm
    where mess_cfm_id = pmessid; -- Пока нету в сообщении, затем изменить
    vMess.mess_cfm_id      := pmessid;
    vMess.mess_number      := pkg_messages_xml.getsingleval(pnode, 'MessageInformation/MessageNumber');
    vMess.mess_date        := to_date(pkg_messages_xml.getsingleval(pnode, 'MessageInformation/LastModifyDate'), 'dd.mm.yyyy'); --pmessdate; -- Выдергивать напрямую из XML
    vMess.mess_type        := to_number(pkg_messages_xml.getsingleval(pnode, 'MessageInformation/DocumentType'));
    vMess.mess_oper_status := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/OperationStatusId');
    vMess.mess_reason_code := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/ReasonFilingId');
    vMess.mess_suspic_code := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/SuspicionsCriterians');

    vMess.Mess_Trans_Date := to_date(pkg_messages_xml.getsingleval(pNode, 'MessageInformation/MessTransDate'), 'dd.mm.yyyy hh24:mi:ss');
    insert into mess_cfm_announce_info
    values vMess;
    return result;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      return - 1000; --Сообщение не найдено
    WHEN OTHERS THEN
      return - 3004; --- 6001; --  Ошибка экпорта данных о сообщении по причине их неверного формата

  end;

  function ParseCMFInfo(pnode       xmldom.domnode,
                        pmessid     in number,
                        pversion_id number) return number is
    result number default 0;
    vCFM   mess_cfm_announce_subj%rowtype;
  begin
    vCFM.mess_cfm_id       := pmessid;
    vCFM.cfm_code          := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationCode');
    vCFM.cfm_name          := pkg_messages_xml.getsingleval(pnode, 'PersonalData/Organisation');
    vCFM.cfm_taxcode       := pkg_messages_xml.getsingleval(pnode, 'PersonalData/RNN');
    vCFM.cfm_maincode      := pkg_messages_xml.getsingleval(pnode, 'PersonalData/IINBIN');
    vCFM.cfm_seat_area     := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationArea');
    vCFM.cfm_seat_region   := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationDistrict');
    vCFM.cfm_seat_sity     := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationCity');
    vCFM.cfm_seat_street   := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationStreet');
    vCFM.cfm_seat_house    := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationHouse');
    vCFM.cfm_seat_office   := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationOffice');
    vCFM.cfm_seat_postcode := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationPostalIndex');
    vCFM.Cfm_Isac          := pkg_common.BoolToNumber(pkg_messages_xml.getsingleval(pnode, 'PersonalData/AdditionalAcData/@IsAc'));
    --алексей 2012.10.23
    --if vCFM.Cfm_Isac=1 then
    vCFM.Cfm_Doc_Typecode  := pkg_messages_xml.getsingleval(pnode, 'PersonalData/AdditionalAcData/DocumentIdentity');
    vCFM.Cfm_Doc_Number    := pkg_messages_xml.getsingleval(pnode, 'PersonalData/AdditionalAcData/NumberDocIdentity');
    vCFM.Cfm_Doc_Series    := pkg_messages_xml.getsingleval(pnode, 'PersonalData/AdditionalAcData/SeriesDocIdentity');
    vCFM.Cfm_Doc_Whom      := pkg_messages_xml.getsingleval(pnode, 'PersonalData/AdditionalAcData/DocumentIssued');
    vCFM.Cfm_Doc_Date      := to_date(pkg_messages_xml.getsingleval(pnode, 'PersonalData/AdditionalAcData/DateIssuance'), 'dd.mm.yyyy');
    vCFM.CFM_AC_FIRSTNAME  := pkg_messages_xml.getsingleval(pnode, 'PersonalData/HeadName');
    vCFM.CFM_AC_SECONDNAME := pkg_messages_xml.getsingleval(pnode, 'PersonalData/HeadSurname');
    vCFM.CFM_AC_MIDDLENAME := pkg_messages_xml.getsingleval(pnode, 'PersonalData/HeadMidleName');
    --алексей 2012.10.23
    --end if;
    ---Только для версии 3 (Код ОПФ + Страны согласно справочнику ИС АР)------------------------------
    if pversion_id >= 3 then
      vcfm.cfm_ur_opf_code      := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationOPF');
      vcfm.cfm_seat_area_code   := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationArea/@Code');
      vcfm.cfm_seat_region_code := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationDistrict/@Code');
      vcfm.cfm_seat_sity_code   := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationCity/@Code');
      vcfm.cfm_seat_street_code := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationStreet/@Code');
      vcfm.cfm_seat_house_code  := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationHouse/@Code');
      vcfm.cfm_seat_office_code := pkg_messages_xml.getsingleval(pnode, 'PersonalData/OrganisationOffice/@Code');
    end if;
    ---Только для версии 3 (Код ОПФ + Страны согласно справочнику ИС АР)------------------------------
    insert into mess_cfm_announce_subj
    values vcfm;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3001; ---6000; --Ошибка экпорта данных о субъекте, подающем отчет, по причине их неверного формата

  end;

  function ParseCFMContactInfo(pnode       xmldom.domnode,
                               pmessid     in number,
                               pversion_id number) return number is
    result     number default 0;
    vCFMConact mess_cfm_announce_cont%rowtype;
  begin
    vCFMConact.mess_cfm_id        := pmessid;
    vCFMConact.contact_secondname := pkg_messages_xml.getsingleval(pnode, 'PersonalData/FirstName');
    vCFMConact.contact_firstname  := pkg_messages_xml.getsingleval(pnode, 'PersonalData/SecondName');
    vCFMConact.contact_middlename := pkg_messages_xml.getsingleval(pnode, 'PersonalData/MiddleName');
    vCFMConact.contact_job        := pkg_messages_xml.getsingleval(pnode, 'PersonalData/JobName');
    vCFMConact.contact_phone      := pkg_messages_xml.getsingleval(pnode, 'PersonalData/Phone');
    vCFMConact.contact_email      := pkg_messages_xml.getsingleval(pnode, 'PersonalData/Email');
    insert into mess_cfm_announce_cont
    values vcfmconact;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3002; ---6002; --Ошибка экпорта данных о контактном лице субъекта по причине их неверного формата
  end;

  function ParseOperationInfo(pnode       xmldom.domnode,
                              pmessid     in number,
                              pversion_id number) return number is
    result     number default 0;
    vOperation mess_cfm_announce_oper%rowtype;
  begin
    vOperation.mess_cfm_id       := pmessid;
    vOperation.oper_number       := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/OperationNumber');
    vOperation.oper_idview       := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/ViewOperationId');
    vOperation.oper_idtype       := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/EknpId');
    vOperation.Oper_IsNotIDTyped := pkg_common.BoolToNumber(pkg_messages_xml.getsingleval(pNode, 'MessageInformation/EknpId/@IsEknpNotSetup'));
    vOperation.Oper_Trans_Date   := to_date(pkg_messages_xml.getsingleval(pNode, 'MessageInformation/TransactionDate'), 'dd.mm.yyyy hh24:mi:ss');
    --IsEknpNotSetup

    vOperation.oper_members_count    := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/ParticipantCount');
    vOperation.oper_currency_code   := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/CurrencyCodeId');
    vOperation.oper_currency_amount := pkg_common.ConvertToNumber(pkg_messages_xml.getsingleval(pNode, 'MessageInformation/AmountCurrency'));
    vOperation.oper_tenge_amount     := pkg_common.ConvertToNumber(pkg_messages_xml.getsingleval(pNode, 'MessageInformation/AmountCurrencyTenge'));
    vOperation.oper_reason           := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/DocOperationReason');
    vOperation.oper_doc_date         := to_date(pkg_messages_xml.getsingleval(pNode, 'MessageInformation/DocOperationDate'), 'dd.mm.yyyy');
    vOperation.oper_doc_number       := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/DocOperationNumber');
    vOperation.oper_susp_first       := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/SuspicionFirst');
    vOperation.oper_susp_second      := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/SuspicionSecond');
    vOperation.oper_susp_third       := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/SuspicionThird');
    vOperation.oper_difficulties     := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/DescriptionDifficulties');
    vOperation.oper_dopinfo          := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/MoreInformation');

    vOperation.oper_merch_types   := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/MerchTypes');
    vOperation.oper_merch_reginfo := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/MerchReginfo');
    vOperation.oper_refers_count  := pkg_messages_xml.getsingleval(pNode, 'MessageInformation/ReferCount');

    insert into mess_cfm_announce_oper
    values vOperation;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3000; ---6003; --Ошибка экпорта данных об операции причине их неверного формата
      return result;
  end;

  function ParseMemberInfo(pnode       xmldom.domnode,
                           pmessid     in number,
                           pmemberid   in number,
                           pversion_id number) return number is
    result      number default 0;
    pMember     mess_cfm_announce_memb%rowtype;
    pAcInfoPath varchar2(50 char) := 'AdditionalPersonInfo/AdditionalInformationAc/';
    pIpInfoPath varchar2(50 char) := 'AdditionalPersonInfo/AdditionalInformationIp/';
    pUrInfoPath varchar2(50 char) := 'AdditionalPersonInfo/AdditionalInformationUr/';
    pInfoPath   varchar2(50 char);
  begin
    pMember.mess_cfm_id := pmessid;
    pMember.member_id   := pmemberid + 1;

    pMember.member_kind       := pkg_messages_xml.getsingleval(pnode, 'ParticipantsView');
    pMember.member_membercode := pkg_messages_xml.getsingleval(pnode, 'MemberId'); --участник (4.1)
    pMember.member_isclient   := pkg_messages_xml.getsingleval(pnode, 'IsClientSubject');
    --  pMember.member_residence  :=BoolToNumber(pkg_messages_xml.getsingleval(pnode,'MemberCommunityCityCode/@IsMemberCommunity'));

    pMember.member_residence_countrycode := pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, 'MemberCommunityCityCode'));
    pMember.member_type                  := to_number(pkg_messages_xml.getsingleval(pnode, 'ParticipantsType'));
    pMember.member_foreign               := pkg_messages_xml.getsingleval(pnode, 'ForeignPerson');
    -- pMember.member_foreign_add := pkg_messages_xml.getsingleval(pnode,'ForeignAdditionalField');

    pMember.member_bank_code    := pkg_messages_xml.getsingleval(pnode, 'CorrespondentBank/Code');
    pMember.member_bank_city    := pkg_messages_xml.getsingleval(pnode, 'CorrespondentBank/BankCity');
    pMember.member_bank_name    := pkg_messages_xml.getsingleval(pnode, 'CorrespondentBank/Name');
    pMember.member_bank_account := pkg_messages_xml.getsingleval(pnode, 'CorrespondentBank/AccountNumber');
    --pMember.member_bank_address := pkg_messages_xml.getsingleval(pnode, 'CorrespondentBank/BankAddress');
    pMember.member_bank_address := to_char(pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, 'CorrespondentBank/BankAddress')));
    pMember.MEMBER_BANK_OFFSHORE_ADDR := pkg_messages_xml.getsingleval(pnode, 'CorrespondentBank/BankOffshoreAddr');
    if pMember.MEMBER_BANK_OFFSHORE_ADDR is not null then pMember.MEMBER_BANK_IS_OFFSHORE := 1;
     end if;
    pMember.member_taxcode      := pkg_messages_xml.getsingleval(pnode, 'RNN');
    --  pMember.member_okpo         := pkg_messages_xml.getsingleval(pnode,'OKPO');
    --pMember.member_oked     := pkg_messages_xml.getsingleval(pnode, 'OKED');
    pMember.member_oked     := to_char(pkg_messages_xml.GetSingleOKEDVal(pkg_messages_xml.getsingleval(pnode, 'OKED'),pmessid));
    pMember.member_maincode := pkg_messages_xml.getsingleval(pnode, 'IndividualIssue');

    pMember.member_phone    := pkg_messages_xml.getsingleval(pnode, 'PhoneNumber');
    pMember.member_email    := pkg_messages_xml.getsingleval(pnode, 'Email');
    pMember.member_comments := pkg_messages_xml.getsingleval(pnode, 'AdditionalInformation');
    --не было
    pMember.money_trans_sys := pkg_messages_xml.getsingleval(pnode, 'MoneyTransSys');
    if pMember.member_type is null then
      pMember.member_type := 1;
    end if;
    case pMember.member_type
      when 1 then
        pInfoPath := pUrInfoPath;

        pMember.member_ur_name    := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FullName');
        pMember.Member_IsNotNamed := pkg_common.BoolToNumber(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FullName/@IsFullNameSetup'));
        --IsFullNameSetup
        if pversion_id = 2 then
          --Для версии 2--------------------------- (ФИО)------------------------------
          pMember.member_ur_fisthead_name := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FirstHead');
        elsif pversion_id >= 3 then
          ---Только для версии 3 (Код ОПФ + разбиение ФИО)------------------------------
          pMember.Member_Ur_Opf_Code            := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ParticipantOPF');
          pMember.Member_Ur_Fisthead_Firstname  := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FirstHead/FirstName');
          pMember.Member_Ur_Fisthead_Secondname := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FirstHead/SecondName');
          pMember.Member_Ur_Fisthead_Middlename := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FirstHead/MiddleName');
          ---Только для версии 3 (Код ОПФ + разбиение ФИО)------------------------------
        end if;

      when 2 then
        pInfoPath := pAcInfoPath;

        --IsFioNotSetup
        pMember.member_ac_birth_date   := to_date(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DateBirdth'), 'dd.mm.yyyy');
        pMember.member_ac_birth_place  := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'PlaceBirdth');
        pMember.member_ac_doc_typecode := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DocumentIdentity');
        pMember.member_ac_doc_number   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'NumberDocIdentity');
        pMember.member_ac_doc_series   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'SeriesDocIdentity');
        pMember.member_ac_doc_whom     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DocumentIssued');
        pMember.member_ac_doc_date     := to_date(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DateIssuance'), 'dd.mm.yyyy');
        pMember.Member_IsNotNamed      := pkg_common.BoolToNumber(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FIO/@IsFioNotSetup'));
        if pversion_id = 2 then
          --Для версии 2------- (ФИО)------------------------------
          pMember.member_ur_name := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FIO');
        elsif pversion_id >= 3 then
          ---Только для версии 3 (ФИО)------------------------------
          if pMember.Member_IsNotNamed = 0 then
            pMember.Member_Ac_Firstname  := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FIO/FirstName');
            pMember.Member_Ac_Secondname := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FIO/SecondName');
            pMember.Member_Ac_Middlename := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FIO/MiddleName');
          end if;
          ---Только для версии 3 (ФИО)------------------------------
        end if;

      when 3 then
        pInfoPath := pIpInfoPath;

        --IsFioNotSetup
        pMember.member_ac_birth_date   := to_date(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DateBirdth'), 'dd.mm.yyyy');
        pMember.member_ac_birth_place  := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'PlaceBirdth');
        pMember.member_ac_doc_typecode := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DocumentIdentity');
        pMember.member_ac_doc_number   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'NumberDocIdentity');
        pMember.member_ac_doc_series   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'SeriesDocIdentity');
        pMember.member_ac_doc_whom     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DocumentIssued');
        pMember.member_ac_doc_date     := to_date(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'DateIssuance'), 'dd.mm.yyyy');
        pMember.Member_IsNotNamed      := pkg_common.BoolToNumber(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FIO/@IsFioNotSetup'));
        if pversion_id = 2 then
          --Для версии 2------- (ФИО)------------------------------
          pMember.member_ur_name := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FIO');
        elsif pversion_id >= 3 then
          ---Только для версии 3 (ФИО)------------------------------
          if pMember.Member_IsNotNamed = 0 then
            pMember.Member_Ac_Firstname  := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FIO/FirstName');
            pMember.Member_Ac_Secondname := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FIO/SecondName');
            pMember.Member_Ac_Middlename := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'FIO/MiddleName');
          end if;
          ---Только для версии 3 (ФИО)------------------------------
        end if;
      else
        return - 3007; ---6010; --Неправильный код тип участника
    end case;

   -- pMember.member_reg_counrycode := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Country');
    pMember.member_reg_counrycode := pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Country'));
    pMember.member_reg_area       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Area');
    pMember.member_reg_region     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/District');
    pMember.member_reg_sity       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Town');
    pMember.member_reg_street     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Street');
    pMember.member_reg_house      := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/HomeNumber');
    pMember.member_reg_office     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/OfficeNumber');
    pMember.member_reg_postcode   := pkg_messages_xml.getsingleval(pnode,pInfoPath||'URAddress/PostalCode');
    -- pMember.member_seat_counrycode := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Country');
    pMember.member_seat_counrycode := pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Country'));
    pMember.member_seat_area       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Area');
    pMember.member_seat_region     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/District');
    pMember.member_seat_sity       := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Town');
    pMember.member_seat_street     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Street');
    pMember.member_seat_house      := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/HomeNumber');
    pMember.member_seat_office     := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/OfficeNumber');
    pMember.member_seat_postcode  := pkg_messages_xml.getsingleval(pnode,pInfoPath||'ACAddress/PostalCode');

    ---Только для версии 3 (Страны согласно справочнику ИС АР)------------------------------
    if pversion_id >= 3 then
        pMember.member_reg_area_code   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Area/@Code');
        pMember.member_reg_region_code := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/District/@Code');
        pMember.member_reg_sity_code   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Town/@Code');
        pMember.member_reg_street_code := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/Street/@Code');
        pMember.member_reg_house_code  := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/HomeNumber/@Code');
        pMember.member_reg_office_code := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'URAddress/OfficeNumber/@Code');

        pMember.member_seat_area_code   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Area/@Code');
        pMember.member_seat_region_code := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/District/@Code');
        pMember.member_seat_sity_code   := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Town/@Code');
        pMember.member_seat_street_code := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/Street/@Code');
        pMember.member_seat_house_code  := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/HomeNumber/@Code');
        pMember.member_seat_office_code := pkg_messages_xml.getsingleval(pnode, pInfoPath || 'ACAddress/OfficeNumber/@Code');
    end if;
    ---Только для версии 3  (Страны согласно справочнику ИС АР)------------------------------

    insert into mess_cfm_announce_memb
    values pMember;

    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3003; ---6004; --Ошибка экпорта данных об участнике операции по причине их неверного формата
      return result;
  end;

  function ParseReferInfo(pnode    xmldom.domnode,
                          pmessid  in number,
                          preferid in number) return number is
    result number default 0;
    pRefer mess_cfm_refer%rowtype;
  begin
    pRefer.mess_cfm_id := pmessid;
    pRefer.referid     := preferid + 1;

    pRefer.refer_doc_oper := pkg_messages_xml.getsingleval(pnode, 'ReferenceOperationNumber');
    pRefer.refer_doc_date := to_date(pkg_messages_xml.getsingleval(pnode, 'ReferenceDocOperationDate'), 'dd.mm.yyyy');
    pRefer.refer_doc_num  := pkg_messages_xml.getsingleval(pnode, 'ReferencerDocOperationNumber');

    insert into mess_cfm_refer
    values pRefer;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3003; ---6004; --Ошибка экпорта данных об участнике операции по причине их неверного формата
      return result;
  end;

  function ParseFounderInfo(pnode       xmldom.domnode,
                            pmessid     in number,
                            pmemberid   in number,
                            pfounderid  in number,
                            pversion_id number) return number is
    result    number default 0;
    pFounnder mess_cfm_announce_found%rowtype;

  begin
    pFounnder.Founder_Id  := pfounderid + 1;
    pFounnder.mess_cfm_id := pmessid;
    pFounnder.member_id   := pmemberid + 1;
    if pversion_id = 2 then
      pFounnder.founder_ur_name := pkg_messages_xml.getsingleval(pnode, 'Name');
    elsif pversion_id >= 3 then
      pFounnder.Founder_Type := pkg_messages_xml.getsingleval(pnode, 'FounderType');
      case
        when pFounnder.Founder_Type = 1 then
          pFounnder.Founder_Ur_Opf_Code := pkg_messages_xml.getsingleval(pnode, 'FounderOPF');
          pFounnder.founder_ur_name     := pkg_messages_xml.getsingleval(pnode, 'Name');
        when pFounnder.Founder_Type = 2 then
          pFounnder.Founder_Ac_Firstname  := pkg_messages_xml.getsingleval(pnode, 'FirstName');
          pFounnder.Founder_Ac_Secondname := pkg_messages_xml.getsingleval(pnode, 'SecondName');
          pFounnder.Founder_Ac_Middlename := pkg_messages_xml.getsingleval(pnode, 'MiddleName');
        when pFounnder.Founder_Type = 3 then
          pFounnder.Founder_Ac_Firstname  := pkg_messages_xml.getsingleval(pnode, 'FirstName');
          pFounnder.Founder_Ac_Secondname := pkg_messages_xml.getsingleval(pnode, 'SecondName');
          pFounnder.Founder_Ac_Middlename := pkg_messages_xml.getsingleval(pnode, 'MiddleName');
         when pFounnder.Founder_Type >3 then
          pFounnder.Founder_Ur_Opf_Code := pkg_messages_xml.getsingleval(pnode, 'FounderType');
          pFounnder.founder_ur_name     := pkg_messages_xml.getsingleval(pnode, 'Name');
          pFounnder.Founder_Ac_Firstname  := pkg_messages_xml.getsingleval(pnode, 'FirstName');
          pFounnder.Founder_Ac_Secondname := pkg_messages_xml.getsingleval(pnode, 'SecondName');
          pFounnder.Founder_Ac_Middlename := pkg_messages_xml.getsingleval(pnode, 'MiddleName');
        else
          return - 3006;
      end case;
    end if;
    --pFounnder.founder_ur_residence_c_code := pkg_messages_xml.getsingleval(pnode, 'MemberCommunityCityCode');
    pFounnder.founder_ur_residence_c_code := pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, 'MemberCommunityCityCode'));
    insert into mess_cfm_announce_found
    values pFounnder;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3005; ---6004; --Ошибка экпорта данных об участнике операции по причине их неверного формата
      return result;
  end;

  function ParseFoundersInfo(pnode       xmldom.domnode,
                             pmessid     in number,
                             pmemberid   in number,
                             pversion_id number) return number is
    result    number default 0;
    vNodeList xmldom.domnodelist;
    vnode     xmldom.domnode;

  begin
    vNodeList := pkg_messages_xml.GetNodesList(pnode, 'Founders/Founder');
    for i in 0 .. xmldom.getLength(vNodeList) - 1 loop
      vnode  := xmldom.item(vNodeList, i);
      result := ParseFounderInfo(vnode, pmessid, pmemberid, i, pversion_id);
      if result <> 0 then
        return result;
      end if;
    end loop;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3005; --Ошибка экпорта данных об учредителе участнике операции по причине их неверного формата
      return result;
  end;

  function ParseAccountInfo(pnode       xmldom.domnode,
                            pmessid     in number,
                            pmemberid   in number,
                            paccountid  in number,
                            pversion_id number) return number is
    result   number default 0;
    pAccount mess_cfm_announce_accounts%rowtype;

  begin
    pAccount.accountId   := paccountid + 1;
    pAccount.mess_cfm_id := pmessid;
    pAccount.memberid    := pmemberid + 1;

    pAccount.Accountnumber := pkg_messages_xml.getsingleval(pnode, 'AccountNumber');
    pAccount.Bankname      := pkg_messages_xml.getsingleval(pnode, 'BankName');
    pAccount.Bankcode      := pkg_messages_xml.getsingleval(pnode, 'BankCode');
    -- pAccount.Bankaddress   := pkg_messages_xml.getsingleval(pnode, 'BankAddress');
    pAccount.Bankaddress   := to_char(pkg_messages_xml.GetSingleOKSMTVal(pkg_messages_xml.getsingleval(pnode, 'BankAddress')));

    insert into mess_cfm_announce_accounts
    values pAccount;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3014; -- Неверный формат данных в информации о корреспондентских счетах
      return result;
  end;

  function ParseAccountsInfo(pnode       xmldom.domnode,
                             pmessid     in number,
                             pmemberid   in number,
                             pversion_id number) return number is
    result    number default 0;
    vNodeList xmldom.domnodelist;
    vnode     xmldom.domnode;

  begin
    vNodeList := pkg_messages_xml.GetNodesList(pnode, 'CorrespondentBank/CorrespondentsInformations/CorrespondentInformation');
    for i in 0 .. xmldom.getLength(vNodeList) - 1 loop
      vnode  := xmldom.item(vNodeList, i);
      result := ParseAccountInfo(vnode, pmessid, pmemberid, i, pversion_id);
      if result <> 0 then
        return result;
      end if;
    end loop;
    return result;
  EXCEPTION
    WHEN OTHERS THEN
      return - 3014; --Неверный формат данных в информации о корреспондентских счетах
      return result;
  end;

  function ParseMembersInfo(pnode       xmldom.domnode,
                            pmessid     in number,
                            pversion_id number) return number is
    result    number default 0;
    vNodeList xmldom.domnodelist;
    vnode     xmldom.domnode;
    ptemperr  number;
  begin
    vNodeList := pkg_messages_xml.GetNodesList(pnode, 'Participants/Participant');
    for i in 0 .. xmldom.getLength(vNodeList) - 1 loop
      vnode  := xmldom.item(vNodeList, i);
      result := ParseMemberInfo(vnode, pmessid, i, pversion_id);
      if result <> 0 then
        return result;
      end if;
      result := ParseAccountsInfo(vnode, pmessid, i, pversion_id);
      if result <> 0 then
        ptemperr := result;
      end if;
      result := ParseFoundersInfo(vnode, pmessid, i, pversion_id);
      if result <> 0 then
        return result;
      elsif ptemperr <> 0 then
        return ptemperr;
      end if;
    end loop;
    ------
    return result;
  end;

  function ParseRefersInfo(pnode   xmldom.domnode,
                           pmessid in number) return number is
    result    number default 0;
    vNodeList xmldom.domnodelist;
    vnode     xmldom.domnode;
    ptemperr  number;
  begin
    vNodeList := pkg_messages_xml.GetNodesList(pnode, 'References/Reference');
    for i in 0 .. xmldom.getLength(vNodeList) - 1 loop
      vnode  := xmldom.item(vNodeList, i);
      result := ParseReferInfo(vnode, pmessid, i);
      if result <> 0 then
        return result;
      end if;
    end loop;
    return result;
  end;

  function parseAnnounceXML(pmessid     in number,
                            pversion_id number) return number is
    result   number default 0;
    vres     number default 0;
    vnode    xmldom.domnode;
    pxmlclob clob;
    tempres  number default 0;

  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;

    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);
    /* result:=ParseMessageInfo(vnode,pmessid);
      if result<>0 then vres:=SetErrorCode(pmessid,result); end if;
     result:=ParseCmfInfo(vnode,pmessid);
      if result<>0 then vres:=SetErrorCode(pmessid,result); end if;
     result:=ParseCfmcontactInfo(vnode,pmessid);
      if result<>0 then vres:=SetErrorCode(pmessid,result); end if;
     result:=ParseOperationInfo(vnode,pmessid);
      if result<>0 then vres:=SetErrorCode(pmessid,result); end if;
     result:=ParseMembersInfo(vnode,pmessid);
      if result<>0 then vres:=SetErrorCode(pmessid,result); end if;
    */

    result := ParseMessageInfo(vnode, pmessid, pversion_id);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    result := ParseCmfInfo(vnode, pmessid, pversion_id);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    result := ParseCfmcontactInfo(vnode, pmessid, pversion_id);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    result := ParseOperationInfo(vnode, pmessid, pversion_id);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    result := ParseMembersInfo(vnode, pmessid, pversion_id);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    result := ParseRefersInfo(vnode, pmessid);

    if result <> 0 then
      vres    := SetErrorCode(pmessid, result);
      tempres := result;
    end if;
    if tempres = 0 then
      vres := SetErrorCode(pmessid, 0);
      return vres;
    end if;
    return tempres;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      return - 305; --Неверный XML документ  -- изменть
      return result;
  end;

  function parseCheckXML(pmessid in number) return number is
    result   number default 0;
    vnode    xmldom.domnode;
    pxmlclob clob;

    vCheck mess_cfm_check%rowtype;
  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vCheck.Mess_Cfm_Id := pmessid;

    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);

    vCheck.Errorcode := pkg_messages_xml.getsingleval(vnode, 'ErrorCode');
    vCheck.ErrorName := pkg_messages_xml.getsingleval(vnode, 'ErrorName');
    insert into mess_cfm_check
    values vcheck;

    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3008);
      return - 3008; --Неверный формат данных в квитанции
      return result;
  end;

  function parseDopInfXML(pmessid in number) return number is
    result   number default 0;
    vnode    xmldom.domnode;
    pxmlclob clob;

    vDopInf mess_cfm_dopinf%rowtype;
  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vDopInf.Mess_Cfm_Id := pmessid;

    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);

    vDopInf.Description := pkg_messages_xml.getsingleval(vnode, 'Description');
    vDopInf.Days_Count  := pkg_messages_xml.getsingleval(vnode, 'CountDays');
    insert into mess_cfm_dopinf
    values vDopInf;

    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3009);
      return - 3009; --Неверный формат данных в ответе на дополнительную информацию
      return result;
  end;

  function parseDopInfAnswXML(pmessid in number) return number is
    result    number default 0;
    vnode     xmldom.domnode;
    pnode     xmldom.domnode;
    vNodeList xmldom.domnodelist;
    pxmlclob  clob;

    vDopInfAnsw mess_cfm_dopinf_answ%rowtype;
  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vDopInfAnsw.Mess_Cfm_Id := pmessid;

    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);

    vNodeList := pkg_messages_xml.GetNodesList(pnode, 'Attachments/Attachment');
    for i in 0 .. xmldom.getLength(vNodeList) - 1 loop
      vnode                     := xmldom.item(vNodeList, i);
      vDopInfAnsw.Attach_Id     := i;
      vDopInfAnsw.Attach_Name   := pkg_messages_xml.getsingleval(vnode, 'FileName');
      vDopInfAnsw.Attach_Length := pkg_messages_xml.getsingleval(vnode, 'Length');
      insert into mess_cfm_dopinf_answ
      values vDopInfansw;
    end loop;

    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3010); -- Неверный формат данных в ответе на дополнительную информацию
      return - 3010; --Неверный XML документ
      return result;
  end;

  function parseUpdateRequestXML(pmessid in number) return number --Запрос на обновление
   is
    result number default 0;
    vnode  xmldom.domnode;

    pxmlclob clob;

    vUpdate mess_cfm_update_info%rowtype;
  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vUpdate.Mess_Cfm_Id := pmessid;

    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);

    vUpdate.Update_Version := pkg_messages_xml.getsingleval(vnode, 'RequestedVersion');
    -- vUpdate.Release_Date:=to_date(pkg_messages_xml.getsingleval(vnode,'ReleaseDate'),'yyyy-mm-dd');

    insert into mess_cfm_update_info
    values vupdate;
    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3013); --Неверный формат данных в запросе на обновление
      return - 3013; --Неверный XML документ
      return result;
  end;

  function ParseUpdateInfoXML(pmessid in number) return number is
    result     number default 0;
    vnode      xmldom.domnode;
    pnode      xmldom.domnode;
    pnode1     xmldom.domnode;
    vNodeList  xmldom.domnodelist;
    vNodeList1 xmldom.domnodelist;
    pxmlclob   clob;

    vUpdateVersion varchar2(300);
    vDateRelease   date;
    vmodulename    varchar2(100 char);

  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vnode := pkg_messages_xml.GetParsedXML(pxmlclob);

    --Головное обновление
    vUpdateVersion := pkg_messages_xml.getsingleval(vnode, 'UpdateVersion');
    vDateRelease   := to_date(pkg_messages_xml.getsingleval(vnode, 'ReleaseDate'), 'yyyy-mm-dd');
    insert into mess_cfm_update_info
      (mess_cfm_id,
       update_version,
       release_date)
    values
      (pmessid,
       vupdateversion,
       vDateRelease);

    if pkg_updates_cfm.existsInHisory(vUpdateVersion, vDateRelease) = 0 then
      insert into updates_cfm_hist
        (messid,
         version,
         daterelease)
      values
        (pmessid,
         vUpdateVersion,
         vDateRelease);

      --Используемые модули
      vNodeList := pkg_messages_xml.GetNodesList(vnode, 'Using/Use');
      for i in 0 .. xmldom.getLength(vnodelist) - 1 loop
        pnode       := xmldom.item(vnodelist, i);
        vmodulename := xslprocessor.valueOf(pnode, 'text()');
        insert into updates_cfm_hist_mod
          (version,
           modulename,
           messid)
        values
          (vUpdateVersion,
           vmodulename,
           pmessid);
      end loop;
    end if;

    --История версий обновлений
    vNodeList := pkg_messages_xml.GetNodesList(vnode, 'Histories/History');
    for i in 0 .. xmldom.getLength(vnodelist) - 1 loop
      pnode          := xmldom.item(vnodelist, i);
      vUpdateVersion := pkg_messages_xml.getsingleval(pnode, 'Version');
      vDateRelease   := to_date(pkg_messages_xml.getsingleval(pnode, 'ReleaseDate'), 'yyyy-mm-dd');

      if pkg_updates_cfm.existsInHisory(vUpdateVersion, vDateRelease) = 0 then
        insert into updates_cfm_hist
          (messid,
           version,
           daterelease)
        values
          (pmessid,
           vUpdateVersion,
           vDateRelease);

        --Используемые модули
        vnodelist1 := pkg_messages_xml.GetNodesList(pnode, 'Using/Use');
        for j in 0 .. xmldom.getLength(vnodelist1) - 1 loop
          pnode1      := xmldom.item(vnodelist1, j);
          vmodulename := xslprocessor.valueOf(pnode1, 'text()');
          insert into updates_cfm_hist_mod
            (version,
             modulename,
             messid)
          values
            (vUpdateVersion,
             vmodulename,
             pmessid);
        end loop;
      end if;
    end loop;

    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3011); --Неверный формат данных в информационнном сообщении об обновлении
      return - 3011; --Неверный XML документ
      return result;
  end;

  function ParseUpdateXML(pmessid in number) return number is
    result    number default 0;
    vnode     xmldom.domnode;
    vNodeList xmldom.domnodelist;
    pxmlclob  clob;

    vUpdateVersion varchar2(300);
    vDateRelease   date;
    vmodulename    varchar2(100 char);
    cursor moduleCur is
      select distinct modulename
      from updates_cfm_modulenames;

  begin
    select mess_xml
    into pxmlclob
    from mess_cfm_xml
    where mess_cfm_id = pmessid;
    vnode          := pkg_messages_xml.GetParsedXML(pxmlclob);
    vUpdateVersion := pkg_messages_xml.getsingleval(vnode, 'UpdateVersion');
    vDateRelease   := to_date(pkg_messages_xml.getsingleval(vnode, 'ReleaseDate'), 'yyyy-mm-dd');
    insert into mess_cfm_update_info
      (mess_cfm_id,
       update_version,
       release_date)
    values
      (pmessid,
       vupdateversion,
       vDateRelease);

    insert into updates_cfm_hist
      (messid,
       version,
       daterelease)
    values
      (pmessid,
       vUpdateVersion,
       vDateRelease);

    --Используемые модули
    vnodelist := xslprocessor.selectNodes(vnode, 'UpdateInformations/UpdateInformation/Using/Use/ModuleName');
    for i in 0 .. xmldom.getLength(vnodelist) - 1 loop
      vnode       := xmldom.item(vnodelist, i);
      vmodulename := xslprocessor.valueOf(vnode, 'text()');
      insert into updates_cfm_modulenames
        (modulename)
      values
        (vmodulename);
    end loop;

    for modulerow in moduleCur loop
      insert into updates_cfm_hist_mod
        (version,
         modulename,
         messid)
      values
        (vUpdateVersion,
         modulerow.modulename,
         pmessid);
    end loop;

    return result;
  EXCEPTION
    WHEN no_data_found THEN
      return - 1000;
    WHEN OTHERS THEN
      result := SetErrorCode(pmessid, -3012); --Неверный формат данных в информационнном сообщении собновлением
      return - 3012; --Неверный XML документ
      return result;
  end;

  function SetErrorCode(pmessid  in number,
                        perrcode in number) return number is
  begin
    update mess_cfm
    set int_err_code = perrcode
    where mess_cfm_id = pmessid;
    return 0;

  exception
    when no_data_found then
      return - 1000;
  end;

  function getcolumn_length(p_table_name in varchar2,
                            p_name       in varchar2,
                            p_length     out number) return number is
    result number default 0;
  begin

    select data_length
    into p_length
    from USER_TAB_COLUMNS
    where table_name = upper(p_table_name)
    and column_name = upper(p_name);
    return result;

  exception
    when others then
      return - 2099;

  end;

  function GetOuterAnnounceXML_2(PXMLSCH1 xmltype) return xmltype is
    pXML    xmltype;
    PXMLSCH xmltype;
    i       number default 1;
    j       number default 1;
    --i number
  begin
    begin
      select updateXml(PXMLSCH1,
                       --     'Root/PersonalData/OrganisationCode/text()',
                       --       pkg_analytic.GetDescription(extractvalue(PXMLSCH,'Root/PersonalData/OrganisationCode/text()'),1005),
                       --     'Root/MessageInformation/ViewOperationId/text()',
                       --       pkg_analytic.GetDescription(extractvalue(PXMLSCH,'Root/MessageInformation/ViewOperationId/text()'),21004),
                       --     'Root/MessageInformation/EknpId/text()',
                       --       pkg_analytic.GetDescription(extractvalue(PXMLSCH,'Root/MessageInformation/EknpId/text()'),21017),
                       --     'Root/MessageInformation/CurrencyCodeId/text()',
                       --       pkg_analytic.GetDescription(extractvalue(PXMLSCH,'Root/MessageInformation/CurrencyCodeId/text()'),21018),
                       --     'Root/MessageInformation/ReasonFilingId/text()',
                       --       pkg_analytic.GetDescription(extractvalue(PXMLSCH,'Root/MessageInformation/ReasonFilingId/text()'),21011),
                       'Root/MessageInformation/SuspicionsCriterians/text()',
                       pkg_analytic.GetDescription(extractvalue(PXMLSCH1, 'Root/MessageInformation/SuspicionsCriterians/text()'), 21012),
                       'Root/MessageInformation/DocumentType/text()',
                       pkg_analytic.GetDescription(extractvalue(PXMLSCH1, 'Root/MessageInformation/DocumentType/text()'), 21009),
                       'Root/MessageInformation/OperationStatusId/text()',
                       pkg_analytic.GetDescription(extractvalue(PXMLSCH1, 'Root/MessageInformation/OperationStatusId/text()'), 21010),
                       'Root/MessageInformation/SuspicionFirst/text()',
                       pkg_analytic.GetShortDescription(extractvalue(PXMLSCH1, 'Root/MessageInformation/SuspicionFirst/text()'), 21008),
                       'Root/MessageInformation/SuspicionSecond/text()',
                       pkg_analytic.GetShortDescription(extractvalue(PXMLSCH1, 'Root/MessageInformation/SuspicionSecond/text()'), 21008),
                       'Root/MessageInformation/SuspicionThird/text()',
                       pkg_analytic.GetShortDescription(extractvalue(PXMLSCH1, 'Root/MessageInformation/SuspicionThird/text()'), 21008))
      into pXML
      from dual;
      PXMLSCH := pxml;

      select appendChildXML(PXMLSCH, 'Root/MessageInformation/ReasonFilingId', XMLType('<Descr>' || pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/MessageInformation/ReasonFilingId/text()'), 21011) || '</Descr>'))
      into pxml
      from dual;
    exception
      when others then
        pXML := PXMLSCH1;
    end;

    PXMLSCH := pxml;

    begin
      loop
        if (xmltype.existsNode(pxml, 'Root/Participants/Participant[' || to_char(i) || ']') = 1) then
          select updateXml(PXMLSCH,
                           'Root/Participants/Participant[' || to_char(i) || ']/MemberId/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/MemberId/text()'), 21013),
                           'Root/Participants/Participant[' || to_char(i) || ']/ParticipantsView/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/ParticipantsView/text()'), 21006),
                           --     'Root/Participants/Participant['||to_char(i)||']/ParticipantsType/text()',
                           --       pkg_analytic.GetDescription(extractvalue(PXMLSCH,'Root/Participants/Participant['||to_char(i)||']/ParticipantsType/text()'),10),
                           'Root/Participants/Participant[' || to_char(i) || ']/IsClientSubject/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/IsClientSubject/text()'), 21020),
                           'Root/Participants/Participant[' || to_char(i) || ']/MemberCommunityCityCode/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/MemberCommunityCityCode/text()'), 21019),
                           'Root/Participants/Participant[' || to_char(i) || ']/ForeignPerson/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/ForeignPerson/text()'), 21014),
                           'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/BankAddress/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/BankAddress/text()'), 21019),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationAc/URAddress/Country/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationAc/URAddress/Country/text()'), 21019),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationAc/ACAddress/Country/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationAc/ACAddress/Country/text()'), 21019),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationIp/URAddress/Country/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationIp/URAddress/Country/text()'), 21019),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationIp/ACAddress/Country/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationIp/ACAddress/Country/text()'), 21019),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationUr/URAddress/Country/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationUr/URAddress/Country/text()'), 21019),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationUr/ACAddress/Country/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationUr/ACAddress/Country/text()'), 21019)
                           --     'Root/Participants/Participant['||to_char(i)||']/AdditionalPersonInfo/AdditionalInformationAc/DocumentIdentity/text()',
                           --       pkg_analytic.GetDescription(extractvalue(PXMLSCH,'Root/Participants/Participant['||to_char(i)||']/AdditionalPersonInfo/AdditionalInformationAc/DocumentIdentity/text()'),20100) ,
                           --     'Root/Participants/Participant['||to_char(i)||']/AdditionalPersonInfo/AdditionalInformationIp/DocumentIdentity/text()',
                           --       pkg_analytic.GetDescription(extractvalue(PXMLSCH,'Root/Participants/Participant['||to_char(i)||']/AdditionalPersonInfo/AdditionalInformationIp/DocumentIdentity/text()'),20100)

                           )
          into pXML
          from dual;
          PXMLSCH := pxml;
          select appendChildXML(PXMLSCH,
                                'Root/Participants/Participant[' || to_char(i) || ']/ParticipantsType',
                                XMLType('<Descr>' || pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/ParticipantsType/text()'), 10) || '</Descr>'))
          into pxml
          from dual;

          PXMLSCH := pxml;
          j       := 1;
          loop
            if (xmltype.existsNode(pxml, 'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/CorrespondentsInformations/CorrespondentInformation[' || to_char(j) || ']') = 1) then
              select updateXml(PXMLSCH,
                               'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/CorrespondentsInformations/CorrespondentInformation[' || to_char(j) || ']/BankAddress/text()',
                               pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/CorrespondentsInformations/CorrespondentInformation[' || to_char(j) || ']/BankAddress/text()'),
                                                           21019))
              into pXML
              from dual;
            else
              exit;
            end if;
            PXMLSCH := pxml;
            j       := j + 1;
          end loop;
          j := 1;
          loop
            if (xmltype.existsNode(pxml, 'Root/Participants/Participant[' || to_char(i) || ']/Founders/Founder[' || to_char(j) || ']') = 1) then
              select updateXml(PXMLSCH,
                               'Root/Participants/Participant[' || to_char(i) || ']/Founders/Founder[' || to_char(j) || ']/MemberCommunityCityCode/text()',
                               pkg_analytic.GetDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/Founders/Founder[' || to_char(j) || ']/MemberCommunityCityCode/text()'), 21019))
              into pXML
              from dual;
            else
              exit;

            end if;
            PXMLSCH := pxml;
            j       := j + 1;
          end loop;
        else
          exit;
        end if;
        i := i + 1;
      end loop;
    exception
      when others then
        pXML := PXMLSCH;
    end;
    return pxml;
  end;

    function getouterannouncexml_3(pxmlsch1 xmltype) return xmltype is
    pxml    xmltype;
    pxmlsch xmltype;
    i       number default 1;
    j       number default 1;
    --i number
  begin
    begin
      select updatexml(pxmlsch1,
                       'Root/PersonalData/OrganisationOPF/text()',
                       pkg_analytic.getdescription(extractvalue(pxmlsch1, 'Root/PersonalData/OrganisationOPF/text()'), 41003),
                       'Root/MessageInformation/SuspicionsCriterians/text()',
                       pkg_analytic.getdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/SuspicionsCriterians/text()'), 41012),
                       'Root/MessageInformation/DocumentType/text()',
                       pkg_analytic.getdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/DocumentType/text()'), 21009),
                       'Root/MessageInformation/OperationStatusId/text()',
                       pkg_analytic.getdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/OperationStatusId/text()'), 21010),

                       'Root/MessageInformation/ViewOperationId/text()',
                       pkg_analytic.getshortdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/ViewOperationId/text()'), 41004),

                       'Root/MessageInformation/MerchTypes/text()',
                       pkg_analytic.getshortdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/MerchTypes/text()'), 41055),

                       'Root/MessageInformation/EknpId/text()',
                       pkg_analytic.getshortdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/EknpId/text()'), 41017),
                      'Root/MessageInformation/CurrencyCodeId/text()',
                       pkg_analytic.getshortdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/CurrencyCodeId/text()'), 41018),
                      'Root/MessageInformation/DocOperationReason/text()',
                       pkg_analytic.getdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/DocOperationReason/text()'), 41015),
                       'Root/MessageInformation/SuspicionFirst/text()',
                       pkg_analytic.getshortdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/SuspicionFirst/text()'), 41008),
                       'Root/MessageInformation/SuspicionSecond/text()',
                       pkg_analytic.getshortdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/SuspicionSecond/text()'), 41008),
                       'Root/MessageInformation/SuspicionThird/text()',
                      pkg_analytic.getshortdescription(extractvalue(pxmlsch1, 'Root/MessageInformation/SuspicionThird/text()'), 41008) --,
                     )
      into pxml
      from dual;
      pxmlsch := pxml;
      select appendchildxml(pxmlsch, 'Root/MessageInformation/ReasonFilingId', xmltype('<Descr>' || pkg_analytic.getdescription(extractvalue(pxmlsch, 'Root/MessageInformation/ReasonFilingId/text()'), 21011) || '</Descr>')) --
      into pxml
      from dual;
    exception
      when others then
        pxml := pxmlsch1;
    end;
    pxmlsch := pxml;
    begin
      loop
        if (xmltype.existsnode(pxml, 'Root/Participants/Participant[' || to_char(i) || ']') = 1) then
          select updatexml(pxmlsch,
                           'Root/Participants/Participant[' || to_char(i) || ']/MemberId/text()',
                           pkg_analytic.getdescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/MemberId/text()'), 21013),
                           'Root/Participants/Participant[' || to_char(i) || ']/ParticipantsView/text()',
                           pkg_analytic.getdescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/ParticipantsView/text()'), 41006),
                           'Root/Participants/Participant[' || to_char(i) || ']/IsClientSubject/text()',
                           pkg_analytic.getdescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/IsClientSubject/text()'), 21020),
                           'Root/Participants/Participant[' || to_char(i) || ']/MemberCommunityCityCode/text()',
                           pkg_analytic.GetCountryDescription(extractvalue(PXMLSCH, 'Root/Participants/Participant[' || to_char(i) || ']/MemberCommunityCityCode/text()')),
                           'Root/Participants/Participant[' || to_char(i) || ']/ForeignPerson/text()',
                           pkg_analytic.getdescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/ForeignPerson/text()'), 21014),
                           'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/BankOffshoreAddr/text()',
                           pkg_analytic.getshortdescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/BankOffshoreAddr/text()'), 41071),
                           'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/BankAddress/text()',
                           pkg_analytic.GetCountryDescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/BankAddress/text()')),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationAc/URAddress/Country/text()',
                           pkg_analytic.GetCountryDescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationAc/URAddress/Country/text()')),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationAc/ACAddress/Country/text()',
                           pkg_analytic.GetCountryDescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationAc/ACAddress/Country/text()')),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationIp/URAddress/Country/text()',
                           pkg_analytic.GetCountryDescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationIp/URAddress/Country/text()')),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationIp/ACAddress/Country/text()',
                           pkg_analytic.GetCountryDescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationIp/ACAddress/Country/text()')),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationUr/URAddress/Country/text()',
                           pkg_analytic.GetCountryDescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationUr/URAddress/Country/text()')),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationUr/ACAddress/Country/text()',
                           pkg_analytic.GetCountryDescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationUr/ACAddress/Country/text()')),



                           'Root/Participants/Participant[' || to_char(i) || ']/MoneyTransSys/text()',
                           pkg_analytic.getshortdescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/MoneyTransSys/text()'), 41070),
                           'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationUr/ParticipantOPF/text()',
                           pkg_analytic.getdescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/AdditionalPersonInfo/AdditionalInformationUr/ParticipantOPF/text()'), 41003),
                          'Root/Participants/Participant['||to_char(i)||']/AdditionalPersonInfo/AdditionalInformationAc/DocumentIdentity/text()',
                           pkg_analytic.GetDescription(extractvalue(PXMLSCH,'Root/Participants/Participant['||to_char(i)||']/AdditionalPersonInfo/AdditionalInformationAc/DocumentIdentity/text()'),40100)
                           --     'Root/Participants/Participant['||to_char(i)||']/AdditionalPersonInfo/AdditionalInformationIp/DocumentIdentity/text()',
                           --       pkg_analytic.GetDescription(extractvalue(PXMLSCH,'Root/Participants/Participant['||to_char(i)||']/AdditionalPersonInfo/AdditionalInformationIp/DocumentIdentity/text()'),40100)
                           )
          into pxml
          from dual;
          pxmlsch := pxml;
          select appendchildxml(pxmlsch,
                                'Root/Participants/Participant[' || to_char(i) || ']/ParticipantsType',
                                xmltype('<Descr>' || pkg_analytic.getdescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/ParticipantsType/text()'), 10) || '</Descr>'))
          into pxml
          from dual;
          pxmlsch := pxml;
          j       := 1;
          loop
            if (xmltype.existsnode(pxml, 'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/CorrespondentsInformations/CorrespondentInformation[' || to_char(j) || ']') = 1) then
              select updatexml(pxmlsch,
                               'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/CorrespondentsInformations/CorrespondentInformation[' || to_char(j) || ']/BankAddress/text()',
                               pkg_analytic.GetCountryDescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/CorrespondentBank/CorrespondentsInformations/CorrespondentInformation[' || to_char(j) || ']/BankAddress/text()')
                                                           ))
              into pxml
              from dual;
            else
              exit;
            end if;
            pxmlsch := pxml;
            j       := j + 1;
          end loop;
          j := 1;
          loop
            if (xmltype.existsnode(pxml, 'Root/Participants/Participant[' || to_char(i) || ']/Founders/Founder[' || to_char(j) || ']') = 1) then
              select updatexml(pxmlsch,
                               'Root/Participants/Participant[' || to_char(i) || ']/Founders/Founder[' || to_char(j) || ']/MemberCommunityCityCode/text()',
                               pkg_analytic.GetCountryDescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/Founders/Founder[' || to_char(j) || ']/MemberCommunityCityCode/text()')),
                               'Root/Participants/Participant[' || to_char(i) || ']/Founders/Founder[' || to_char(j) || ']/FounderOPF/text()',
                               pkg_analytic.getshortdescription(extractvalue(pxmlsch, 'Root/Participants/Participant[' || to_char(i) || ']/Founders/Founder[' || to_char(j) || ']/FounderOPF/text()'), 41003))
              into pxml
              from dual;
            else
              exit;
            end if;
            pxmlsch := pxml;
            j       := j + 1;
          end loop;
        else
          exit;
        end if;
        i := i + 1;
      end loop;
    exception
      when others then
        pxml := pxmlsch;
    end;
    return pxml;
  end;

  function GetOuterAnnounceXML(PXMLSCH1 xmltype,
                               pversion number) return xmltype is
  begin
    case pversion
      when 2 then
        return GetOuterAnnounceXML_2(PXMLSCH1);
      else
        return GetOuterAnnounceXML_3(PXMLSCH1);
    end case;
  end;

end PKG_MESS_CFM_2;
/

CREATE OR REPLACE PUBLIC SYNONYM PKG_MESS_CFM_2 FOR KFM.PKG_MESS_CFM_2
/


GRANT EXECUTE ON KFM.PKG_MESS_CFM_2 TO KFM_ROLE
/

DROP PACKAGE BODY KFM.PKG_REPORTS
/

CREATE OR REPLACE PACKAGE BODY KFM."PKG_REPORTS" as

  --GetOperationsInfoForPeriod
  function GetOperationsInfoForPeriod(pBeginDate     in date,
                                      pEndDate       in date,
                                      pOperationsCur out sys_refcursor)
    return number is
    result number default 0;
  begin
    open pOperationsCur for
      select mcai.MESS_OPER_STATUS,
             mcao.MESS_CFM_ID,
             mcao.OPER_NUMBER,
             mcao.OPER_IDTYPE,
             mcao.OPER_IDVIEW,
             mcao.OPER_MEMBERS_COUNT,
             mcao.OPER_CURRENCY_CODE,
             mcao.OPER_CURRENCY_AMOUNT,
             mcao.OPER_TENGE_AMOUNT,
             mcao.OPER_REASON,
             mcao.OPER_DOC_NUMBER,
             mcao.OPER_DOC_DATE,
             mcao.OPER_SUSP_FIRST,
             mcao.OPER_SUSP_SECOND,
             mcao.OPER_SUSP_THIRD,
             mcao.OPER_DIFFICULTIES,
             mcao.OPER_DOPINFO
        from mess_cfm_announce_oper mcao
        left join mess_cfm_announce_info mcai
          on mcao.mess_cfm_id = mcai.mess_cfm_id
       where mcao.MESS_CFM_ID in
             (select mc.MESS_CFM_ID
                from mess_cfm mc
               where mc.receive_date between pBeginDate and pEndDate);
    return result;
  exception
    when others then
      return - 1;
  end GetOperationsInfoForPeriod;

  --Отчет по отправленным сообщениям, по которым не пришло ответа за предыдущие сутки
  function GetNoFirstList(pMessagesCur out sys_refcursor) return number is
    result number default 0;
  begin
    open pMessagesCur for
      select mc.mess_cfm_id,
             mc.receive_date,
             mc.send_date,
             mcai.mess_number,
             mcai.mess_type,
             mcai.mess_oper_status,
             mcai.mess_suspic_code,
             mcai.mess_reason_code,
             mcao.OPER_NUMBER,
             mcao.OPER_IDTYPE,
             mcao.OPER_IDVIEW,
             mcao.OPER_MEMBERS_COUNT,
             mcao.OPER_CURRENCY_CODE,
             mcao.OPER_CURRENCY_AMOUNT,
             mcao.OPER_TENGE_AMOUNT,
             mcao.OPER_REASON,
             mcao.OPER_DOC_NUMBER,
             mcao.OPER_DOC_DATE,
             mcao.OPER_SUSP_FIRST,
             mcao.OPER_SUSP_SECOND,
             mcao.OPER_SUSP_THIRD,
             mcao.OPER_DIFFICULTIES,
             mcao.OPER_DOPINFO,
             mv.versionid
        from mess_cfm mc
        left join mess_cfm_announce_oper mcao
          on mc.mess_cfm_id = mcao.mess_cfm_id
        left join mess_cfm_announce_info mcai
          on mcai.mess_cfm_id = mcao.mess_cfm_id
        left join messages_versions mv
          on mv.versioncode = mc.mess_version
       where mc.mess_type = 1
         and (mc.stage = 30 or mc.stage = 40)
         and mc.send_date between trunc(sysdate) - 1 and trunc(sysdate)
         and
            -- не имеется никакой квитанции
             not exists
       (select mcChecks.mess_cfm_id
                from mess_cfm mcChecks
               where mcChecks.Mess_Parentid = mc.Mess_Parentid
                 and (mcChecks.Mess_Type = 3 or mcChecks.Mess_Type = 2));
    return result;
  exception
    when others then
      return - 1;
  end GetNoFirstList;

  --Отчет по отправленным  сообщениям за предыдущие сутки, не прошедшим структурно-логический контроль
  function GetFirstList(pMessagesCur out sys_refcursor) return number is
    result number default 0;
  begin
    open pMessagesCur for
      select mc.mess_cfm_id,
             mc.receive_date,
             mc.send_date,
             mcai.mess_number,
             mcai.mess_type,
             mcai.mess_oper_status,
             mcai.mess_suspic_code,
             mcai.mess_reason_code,
             mcao.OPER_NUMBER,
             mcao.OPER_IDTYPE,
             mcao.OPER_IDVIEW,
             mcao.OPER_MEMBERS_COUNT,
             mcao.OPER_CURRENCY_CODE,
             mcao.OPER_CURRENCY_AMOUNT,
             mcao.OPER_TENGE_AMOUNT,
             mcao.OPER_REASON,
             mcao.OPER_DOC_NUMBER,
             mcao.OPER_DOC_DATE,
             mcao.OPER_SUSP_FIRST,
             mcao.OPER_SUSP_SECOND,
             mcao.OPER_SUSP_THIRD,
             mcao.OPER_DIFFICULTIES,
             mcao.OPER_DOPINFO,
             mv.versionid
        from mess_cfm mc
        left join mess_cfm_announce_oper mcao
          on mc.mess_cfm_id = mcao.mess_cfm_id
        left join mess_cfm_announce_info mcai
          on mcai.mess_cfm_id = mcao.mess_cfm_id
        left join messages_versions mv
          on mv.versioncode = mc.mess_version
       where mc.mess_type = 1
         and (mc.stage = 30 or mc.stage = 40)
         and mc.send_date between trunc(sysdate) - 1 and trunc(sysdate)
         and
            -- имеется квитанция об отказе
             exists (select mcChecks.mess_cfm_id
                from mess_cfm mcChecks
               where mcChecks.Mess_Parentid = mc.mess_cfm_id
                 and mcChecks.Mess_Type = 3);

    return result;
  end GetFirstList;

  --Отчет по ранее отвергнутым и неисправленным в установленный срок (1 день) сообщениям за предыдущие сутки
  function GetSecondList(pMessagesCur out sys_refcursor) return number is
    result number default 0;
  begin
    open pMessagesCur for
      select mc.mess_cfm_id,
             mc.receive_date,
             mc.send_date,
             mcai.mess_number,
             mcai.mess_type,
             mcai.mess_oper_status,
             mcai.mess_suspic_code,
             mcai.mess_reason_code,
             mcao.OPER_NUMBER,
             mcao.OPER_IDTYPE,
             mcao.OPER_IDVIEW,
             mcao.OPER_MEMBERS_COUNT,
             mcao.OPER_CURRENCY_CODE,
             mcao.OPER_CURRENCY_AMOUNT,
             mcao.OPER_TENGE_AMOUNT,
             mcao.OPER_REASON,
             mcao.OPER_DOC_NUMBER,
             mcao.OPER_DOC_DATE,
             mcao.OPER_SUSP_FIRST,
             mcao.OPER_SUSP_SECOND,
             mcao.OPER_SUSP_THIRD,
             mcao.OPER_DIFFICULTIES,
             mcao.OPER_DOPINFO,
             mv.versionid
        from mess_cfm mc
        left join mess_cfm_announce_oper mcao
          on mc.mess_cfm_id = mcao.mess_cfm_id
        left join mess_cfm_announce_info mcai
          on mcai.mess_cfm_id = mcao.mess_cfm_id
        left join messages_versions mv
          on mv.versioncode = mc.mess_version
       where mc.mess_type = 1
         and (mc.stage = 30 or mc.stage = 40)
         and mc.send_date between trunc(sysdate) - 1 and trunc(sysdate)
         and
            -- имеется квитанция об отказе
             exists
       (select mcChecks.mess_cfm_id
                from mess_cfm mcChecks
               where mcChecks.Mess_Parentid = mc.mess_cfm_id
                 and mcChecks.mess_type = 3
                 and not exists
               (select mcRetry.mess_cfm_id
                        from mess_cfm mcRetry
                       inner join mess_cfm_announce_info mcaiRetry
                          on mcaiRetry.mess_cfm_id = mcRetry.Mess_Cfm_Id
                       where mcRetry.Mess_Parentid = mc.mess_cfm_id
                         and mcRetry.mess_type = 1
                         and mcaiRetry.mess_type = 2
                         and --исправление
                             mcRetry.Receive_Date < mcChecks.receive_date + 1));
    --               exists (select mcChecks2.mess_cfm_id
    --                        from mess_cfm mcChecks2
    --                        where mcChecks2.Parentmessid=mc.mess_cfm_id and
    --                        mcChecks2.messtype=2))

    return result;
  end GetSecondList;

  -- Отправлено за текущие сутки
  function GetThirdList(pMessagesCur out sys_refcursor) return number is
    result number default 0;
  begin
    open pMessagesCur for
      select mc.mess_cfm_id,
             mc.receive_date,
             mc.send_date,
             mcai.mess_number,
             mcai.mess_type,
             mcai.mess_oper_status,
             mcai.mess_suspic_code,
             mcai.mess_reason_code,
             mcao.OPER_NUMBER,
             mcao.OPER_IDTYPE,
             mcao.OPER_IDVIEW,
             mcao.OPER_MEMBERS_COUNT,
             mcao.OPER_CURRENCY_CODE,
             mcao.OPER_CURRENCY_AMOUNT,
             mcao.OPER_TENGE_AMOUNT,
             mcao.OPER_REASON,
             mcao.OPER_DOC_NUMBER,
             mcao.OPER_DOC_DATE,
             mcao.OPER_SUSP_FIRST,
             mcao.OPER_SUSP_SECOND,
             mcao.OPER_SUSP_THIRD,
             mcao.OPER_DIFFICULTIES,
             mcao.OPER_DOPINFO,
             mv.versionid
        from mess_cfm mc
        left join mess_cfm_announce_oper mcao
          on mc.mess_cfm_id = mcao.mess_cfm_id
        left join mess_cfm_announce_info mcai
          on mcai.mess_cfm_id = mcao.mess_cfm_id
        left join messages_versions mv
          on mv.versioncode = mc.mess_version
       where mc.mess_type = 1
         and (mc.stage = 30 or mc.stage = 40)
         and mc.receive_date between trunc(sysdate) and sysdate;
    return result;
  end GetThirdList;

  --GetFirstOrSecondListHTML2
  function GetFirstOrSecondListHTML2(pReportName   in varchar2,
                                     pMessagesCur  in sys_refcursor,
                                     pMessagesHTML out clob) return number is
    TAG_STYLED_TR    constant varchar2(31) := '<tr style="background:#cccccc">';
    TAG_END_TR       constant varchar2(5 char) := '</tr>';
    TAG_END_TD       constant varchar2(5 char) := '</td>';
    TAG_TD           constant varchar2(4) := '<td>';
    TAG_END_B_END_TD constant varchar2(9) := '</b></td>';
    TAG_TD_B         constant varchar2(7) := '<td><b>';
    TAG_TR           constant varchar2(4) := '<tr>';
    TAG_TABLE_END    constant varchar2(8) := '</table>';
    TAG_TABLE_BEGIN  constant varchar2(110) := '<table cellpadding="4" border="1" bordercolor=#000000 style="border-collapse:collapse" width="100%">';
    result number default 0;

    vMESSID       mess_cfm.mess_cfm_id%TYPE;
    vRECEIVE_DATE mess_cfm.receive_date%TYPE;
    vSEND_DATE    mess_cfm.send_date%TYPE;

    vMESSNUMBER      mess_cfm_announce_info.mess_number%TYPE;
    vMESSDOCTYPE     mess_cfm_announce_info.mess_type%TYPE;
    vOPERATIONSTATUS mess_cfm_announce_info.mess_oper_status%TYPE;
    vREASONCRITERY   mess_cfm_announce_info.mess_suspic_code%TYPE;
    vREASON          mess_cfm_announce_info.mess_reason_code%TYPE;

    vOPERATIONNUMBER     mess_cfm_announce_oper.oper_number%TYPE;
    vIDTYPEOPERATION     mess_cfm_announce_oper.oper_idtype%TYPE;
    vIDVIEWOPERATION     mess_cfm_announce_oper.oper_idview%TYPE;
    vMEMBERSCOUNT        mess_cfm_announce_oper.oper_members_count%TYPE;
    vCURRENCYCODE        mess_cfm_announce_oper.oper_currency_code%TYPE;
    vAMOUNTCURRENCY      mess_cfm_announce_oper.oper_currency_amount%TYPE;
    vAMOUNTCURRENCYTENGE mess_cfm_announce_oper.oper_tenge_amount%TYPE;

    vDOCOPERATIONNAME   mess_cfm_announce_oper.oper_reason%TYPE;
    vDOCOPERATIONNUMBER mess_cfm_announce_oper.oper_doc_number%TYPE;
    vDOCOPERATIONDATE   mess_cfm_announce_oper.oper_doc_date%TYPE;
    vFISRTCODE          mess_cfm_announce_oper.oper_susp_first%TYPE;
    vSECONDCODE         mess_cfm_announce_oper.oper_susp_second%TYPE;
    vTHIRDCODE          mess_cfm_announce_oper.oper_susp_third%TYPE;
    vTRUBLEDESCRIPTION  mess_cfm_announce_oper.oper_difficulties%TYPE;
    vDOPINFO            mess_cfm_announce_oper.oper_dopinfo%TYPE;
    vVersion            number;

    i                number default 1;
    vStrHeader       VARCHAR2(10000) := '<div align="center"><h3>' ||
                                        pReportName ||
                                        '</h3></div></br></br>';
    vHtmlHeader      varchar2(1000 char) := '<html xmlns="http://www.w3.org/1999/xhtml">' ||
                                       '<head><style type="text/css"> body { background-color: #f0ffff; font-family:Verdana; font-size:10px;  }' ||
                                       '#main_container table tr { border-width: 1px; border-style: solid; font-size:10px; }' ||
                                       '</style> </head> <body> <div id="main_container">';
    vHtmlEnd         varchar2(100 char) := '</div> </body> </html>';
    vTableBeginFirst varchar2(100 char) := '<h3>Документ ';
    vEmptyReport     varchar2(100 char) := '<font>Данные успешно обработаны, соответствующих записей не найдено</font></br></br>';
    tmpClob          clob;
  begin
    pMessagesHTML := vHtmlHeader;
    dbms_lob.append(pMessagesHTML, vStrHeader);
    if pMessagesCur is not null then
      begin
        loop
          fetch pMessagesCur
            into vMESSID,
                 vRECEIVE_DATE,
                 vSEND_DATE,
                 vMESSNUMBER,
                 vMESSDOCTYPE,
                 vOPERATIONSTATUS,
                 vREASONCRITERY,
                 vREASON,
                 vOPERATIONNUMBER,
                 vIDTYPEOPERATION,
                 vIDVIEWOPERATION,
                 vMEMBERSCOUNT,
                 vCURRENCYCODE,
                 vAMOUNTCURRENCY,
                 vAMOUNTCURRENCYTENGE,
                 vDOCOPERATIONNAME,
                 vDOCOPERATIONNUMBER,
                 vDOCOPERATIONDATE,
                 vFISRTCODE,
                 vSECONDCODE,
                 vTHIRDCODE,
                 vTRUBLEDESCRIPTION,
                 vDOPINFO,
                 vVersion;
          exit when pMessagesCur%NOTFOUND;

          tmpClob := vTableBeginFirst || to_char(i) || '</h3>' ||

                     TAG_TABLE_BEGIN || TAG_STYLED_TR ||
                     '<td colspan="4"><b>' || 'Информация о сообщении' ||
                     TAG_END_B_END_TD || TAG_END_TR || TAG_TR || TAG_TD_B ||
                     'Номер сообщения:' || TAG_END_B_END_TD || TAG_TD ||
                     nvl(to_char(vMESSNUMBER), '-') || TAG_END_TD ||
                     TAG_TD_B || 'Дата отправки/получения:' ||
                     TAG_END_B_END_TD || TAG_TD ||
                     nvl(to_char(vRECEIVE_DATE, 'DD.MM.YYYY'), '-') ||
                     TAG_END_TD || TAG_END_TR || TAG_TR || TAG_TD_B ||
                     'Основание для подачи сообщения:' || TAG_END_B_END_TD ||
                     TAG_TD || nvl(pkg_analytic.GetCodeDescription(vREASON,
                                                                   1011,
                                                                   vversion),
                                   '-') || TAG_END_TD || TAG_TD_B ||

                     'Критерий подозрительности операции:' ||
                     TAG_END_B_END_TD || TAG_TD ||
                     nvl(pkg_analytic.GetCodeDescription(vREASONCRITERY,
                                                         1012,
                                                         vversion),
                         '-') || TAG_END_TD || TAG_END_TR || TAG_TABLE_END ||
                     TAG_TABLE_BEGIN || TAG_STYLED_TR ||
                     '<td colspan="10"><b>' || 'Информация об операции' ||
                     TAG_END_B_END_TD || TAG_END_TR || TAG_TR ||
                     '<td colspan="2" rowspan="2"><b>' ||
                     'Внутренний номер операции СФМ:' || TAG_END_B_END_TD ||
                     '<td rowspan="2">' || nvl(vOPERATIONNUMBER, '-') ||
                     TAG_END_TD || '<td rowspan="2"><b>' ||
                     'Количество участников:' || TAG_END_B_END_TD ||
                     '<td rowspan="2">' || nvl(to_char(vMEMBERSCOUNT), '-') ||
                     TAG_END_TD || '<td rowspan="2"><b>' || 'Сумма:' ||
                     TAG_END_B_END_TD || TAG_TD || vAMOUNTCURRENCY ||
                     TAG_END_TD || TAG_TD ||
                     pkg_analytic.GetCodeDescription(vCURRENCYCODE,
                                                     1018,
                                                     vversion) ||
                     TAG_END_TD || '<td rowspan="2"><b>' || 'Состояние:' ||
                     TAG_END_B_END_TD || '<td rowspan="2">' ||
                     nvl(pkg_analytic.GetCodeDescription(vOPERATIONSTATUS,
                                                         1010,
                                                         vversion),
                         '-') || TAG_END_TD || TAG_END_TR || TAG_TR ||
                     TAG_TD || vAMOUNTCURRENCYTENGE || TAG_END_TD || TAG_TD ||
                     'KZT - Тенге' || TAG_END_TD || TAG_END_TR || TAG_TR ||
                     '<td><b>' || 'Код типа:' || TAG_END_B_END_TD ||
                     '<td colspan="9">' || nvl(pkg_analytic.GetCodeDescription(vIDTYPEOPERATION,
                                                                               1017,
                                                                               vversion),
                                               '-') || TAG_END_TD ||
                     TAG_END_TR || TAG_TR || TAG_TD_B || 'Код вида:' ||
                     TAG_END_B_END_TD || '<td colspan="9">' ||
                     nvl(pkg_analytic.GetCodeDescription(vIDVIEWOPERATION,
                                                         1004,
                                                         vversion),
                         '-') || TAG_END_TD || TAG_END_TR || TAG_TABLE_END ||
                     TAG_TABLE_BEGIN || TAG_STYLED_TR ||
                     '<td colspan="6"><b>' ||
                     'Документ, на основании которого произведена операция' ||
                     TAG_END_B_END_TD || TAG_END_TR || TAG_TR || '<td><b>' ||
                     'Основание совершения операции:' || '</b></td>' ||
                     '<td>' || nvl(vDOCOPERATIONNAME, '-') || '</td>' ||
                     '<td><b>' || 'Номер:' || '</b></td>' || '<td>' ||
                     vDOCOPERATIONNUMBER || '</td>' || '<td><b>' ||
                     'Дата выдачи:' || '</b></td>' || '<td>' ||
                     nvl(to_char(vDOCOPERATIONDATE, 'DD.MM.YYYY'), '-') ||
                     '</td>' || TAG_END_TR || TAG_TABLE_END ||
                     TAG_TABLE_BEGIN || TAG_STYLED_TR ||
                     '<td colspan="6"><b>' ||
                     'Коды признака подозрительности  операции:' ||
                     '</b></td>' || TAG_END_TR || TAG_TR || '<td><b>' ||
                     '1-ый:' || '</b></td>' || '<td>' ||
                     nvl(pkg_analytic.GetShortCodeDescription(vFISRTCODE,
                                                              1008,
                                                              vversion),
                         '-') || '</td>' || '<td>' ||
                     nvl(pkg_analytic.GetCodeDescription(vFISRTCODE,
                                                         1008,
                                                         vversion),
                         '-') || '</td>' || TAG_END_TR || TAG_TR ||
                     '<td><b>' || '2-ой:' || '</b></td>' || '<td>' ||
                     nvl(pkg_analytic.GetShortDescription(vSECONDCODE, 1008),
                         '-') || '</td>' || '<td>' ||
                     nvl(pkg_analytic.GetCodeDescription(vSECONDCODE,
                                                         1008,
                                                         vversion),
                         '-') || '</td>' || TAG_END_TR || TAG_TR ||
                     '<td><b>' || '3-ий:' || '</b></td>' || '<td>' ||
                     nvl(pkg_analytic.GetShortCodeDescription(vTHIRDCODE,
                                                              1008,
                                                              vversion),
                         '-') || '</td>' || '<td>' ||
                     nvl(pkg_analytic.GetCodeDescription(vTHIRDCODE,
                                                         1008,
                                                         vversion),
                         '-') || '</td>' || TAG_END_TR || TAG_TABLE_END ||
                     TAG_TABLE_BEGIN || TAG_STYLED_TR || '<td><b>' ||
                     'Описание возникших затруднений квалификации операции как подозрительной:' ||
                     '</b></td>' || TAG_END_TR || TAG_TR || '<td>' ||
                     nvl(vTRUBLEDESCRIPTION, '-') || '</td>' || TAG_END_TR ||
                     TAG_STYLED_TR || '<td><b>' ||
                     'Дополнительная информация по операции:' ||
                     '</b></td>' || TAG_END_TR || TAG_TR || '<td>' ||
                     nvl(vDOPINFO, '-') || '</td>' || TAG_END_TR ||
                     TAG_TABLE_END ||

                     '<hr />';
          dbms_lob.append(pMessagesHTML, tmpClob);
          i := i + 1;
        end loop;
      end;
    end if;
    if i = 1 then
      dbms_lob.append(pMessagesHTML, vEmptyReport);
    end if;
    dbms_lob.append(pMessagesHTML, vHtmlEnd);
    return result;
  exception
    when others then
      pkg_exceptions.AddException(sqlcode,
                                  sqlerrm,
                                  'PKG_Reports.GetFirstOrSecondListHTML2');
      return - 1;
  end GetFirstOrSecondListHTML2;

  --GetPitaOrgListHTML2
  function GetPitaOrgListHTML2(pReportName  in varchar2,
                               pMessagesCur out clob) return number is
    TAG_TABLE_END   constant varchar2(8) := '</table>';
    TAG_TABLE_BEGIN constant varchar2(110) := '<table cellpadding="4" border="1" bordercolor=#000000 style="border-collapse:collapse" width="100%">';

    result       number default 0;
    vHtmlHeader  varchar2(1000 char) := '<html xmlns="http://www.w3.org/1999/xhtml">' ||
                                   '<head><style type="text/css"> body { background-color: #f0ffff; font-family:Verdana; font-size:10px;  }' ||
                                   '#main_container table tr { border-width: 1px; border-style: solid; font-size:10px; }' ||
                                   '</style> </head> <body> <div id="main_container">';
    vHtmlEnd     varchar2(100 char) := '</div> </body> </html>';
    vStrHeader   VARCHAR2(10000) := '<div align="center"><h3>' ||
                                    pReportName || '</h3></div></br></br>';
    vEmptyReport varchar2(100 char) := '<font>Данные успешно обработаны, соответствующих записей не найдено</font></br></br>';
    vTmpLob      clob;
    i            number default 1;
  begin
    pMessagesCur := vHtmlHeader;
    dbms_lob.append(pMessagesCur, vStrHeader);

    FOR vListInfo IN (SELECT m.mess_number as messnumber,
                             m.mess_date as messdate,
                             m.mess_type as messdoctype,
                             ent.MEMBER_TYPE,
                             decode(ent.MEMBER_RESIDENCE,
                                    1,
                                    'Да',
                                    0,
                                    'Нет',
                                    '-') as isResident,
                             ent.MEMBER_RESIDENCE_COUNTRYCODE,
                             ent.MEMBER_UR_NAME,
                             ent.MEMBER_UR_FISTHEAD_NAME,
                             ent.MEMBER_FOREIGN,
                             ent.MEMBER_FOREIGN_ADD,
                             (select o.oper_number
                                from mess_cfm_announce_oper o
                               where o.mess_cfm_id = ent.mess_cfm_id) as opernumber,
                             ent.MEMBER_ROLE,
                             ent.MEMBER_KIND,
                             ent.MEMBER_TAXCODE,
                             ent.MEMBER_OKPO,
                             ent.MEMBER_OKED,
                             ent.MEMBER_MAINCODE,
                             ent.MEMBER_BANK_NAME,
                             ent.MEMBER_BANK_ACCOUNT,
                             ent.MEMBER_BANK_ADDRESS,
                             ent.MEMBER_BANK_CODE,
                             pkg_analytic.GetDescription(ent.MEMBER_REG_COUNRYCODE,
                                                             41019) || ', ' ||
                             ent.MEMBER_REG_AREA || ', ' ||
                             ent.MEMBER_REG_REGION || ', ' ||
                             ent.MEMBER_REG_SITY || ', ' ||
                             ent.MEMBER_REG_STREET || ', ' ||
                             ent.MEMBER_REG_HOUSE || ', ' ||
                             ent.MEMBER_REG_OFFICE || ', ' ||
                             ent.MEMBER_REG_POSTCODE as regaddress,
                             pkg_analytic.GetDescription(ent.MEMBER_SEAT_COUNRYCODE,
                                                             41019) || ', ' ||
                             ent.MEMBER_SEAT_AREA || ', ' ||
                             ent.MEMBER_SEAT_REGION || ', ' ||
                             ent.MEMBER_SEAT_SITY || ', ' ||
                             ent.MEMBER_SEAT_STREET || ', ' ||
                             ent.MEMBER_SEAT_HOUSE || ', ' ||
                             ent.MEMBER_SEAT_OFFICE || ', ' ||
                             ent.MEMBER_SEAT_POSTCODE as seataddress,
                             ent.MEMBER_COMMENTS,
                             ent.MEMBER_PHONE,
                             ent.MEMBER_EMAIL,
                             pkg_pitaholding.ExistsInPitaOrg(ent.mess_cfm_id) as Pitaorg,
                             mv.VersionId
                        FROM mess_cfm_announce_memb ent
                        join mess_cfm_announce_info m
                          on (m.mess_cfm_id = ent.mess_cfm_id)
                        join mess_cfm mc
                          on (mc.mess_cfm_id = ent.mess_cfm_id)
                        join messages_versions mv
                          on (mv.versioncode = mc.mess_version)
                       WHERE ent.member_type = 1) LOOP
      /*     1 - Юридическое лицо
      2 - Физическое лицо
      3 - Индивидуальный предприниматель  */
      if vListInfo.Pitaorg is not null then

        vTmpLob := '<h3>Документ ' || to_char(i) || '</h3>' ||

                   TAG_TABLE_BEGIN ||

                   '<tr><td><b>' || 'Номер сообщения:' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.messnumber), '-') ||
                   '</td><td><b>' || 'Дата сообщения:' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.messdate, 'DD.MM.YYYY'), '-') ||
                   '</td><td><b>' || 'Вид сообщения:' || '</b></td><td>' ||
                   nvl(pkg_analytic.GetCodeDescription(vListInfo.messdoctype,
                                                       1009,
                                                       vListInfo.Versionid),
                       '-') || '</td></tr>' || TAG_TABLE_END ||

                   TAG_TABLE_BEGIN ||

                   '<tr style="background:#cccccc"><td colspan="5"><b>' ||
                   'Информация об объекте:' || '</b></td></tr>' ||

                   '<tr><td><b>' || 'Наименование:' ||
                   '</b></td><td colspan="4">' ||
                   nvl(vListInfo.MEMBER_UR_NAME, '-') || '</td></tr>' ||

                   '<tr><td><b>' || 'ФИО первого руководителя:' ||
                   '</b></td><td colspan="4">' ||
                   nvl(vListInfo.MEMBER_UR_FISTHEAD_NAME, '-') ||
                   '</td></tr>' ||

                   '<tr><td><b>' || 'Тип:' || '</b></td><td>' ||
                   pkg_analytic.GetCodeDescription(vListInfo.MEMBER_TYPE,
                                                   10,
                                                   vListInfo.Versionid) ||
                   '</td><td><b>' || 'Резидент:' || '</b></td><td>' ||
                   vListInfo.isResident || '</td><td colspan="2">' ||
                   nvl(pkg_analytic.GetDescription(vListInfo.MEMBER_RESIDENCE_COUNTRYCODE,
                                                       41019),
                       '-') || '</td></tr>' ||

                   '<tr><td><b>' || 'Аффилированность:' ||
                   '</b></td><td colspan="4">' ||

                   pkg_analytic.GetCodeDescription(vListInfo.MEMBER_FOREIGN,
                                                   1014,
                                                   vListInfo.Versionid) || ' ' ||
                   vListInfo.Member_Foreign_Add || '</td></tr>' ||
                   TAG_TABLE_END || TAG_TABLE_BEGIN ||

                   '<tr style="background:#cccccc"><td colspan="4"><b>' ||
                   'Информация об операции' || '</b></td></tr>' ||

                   '<tr><td><b>' || 'Номер операции:' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.opernumber), ' - ') ||
                   '</td><td><b>' || 'Роль в операции:' || '</b></td><td>' ||
                   pkg_analytic.GetCodeDescription(vListInfo.Member_Role,
                                                   102,
                                                   vListInfo.Versionid) ||
                   '</td></tr><tr><td><b>' || 'Вид участника:' ||
                   '</b></td><td colspan="3">' ||
                   pkg_analytic.GetCodeDescription(vListInfo.Member_Kind,
                                                   1006,
                                                   vListInfo.Versionid) ||
                   '</td></tr>' ||

                   TAG_TABLE_END || TAG_TABLE_BEGIN ||

                   '<tr style="background:#cccccc"><td colspan="8"><b>' ||
                   'Номера' || '</b></td></tr>' ||

                   '<tr><td><b>' || 'РНН' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Taxcode), '-') ||
                   '</td><td><b>' || 'ОКПО' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Okpo), '-') ||
                   '</td><td><b>' || 'ОКЕД' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Oked), '-') ||
                   '</td><td><b>' || 'ИНН/БИН' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Maincode), '-') ||
                   '</td></tr>' ||

                   TAG_TABLE_END || TAG_TABLE_BEGIN ||

                   '</td></tr><tr style="background:#cccccc"><td colspan="4"><b>' ||
                   'Информация о банке-корреспонденте' || '</b></td></tr>' ||

                   '<tr><td><b>' || 'Наименование:' || '</b></td><td>' ||
                   nvl(vListInfo.Member_Bank_Name, '-') || '</td><td><b>' ||
                   'Код:' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Bank_Code), ' - ') ||
                   '</td></tr>' ||

                   '<tr><td><b>' || 'Адрес:' || '</b></td><td>' ||
                   nvl(vListInfo.Member_Bank_Address, ' - ') ||
                   '</td><td><b>' || 'Номер счета:' || '</b></td><td>' ||
                   nvl(vListInfo.Member_Bank_Account, '-') || '</td></tr>' ||

                   TAG_TABLE_END || TAG_TABLE_BEGIN ||

                   '<tr style="background:#cccccc"><td colspan="4"><b>' ||
                   'Контактная информация' || '</b></td></tr>' ||

                   '<tr><td><b>' ||
                   'Место регистрации (постоянного жительства):' ||
                   '</b></td><td>' || nvl(vListInfo.regaddress, '-') ||
                   '</td><td><b>' || 'Телефонный номер:' || '</b></td><td>' ||
                   nvl(vListInfo.Member_Phone, '-') ||
                   '</td></tr>' ||

                   '<tr><td><b>' ||
                   'Место пребывания (фактического нахождения):' ||
                   '</b></td><td>' || nvl(vListInfo.regaddress, '-') ||
                   '</td><td><b>' || 'Адрес электронной почты:' ||
                   '</b></td><td>' || nvl(vListInfo.Member_Email, '-') ||
                   '</td></tr>' || TAG_TABLE_END || TAG_TABLE_BEGIN ||
                   '<tr style="background:#cccccc"><td colspan="1"><b>' ||
                   'Комментарий:' || '</b></td></tr>' || '<tr><td>' ||
                   nvl(vListInfo.Member_Comments, '-') || '</td></tr>' ||
                   TAG_TABLE_END || '<hr/>';

        dbms_lob.append(vTmpLob, vListInfo.Pitaorg);
        dbms_lob.append(pMessagesCur, vTmpLob);
        i := i + 1;

      end if;
    END LOOP;
    if i = 1 then
      dbms_lob.append(pMessagesCur, vEmptyReport);
    end if;
    dbms_lob.append(pMessagesCur, vHtmlEnd);

    return result;
  exception
    when others then
      pkg_exceptions.AddException(sqlcode,
                                  sqlerrm,
                                  'PKG_Reports.GetPitaOrgListHTML2');
      return - 1;
  end GetPitaOrgListHTML2;

  --GetPitaPersListHTML
  function GetPitaPersListHTML(pReportName  in varchar2,
                               pMessagesCur out clob) return number is
    TAG_TABLE_END   constant varchar2(8) := '</table>';
    TAG_TABLE_BEGIN constant varchar2(110) := '<table cellpadding="4" border="1" bordercolor=#000000 style="border-collapse:collapse" width="100%">';
    result      number default 0;
    vTmpLob     clob;
    i           number default 1;
    vHtmlHeader varchar2(1000 char) := '<html xmlns="http://www.w3.org/1999/xhtml">' ||
                                  '<head><style type="text/css"> body { background-color: #f0ffff; font-family:Verdana; font-size:10px;  }' ||
                                  '#main_container table tr { border-width: 1px; border-style: solid; font-size:10px; }' ||
                                  '</style> </head> <body> <div id="main_container">';
    vHtmlEnd    varchar2(100 char) := '</div> </body> </html>';
    vStrHeader  VARCHAR2(10000) := '<div align="center"><h3>' ||
                                   pReportName || '</h3></div></br></br>';

    vEmptyReport varchar2(100 char) := '<font>Данные успешно обработаны, соответствующих записей не найдено</font></br></br>';
  begin
    pMessagesCur := vHtmlHeader;
    dbms_lob.append(pMessagesCur, vStrHeader);

    FOR vListInfo IN (select m.mess_number as messnumber,
                             m.mess_date as messdate,
                             m.mess_type as messdoctype,
                             nvl(ind.member_ur_name,
                                 (ind.MEMBER_AC_SECONDNAME || ' ' ||
                                 ind.MEMBER_AC_FIRSTNAME || ' ' ||
                                 ind.MEMBER_AC_MIDDLENAME)) as fio,
                             ind.MEMBER_TYPE,
                             decode(ind.MEMBER_RESIDENCE,
                                    1,
                                    'Да',
                                    0,
                                    'Нет',
                                    '-') as isResident,
                             ind.MEMBER_RESIDENCE_COUNTRYCODE,
                             ind.MEMBER_FOREIGN,
                             ind.MEMBER_FOREIGN_ADD,
                             (select o.oper_number
                                from mess_cfm_announce_oper o
                               where o.mess_cfm_id = ind.mess_cfm_id) as opernumber,
                             ind.MEMBER_AC_DOC_TYPECODE,
                             ind.MEMBER_AC_DOC_NUMBER,
                             ind.MEMBER_AC_DOC_SERIES,
                             ind.MEMBER_AC_DOC_WHOM,
                             ind.MEMBER_AC_DOC_DATE,
                             ind.MEMBER_AC_BIRTH_DATE,
                             ind.MEMBER_AC_BIRTH_PLACE,
                             ind.MEMBER_ROLE,
                             ind.MEMBER_KIND,
                             ind.MEMBER_TAXCODE,
                             ind.MEMBER_OKPO,
                             ind.MEMBER_OKED,
                             ind.MEMBER_MAINCODE,
                             ind.MEMBER_BANK_NAME,
                             ind.MEMBER_BANK_ACCOUNT,
                             ind.MEMBER_BANK_ADDRESS,
                             ind.MEMBER_BANK_CODE,
                             pkg_analytic.GetDescription(ind.MEMBER_REG_COUNRYCODE,
                                                             41019) || ', ' ||
                             ind.MEMBER_REG_AREA || ', ' ||
                             ind.MEMBER_REG_REGION || ', ' ||
                             ind.MEMBER_REG_SITY || ', ' ||
                             ind.MEMBER_REG_STREET || ', ' ||
                             ind.MEMBER_REG_HOUSE || ', ' ||
                             ind.MEMBER_REG_OFFICE || ', ' ||
                             ind.MEMBER_REG_POSTCODE as regaddress,
                             pkg_analytic.GetDescription(ind.MEMBER_SEAT_COUNRYCODE,
                                                             41019) || ', ' ||
                             ind.MEMBER_SEAT_AREA || ', ' ||
                             ind.MEMBER_SEAT_REGION || ', ' ||
                             ind.MEMBER_SEAT_SITY || ', ' ||
                             ind.MEMBER_SEAT_STREET || ', ' ||
                             ind.MEMBER_SEAT_HOUSE || ', ' ||
                             ind.MEMBER_SEAT_OFFICE || ', ' ||
                             ind.MEMBER_SEAT_POSTCODE as seataddress,
                             ind.MEMBER_COMMENTS,
                             ind.MEMBER_PHONE,
                             ind.MEMBER_EMAIL,
                             pkg_pitaholding.ExistsInPitaPersons(ind.mess_cfm_id) as PitaPerson,
                             mv.versionid
                        FROM mess_cfm_announce_memb ind
                        join mess_cfm_announce_info m
                          on (m.mess_cfm_id = ind.mess_cfm_id)
                        join mess_cfm mc
                          on (mc.mess_cfm_id = ind.mess_cfm_id)
                        join messages_versions mv
                          on (mv.versioncode = mc.mess_version)
                       WHERE ind.member_type = 2
                          or ind.member_type = 3) LOOP
      /*     1 - Юридическое лицо
      2 - Физическое лицо
      3 - Индивидуальный предприниматель  */
      if vListInfo.PitaPerson is not null then
        vTmpLob := '<h3>Документ ' || to_char(i) || '</h3>' ||

                   TAG_TABLE_BEGIN ||

                   '<tr><td><b>' || 'Номер сообщения:' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.messnumber), '-') ||
                   '</td><td><b>' || 'Дата сообщения:' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.messdate, 'DD.MM.YYYY'), '-') ||
                   '</td><td><b>' || 'Вид сообщения:' || '</b></td><td>' ||
                   nvl(pkg_analytic.GetCodeDescription(vListInfo.messdoctype,
                                                       1009,
                                                       vListInfo.versionid),
                       '-') || '</td></tr>' || TAG_TABLE_END ||

                   TAG_TABLE_BEGIN ||

                   '<tr style="background:#cccccc"><td colspan="6"><b>' ||
                   'Информация об объекте:' || '</b></td></tr>' ||

                   '<tr><td><b>' || 'ФИО:' || '</b></td><td colspan="5">' ||
                   nvl(vListInfo.fio, '-') || '</td></tr>' ||

                   '<tr><td><b>' || 'Тип:' || '</b></td><td>' ||
                   pkg_analytic.GetCodeDescription(vListInfo.Member_Type,
                                                   10,
                                                   vListInfo.versionid) ||
                   '</td><td><b>' || 'Резидент:' || '</b></td><td>' ||
                   vListInfo.isResident || '</td><td colspan="2">' ||
                   nvl(pkg_analytic.GetDescription(vListInfo.MEMBER_RESIDENCE_COUNTRYCODE,
                                                       41019),
                       '-') || '</td></tr>' ||

                   '<tr><td><b>' || 'Документ, удостоверяющий личность:' ||
                   '</b></td><td>' ||
                   pkg_analytic.GetCodeDescription(vListInfo.Member_Ac_Doc_Typecode,
                                                   100,
                                                   vListInfo.versionid) ||
                   '</td><td><b>' || 'Серия:' || '</b></td><td>' ||
                   nvl(vListInfo.Member_Ac_Doc_Series, '-') ||
                   '</td><td><b>' || 'Номер:' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Ac_Doc_Number), '-') ||
                   '</td></tr>' ||

                   '<tr><td><b>' || 'Кем выдан:' ||
                   '</b></td><td colspan="2">' ||
                   nvl(vListInfo.Member_Ac_Doc_Whom, '-') ||
                   '</td><td colspan="2"><b>' || 'Дата выдачи:' ||
                   '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Ac_Doc_Date, 'DD.MM.YYYY'),
                       '-') || '</td></tr>' ||

                   '<tr><td><b>' || 'Место рождения:' ||
                   '</b></td><td colspan="2">' ||
                   nvl(vListInfo.Member_Ac_Birth_Place, '-') ||
                   '</td><td colspan="2"><b>' || 'Дата рождения:' ||
                   '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Ac_Birth_Date, 'DD.MM.YYYY'),
                       '-') || '</td></tr>' ||

                   '<tr><td><b>' || 'Аффилированность:' ||
                   '</b></td><td colspan="5">' ||
                   pkg_analytic.GetCodeDescription(vListInfo.Member_Foreign,
                                                   1014,
                                                   vListInfo.versionid) || ' ' ||
                   vListInfo.Member_Foreign_Add || '</td></tr>' ||
                   TAG_TABLE_END || TAG_TABLE_BEGIN ||

                   '<tr style="background:#cccccc"><td colspan="4"><b>' ||
                   'Информация об операции' || '</b></td></tr>' ||

                   '<tr><td><b>' || 'Номер операции:' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.opernumber), '-') ||
                   '</td><td><b>' || 'Роль в операции:' || '</b></td><td>' ||
                   pkg_analytic.GetCodeDescription(vListInfo.Member_Role,
                                                   102,
                                                   vListInfo.versionid) ||
                   '</td></tr><tr><td><b>' || 'Вид участника:' ||
                   '</b></td><td colspan="3">' ||
                   pkg_analytic.GetCodeDescription(vListInfo.Member_Kind,
                                                   1006,
                                                   vListInfo.versionid) ||
                   '</td></tr>' ||

                   TAG_TABLE_END || TAG_TABLE_BEGIN ||

                   '<tr style="background:#cccccc"><td colspan="8"><b>' ||
                   'Номера' || '</b></td></tr>' ||

                   '<tr><td><b>' || 'РНН' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Taxcode), '-') ||
                   '</td><td><b>' || 'ОКПО' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Okpo), '-') ||
                   '</td><td><b>' || 'ОКЕД' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Oked), '-') ||
                   '</td><td><b>' || 'ИНН/БИН' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Maincode), '-') ||
                   '</td></tr>' ||

                   TAG_TABLE_END || TAG_TABLE_BEGIN ||

                   '</td></tr><tr style="background:#cccccc"><td colspan="4"><b>' ||
                   'Информация о банке-корреспонденте' || '</b></td></tr>' ||

                   '<tr><td><b>' || 'Наименование:' || '</b></td><td>' ||
                   nvl(vListInfo.Member_Bank_Name, '-') || '</td><td><b>' ||
                   'Код:' || '</b></td><td>' ||
                   nvl(to_char(vListInfo.Member_Bank_Code), '-') ||
                   '</td></tr>' ||

                   '<tr><td><b>' || 'Адрес:' || '</b></td><td>' ||
                   nvl(vListInfo.Member_Bank_Address, '-') ||
                   '</td><td><b>' || 'Номер счета:' || '</b></td><td>' ||
                   nvl(vListInfo.Member_Bank_Account, '-') || '</td></tr>' ||

                   TAG_TABLE_END || TAG_TABLE_BEGIN ||

                   '<tr style="background:#cccccc"><td colspan="4"><b>' ||
                   'Контактная информация' || '</b></td></tr>' ||

                   '<tr><td><b>' ||
                   'Место регистрации (постоянного жительства):' ||
                   '</b></td><td>' || nvl(vListInfo.regaddress, '-') ||
                   '</td><td><b>' || 'Телефонный номер:' || '</b></td><td>' ||
                   nvl(vListInfo.Member_Phone, '-') ||
                   '</td></tr>' ||

                   '<tr><td><b>' ||
                   'Место пребывания (фактического нахождения):' ||
                   '</b></td><td>' || nvl(vListInfo.regaddress, '-') ||
                   '</td><td><b>' || 'Адрес электронной почты:' ||
                   '</b></td><td >' || nvl(vListInfo.Member_Email, '-') ||
                   '</td></tr>' || TAG_TABLE_END || TAG_TABLE_BEGIN ||
                   '<tr style="background:#cccccc"><td colspan="1"><b>' ||
                   'Комментарий:' || '</b></td></tr>' || '<tr><td>' ||
                   nvl(vListInfo.Member_Comments, '-') || '</td></tr>' ||
                   TAG_TABLE_END || '<hr/>';

        dbms_lob.append(vTmpLob, vListInfo.Pitaperson);
        dbms_lob.append(pMessagesCur, vTmpLob);
        i := i + 1;
      end if;
    END LOOP;
    if i = 1 then
      dbms_lob.append(pMessagesCur, vEmptyReport);
    end if;
    dbms_lob.append(pMessagesCur, vHtmlEnd);

    return result;
  exception
    when others then
      return - 1;
  end GetPitaPersListHTML;

  --GetReportNames
  function GetReportNames(ReportNamesCur out sys_refcursor) return number is
    result number default 0;
    vlang  varchar2(30 char);
  begin
    vlang := pkg_main.GetUserLangSettings;
    case vlang
      when 'Kazakh' then
        open ReportNamesCur for
          select reportnumber, reportname_kz as "reportname"
            from reports
           where tablename = 'MESSAGES_CFM';
      else
        open ReportNamesCur for
          select reportnumber, reportname
            from reports
           where tablename = 'MESSAGES_CFM';
    end case;
    return result;
  exception
    when others then
      return - 2200; --Ошибка формирования списка отчетов
  end GetReportNames;

  --GetReportName
  function GetReportName(pReportNumber in number, pReportName out varchar2)
    return number is
    result number default 0;
  begin
    select reportname
      into pReportName
      from reports
     where tablename = 'MESSAGES_CFM'
       and reportnumber = pReportNumber;
    return result;
  exception
    when others then
      return - 2201; --Ошибка при получении названия отчета
  end GetReportName;

  --MakeReport
  function MakeReport(pReportNumber in number, pReportBody out clob)
    return number is
    cDATE_FORMAT constant varchar2(21) := 'DD-MM-YYYY hh24:mm:ss';
    result      number default 0;
    pReportName varchar2(1000 char);
    vResult     number default - 1;
    vResCurr    sys_refcursor;
  begin
    vResult := GetReportName(pReportNumber, pReportName);

    case pReportNumber
      when 1 then
        begin
          vResult := GetFirstList(vResCurr);
          if vResult = 0 then
            begin
              pReportName := pReportName || ' (c ' ||
                             to_char(trunc(sysdate) - 1, cDATE_FORMAT) ||
                             ' по ' ||
                             to_char(trunc(sysdate), cDATE_FORMAT) || ')';
              vResult     := GetFirstOrSecondListHTML2(pReportName,
                                                       vResCurr,
                                                       pReportBody);
              if vResult != 0 then
                result := -2202; --Ошибка при формировании отчета
              end if;
              close vResCurr;
            end;
          else
            begin
              result := -2202; --Ошибка при формировании отчета
            end;
          end if;
        end;
      when 2 then
        begin
          vResult := GetNoFirstList(vResCurr);
          if vResult = 0 then
            begin
              pReportName := pReportName || ' (c ' ||
                             to_char(trunc(sysdate) - 1, cDATE_FORMAT) ||
                             ' по ' ||
                             to_char(trunc(sysdate), cDATE_FORMAT) || ')';
              vResult     := GetFirstOrSecondListHTML2(pReportName,
                                                       vResCurr,
                                                       pReportBody);
              if vResult != 0 then
                result := -2202; --Ошибка при формировании отчета
              end if;
              close vResCurr;
            end;
          else
            begin
              result := -2202; --Ошибка при формировании отчета
            end;
          end if;
        end;
      when 3 then
        begin
          vResult := GetSecondList(vResCurr);
          if vResult = 0 then
            begin
              pReportName := pReportName || ' (c ' ||
                             to_char(trunc(sysdate) - 1, cDATE_FORMAT) ||
                             ' по ' ||
                             to_char(trunc(sysdate), cDATE_FORMAT) || ')';
              vResult     := GetFirstOrSecondListHTML2(pReportName,
                                                       vResCurr,
                                                       pReportBody);
              if vResult != 0 then
                result := -2202; --Ошибка при формировании отчета
              end if;
              close vResCurr;
            end;
          else
            begin
              result := -2202; --Ошибка при формировании отчета
            end;
          end if;
        end;
      when 4 then
        vResult := GetPitaOrgListHTML2(pReportName, pReportBody);
        if vResult != 0 then
          result := -2202; --Ошибка при формировании отчета
        end if;
      when 5 then
        vResult := GetPitaPersListHTML(pReportName, pReportBody);
        if vResult != 0 then
          result := -2202; --Ошибка при формировании отчета
        end if;
      when 6 then
        begin
          vResult := GetThirdList(vResCurr);
          if vResult = 0 then
            begin
              pReportName := pReportName || ' (c ' ||
                             to_char(trunc(sysdate), cDATE_FORMAT) ||
                             ' по ' || to_char(sysdate, cDATE_FORMAT) || ')';
              vResult     := GetFirstOrSecondListHTML2(pReportName,
                                                       vResCurr,
                                                       pReportBody);
              if vResult != 0 then
                result := -2202; --Ошибка при формировании отчета
              end if;
              close vResCurr;
            end;
          else
            result := -2202; --Ошибка при формировании отчета
          end if;
        end;
      else
        result := -2203; --Формирование данного отчета не предусмотрено
    end case;

    return result;
  exception
    when others then
      return - 2202; --Ошибка при формировании отчета
  end MakeReport;

end PKG_Reports;
/

CREATE OR REPLACE PUBLIC SYNONYM PKG_REPORTS FOR KFM.PKG_REPORTS;

GRANT EXECUTE ON KFM.PKG_REPORTS TO KFM_ROLE;
