Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Требования и особенности формирования конфигурационного файла описаны в виде комментариев в примере ниже.

ВНИМАНИЕ!

Оформлять отдельными продуктами нужно отличающиеся наборы обязательных для заполнения данных. Если продукт предоставляется для ЮЛ и ИП, то требуется оформлять два продукта: "Продукт... для ЮЛ", "Продукт... для ИП", т.к. у них отличаются наборы обязательных для заполнения полей (например, у ИП нет поля КПП, нельзя это поле указать для ИП как обязательное).

ПРИМЕЧАНИЕ

Рекомендуется перед импортом проверить файл с помощью любого валидатора yaml, чтобы исключить явные ошибки форматирования.

Скачать пример можно также по ссылке Пример для документации - Продукт БГ(И) для ЮЛ ред.12.04.2021.yaml

Пример конфигурационного файла с описанием требований в виде комментариев
#настройки конкретного продукта
#элемент product обязателен и один
product:
  #общие сведения о продукте
  #полное наименование продукта, необязательно должно совпадать с наименованиями линейки продуктов банка, т.к. в системе Goodfin продукт объединяет единые настройки обязательности по заполнению данных заявки
  #name varchar(500) NOT NULL
  name: "Банковская гарантия на исполнение для ЮЛ банка БАНК1 (ред.12.04.21)"
  #shortname varchar(50) NOT NULL
  #краткое наименование продукта, выводимое пользователям
  shortName: "БГ на исполнение для ЮЛ (ред.12.04.21, БАНК1)"
  #producttype varchar(50) NOT NULL
  #мнемокод типа продукта, выбирается из справочника product_types
  #тип продукта должен совпадать с префиксам в перечне обязательных продуктовых полей
  #например, "BG"	- Банковская гарантия на исполнение контракта, "PARTICIPATION_BG" - Банковская гарантия на участие, "TENDER_LOAN" -	Тендерный займ
  productType: "BG"
  #description varchar(1000) NULL
  #Краткое описание паспорта продукта для вывода пользователям, чтобы пользователи могли понять ограничения по продукту
  #можно использовать при описании формат BBCode
  description: "[b]Законы:[/b] 44, 223, 615-ПП/185.[br][b]Макс. сумма БГ:[/b] 150 млн.р.[br][b]Maкс. срок действия БГ:[/b] 1095 дн.[br][b]Срок существования клиента:[/b] от 3 мес.-до 500 т.р.; от 6 мес.-до 1 м.р.; от 9 мес.-от 1 м.р. до 7 м.р.; от 12 мес.-от 7 м.р. до 50 м.р.; от  24 мес.-от  50 м.р. до 150 м.р.[br][b]Maкс. лимит на клиента:[/b] 150 м.р.[br][b]ОПФ клиента:[/b] АО, ООО, ИП.[br][b]Стоп регионы (по принципалу, бенефициару и месту выполнения контракта) :[/b] Респ. Адыгея; Карачаево-Черкесская Респ.; Кабардино-Балкарская Респ.; Респ. Северная Осетия – Алания; Респ. Ингушетия; Чеченская Респ.; Респ. Дагестан; Респ. Крым, г. Севастополь (допускается как место выполнения работ).[br][b]Предметы в стопе:[/b] автодорожное строительство «с нуля»; строительство жилых домов, высотных домов, коммерческой недвижимости, производственных объектов; приобретение жилья в рамках 214 ФЗ от 31.12.2004;  строительство объектов для нужд МВД РФ, ФСБ РФ, Министерства обороны РФ, Администрации Президента РФ.[br]"
  # workterm integer NULL
  #Минимальное количество рабочих дней, в течение которых сервис готов предоставить продукт или услугу в законченном виде, измеряется в рабочих днях
  workTerm: 1
  #externalid uuid NOT NULL
  #задается согласно требованиям к guid, например, использовать https://www.guidgenerator.com для генерации значения
  #если externalId совпадет с существующим продуктом в БД, то будет выполнена попытка перезаписи настроек продукта, иначе создается новый продукт
  externalId: "12f6fa12-3f16-4ab6-94b6-466c3ce3a09e"
  #правило применимости продукта, данные клиента и сделки должны удовлетворять этому правилу, чтобы получить предложение по продукту
  #правило обязательно и одно на продукт
  productApplicabilityRule:
    #name varchar(150) NOT NULL
    #используется для понимания сути правила
    name: "БГ на исполнение ЮЛ банка БАНК1. Доступно: по ФЗ 223, 44, 185/615 ПП; для коммер. и некомм. головных компаний"
    #type varchar(50) NOT NULL, по умолчанию значение = "script"
    type: "script"
    #script character varying(4000) NOT NULL
    #Скрипт правила в виде функции isAvailableForDealApplicationData(dealApplicationData), возвращающей TRUE, FALSE или NULL.
    #Если функция возвращает true, то считается, что продукт применим и может быть показан клиенту в Предложениях
    #примеры готовых скриптов см. в документации - статья "Правила применимости: productApplicabilityRule, applicabilityRule"
    script: "function isAvailableForDealApplicationData(dealApplicationData) {
                         var orgTypes = ['COM', 'UNCOM'];
                         var companyClass = java.lang.Class.forName('com.keyintegrity.shb.company.query.dto.CompanyDto');
                         var clientCompany = dealApplicationData.fetchFields[companyClass][dealApplicationData.result.client.id];
                         if(clientCompany == null || clientCompany.orgType == null || clientCompany.legalType == null) {
                            return null;
                         }
                         var clientOrgTypeId = clientCompany.orgType.id;
                         var clientLegalTypeId = clientCompany.legalType.id;
                         return orgTypes.indexOf(clientOrgTypeId) !== -1 && clientLegalTypeId == 'ORGANIZATION';
                      }"

  #-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  #требования к карточке компании/ИП
  #данный раздел должен существовать в настройках, если тип продукта предоставляется компаниям/ИП, иначе будет раздел individualFields
  #при анализе yaml считать, если поле в списке required не найдено, то оно необязательно
  #список доступных полей для настройки обязательности см. в справочнике company_fields
  companyFields:
    required:
    - "bankingDetails"
    - "bankingDetails.bankName"
    - "bankingDetails.bik"
    - "bankingDetails.paymentAccount"
    - "baseOkved"
    - "factAddress"
    - "factAddress.addressType"
    - "factAddress.city"
    - "factAddress.house"
    - "factAddress.isOwned"
    - "factAddress.postCode"
    - "factAddress.region"
    - "factAddress.street"
    - "fullName"
    - "inn"
    - "kpp"
    - "legalAddress"
    - "legalAddress.addressType"
    - "legalAddress.city"
    - "legalAddress.house"
    - "legalAddress.isOwned"
    - "legalAddress.postCode"
    - "legalAddress.region"
    - "legalAddress.street"
    - "legalFounders.address"
    - "legalFounders.inn"
    - "legalFounders.kpp"
    - "legalFounders.name"
    - "legalFounders.ogrn"
    - "legalFounders.percent"
    - "licenses.activity"
    - "licenses.date"
    - "licenses.listActivities"
    - "licenses.number"
    - "licenses.who"
    - "ogrn"
    - "okopf"
    - "okpo"
    - "orgType"
    - "persons"
    - "persons.birthday"
    - "persons.birthdayPlace"
    - "persons.docDate"
    - "persons.docNumber"
    - "persons.docType"
    - "persons.docWho"
    - "persons.firstName"
    - "persons.inn"
    - "persons.lastName"
    - "persons.mainOksm"
    - "persons.middleName"
    - "persons.regAddress"
    - "regDate"
    - "regOrg"
    - "regPlace"
    - "shortName"
    - "taxSystem"
  #-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  #требования к продуктовым полям
  #набор продуктовых полей будет отличаться в зависимости от типа продукта
  #при анализе yaml считать, если поле в списке required не найдено, то оно необязательно
  #при описании продуктовых полей важно, чтобы префикс типа продукта совпадал с типом продукта в общем описании продукта (с полем productType)
  #можно использовать только те продуктовые поля, которые соответствуют настраиваемому типу продакта
  #полный перечень см. в справочнике product_types_fields
  productFields:
    required:
    - "BG:productDealState.actualContractPrice"
    - "BG:productDealState.amount"
    - "BG:productDealState.concludedContracts"
    - "BG:productDealState.customer"
    - "BG:productDealState.customer.inn"
    - "BG:productDealState.customer.kpp"
    - "BG:productDealState.customer.name"
    - "BG:productDealState.customer.ogrn"
    - "BG:productDealState.customer.region"
    - "BG:productDealState.deadlineForGrant"
    - "BG:productDealState.endDate"
    - "BG:productDealState.hasLoss"
    - "BG:productDealState.isIndisputableWriteOff"
    - "BG:productDealState.isPrepayment"
    - "BG:productDealState.isQuickDecision"
    - "BG:productDealState.isWarrantyPeriod"
    - "BG:productDealState.loanCommitments"
    - "BG:productDealState.startDate"
    - "BG:productDealState.tender"
    - "BG:productDealState.tender.federalLaw"
    - "BG:productDealState.tender.initialContractPrice"
    - "BG:productDealState.tender.isMultiCustomer"
    - "BG:productDealState.tender.isMultiLot"
    - "BG:productDealState.tender.lotName"
    - "BG:productDealState.tender.lotNumber"
    - "BG:productDealState.tender.name"
    - "BG:productDealState.tender.placementType"
    - "BG:productDealState.tender.publishDateTime"
    - "BG:productDealState.tender.registryNumber"
    - "BG:productDealState.tender.url"
  #-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  #валидаторы по табл. products_validators и validators
  validators:
    #обязательно в каждом блоке массива элемент type с наименованием функции валидатора
    #прочие элементы в блоке массива после type играют роль входных параметров для функции валидатора, параметров может не быть, а может быть несколько с разными наименованиями
    #полный перечень см. в справочнике validators
  - #validator
    type: "COMPANY_PERSON_ROLE_REQUIRED"
    role: "BOOKER"
  - #validator
    type: "COMPANY_PERSON_ROLE_REQUIRED"
    role: "DIRECTOR"
  - #validator
    type: "COMPANY_FOUNDER_REQUIRED"
  #-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  #пакеты обязательных документов, можно настроить несколько пакетов документов в зависимости от данных в заявке и требований продукта
  #в списке столько Блоков "- docsPackage:" сколько пакетов для продукта
  #если в пакете документов отсутствует блок applicabilityRule, то это значит, что документы из пакета будут безусловно запрашиваться для продукта
  docsPackages:
  - #docsPackage 1
    #name varchar(500) NOT NULL
    #Указать полное наименование пакета документов, включая наименование продукта и сервиса для полноты понимания
    name: "Пакет БГ(И), Банк БАНК1: ВСЕ клиенты, 1 млн < сумма БГ на исполнение < = 50 млн"
    #shortname varchar(50) NOT NULL
    #Указать краткое наименование пакета документов, чтобы по нему понять условия применимости пакета документов
    shortName: "ЮЛ, 1 млн < сумма < = 50 млн"
    #description varchar(1000) NULL, описание пакета документов, которое может выводиться как подсказка в системе
    description: NULL
    #полный перечень типов документов см. в docs_types
    #списком перечисляются мнемокоды типов обязательных документов в пакете
    #полный перечень см. в справочнике docs_types
    docsTypes:
    - "ANALYTICAL_BALANCE_LAST_REPORTING_YEAR"
    - "LEASE_AGREEMENT_OWNERSHIP"
    - "FINANCE_REPORT_LAST_QUARTER"
    #правило применимости пакета документов
    applicabilityRule:
      #name varchar(150) NOT NULL
      #наименование правила применимости
      name: "сумма БГ на исполнение больше 1 млн И меньше или равна 50 млн"
      #type varchar(50) NOT NULL, по умолчанию значение = "script"
      type: "script"
      #script character varying(4000) NOT NULL
      #Скрипт правила в виде функции isAvailableForDealApplicationData(dealApplicationData), возвращающей TRUE, FALSE или NULL.
      #Если функция возвращает true, то считается, что пакет документов применим и при заполнении заявки у клиента будут запрошены документы в составе пакета
      #примеры готовых скриптов см. в документации - статья "Правила применимости: productApplicabilityRule, applicabilityRule"
      script: "function isAvailableForDealApplicationData(dealApplicationData) {
                  if (dealApplicationData.result.productDealState.amount == null) {
                    return null;
                  }
                  return dealApplicationData.result.productDealState.amount > 1000000 && dealApplicationData.result.productDealState.amount <= 50000000;
               }"
  - #docsPackage 2
    #name varchar(500) NOT NULL
    #Указать полное наименование пакета документов, включая наименование продукта и сервиса для полноты понимания
    name: "Пакет БГ(И), Банк БАНК1: ВСЕ клиенты, сумма БГ на исполнение > 50 млн"
    #shortname varchar(50) NOT NULL
    #Указать краткое наименование пакета документов, чтобы по нему понять условия применимости пакета документов
    shortName: "ЮЛ, сумма > 50 млн"
    #description varchar(1000) NULL, описание пакета документов, которое может выводиться как подсказка в системе
    description: NULL
    #полный перечень типов документов см. в docs_types
    #списком перечисляются мнемокоды типов обязательных документов в пакете
    #полный перечень см. в справочнике docs_types
    docsTypes:
    - "FINANCE_REPORT_LAST_QUARTER"
    - "ANALYTICAL_BALANCE_LAST_REPORTING_YEAR"
    - "ANNUAL_ACCOUNTING_FINANCIAL_STATEMENTS"
    - "LEASE_AGREEMENT_OWNERSHIP"
    #правило применимости пакета документов
    applicabilityRule:
      #name varchar(150) NOT NULL
      #наименование правила применимости
      name: "сумма БГ на исполнение больше 50 млн"
      #type varchar(50) NOT NULL, по умолчанию значение = "script"
      type: "script"
      #script character varying(4000) NOT NULL
      #Скрипт правила в виде функции isAvailableForDealApplicationData(dealApplicationData), возвращающей TRUE, FALSE или NULL.
      #Если функция возвращает true, то считается, что пакет документов применим и при заполнении заявки у клиента будут запрошены документы в составе пакета
      #примеры готовых скриптов см. в документации - статья "Правила применимости: productApplicabilityRule, applicabilityRule"
      script: "function isAvailableForDealApplicationData(dealApplicationData) {
                  if (dealApplicationData.result.productDealState.amount == null) {
                    return null;
                  }
                  return dealApplicationData.result.productDealState.amount > 50000000;
              }"
  - #docsPackage 3
    #name varchar(500) NOT NULL
    #Указать полное наименование пакета документов, включая наименование продукта и сервиса для полноты понимания
    name: "Пакет БГ(И), Банк БАНК1: ЮЛ на ОСНО, сумма БГ на исполнение > 10 млн"
    #shortname varchar(50) NOT NULL
    #Указать краткое наименование пакета документов, чтобы по нему понять условия применимости пакета документов
    shortName: "ЮЛ на ОСНО, сумма > 10 млн"
    #description varchar(1000) NULL, описание пакета документов, которое может выводиться как подсказка в системе
    description: NULL
    #полный перечень типов документов см. в docs_types
    #списком перечисляются мнемокоды типов обязательных документов в пакете
    #полный перечень см. в справочнике docs_types
    docsTypes:
    - "TAX_DECL_VALUE_ADDED_TAX_LAST_TAX_PERIOD"
    - "TAX_DECL_ORGANIZATION_INCOME_TAX_LAST_TAX_PERIOD"
    #правило применимости пакета документов
    applicabilityRule:
      #name varchar(150) NOT NULL
      #наименование правила применимости
      name: "ЮЛ с налогообложением = ОСНО И сумма БГ на исполнение больше 10 млн"
      #type varchar(50) NOT NULL, по умолчанию значение = "script"
      type: "script"
      #script character varying(4000) NOT NULL
      #Скрипт правила в виде функции isAvailableForDealApplicationData(dealApplicationData), возвращающей TRUE, FALSE или NULL.
      #Если функция возвращает true, то считается, что пакет документов применим и при заполнении заявки у клиента будут запрошены документы в составе пакета
      #примеры готовых скриптов см. в документации - статья "Правила применимости: productApplicabilityRule, applicabilityRule"
      script: "function isAvailableForDealApplicationData(dealApplicationData) {
                  var companyClass = java.lang.Class.forName('com.keyintegrity.shb.company.query.dto.CompanyDto');
                  var clientCompany = dealApplicationData.fetchFields[companyClass][dealApplicationData.result.client.id];
                  if (clientCompany == null) {
                    return null;
                  }
                  var taxSystemClass =  java.lang.Class.forName('com.keyintegrity.shb.company.query.dto.catalog.TaxSystemCatalogDto');
                  var taxSystemDto = dealApplicationData.fetchFields[taxSystemClass][clientCompany.taxSystem];
                  if (clientCompany.legalType == null || taxSystemDto == null || dealApplicationData.result.productDealState.amount == null) {
                    return null;
                  }
                  var taxSystems = ['OSNO'];
                  return  taxSystems.indexOf(taxSystemDto.code) !== -1 && clientCompany.legalType.id == 'ORGANIZATION' && dealApplicationData.result.productDealState.amount > 10000000;
              }"
  - #docsPackage 4
    #name varchar(500) NOT NULL
    #Указать полное наименование пакета документов, включая наименование продукта и сервиса для полноты понимания
    name: "Пакет БГ(И), Банк БАНК1: ЮЛ на УСН/Сельхоз, 1 млн < сумма БГ на исполнение < = 10 млн"
    #shortname varchar(50) NOT NULL
    #Указать краткое наименование пакета документов, чтобы по нему понять условия применимости пакета документов
    shortName: "ЮЛ на УСН/Сельхоз, 1млн < сумма <= 10млн"
    #description varchar(1000) NULL, описание пакета документов, которое может выводиться как подсказка в системе
    description: NULL
    #полный перечень типов документов см. в docs_types
    #списком перечисляются мнемокоды типов обязательных документов в пакете
    #полный перечень см. в справочнике docs_types
    docsTypes:
    - "TAX_DECLARATION_LAST_PERIOD"
    #правило применимости пакета документов
    applicabilityRule:
      #name varchar(150) NOT NULL
      #наименование правила применимости
      name: "ЮЛ с налогообложением = (УСНО ИЛИ Сельхоз) И сумма БГ на исполнение больше 1 млн И меньше или равна 10 млн"
      #type varchar(50) NOT NULL, по умолчанию значение = "script"
      type: "script"
      #script character varying(4000) NOT NULL
      #Скрипт правила в виде функции isAvailableForDealApplicationData(dealApplicationData), возвращающей TRUE, FALSE или NULL.
      #Если функция возвращает true, то считается, что пакет документов применим и при заполнении заявки у клиента будут запрошены документы в составе пакета
      #примеры готовых скриптов см. в документации - статья "Правила применимости: productApplicabilityRule, applicabilityRule"
      script: "function isAvailableForDealApplicationData(dealApplicationData) {
                  var companyClass = java.lang.Class.forName('com.keyintegrity.shb.company.query.dto.CompanyDto');
                  var clientCompany = dealApplicationData.fetchFields[companyClass][dealApplicationData.result.client.id];
                  if (clientCompany == null) {
                    return null;
                  }
                  var taxSystemClass =  java.lang.Class.forName('com.keyintegrity.shb.company.query.dto.catalog.TaxSystemCatalogDto');
                  var taxSystemDto = dealApplicationData.fetchFields[taxSystemClass][clientCompany.taxSystem];
                  if (clientCompany.legalType == null || taxSystemDto == null || dealApplicationData.result.productDealState.amount == null) {
                    return null;
                  }
                  var taxSystems = ['USN','ESHN'];
                  return taxSystems.indexOf(taxSystemDto.code) !== -1 && clientCompany.legalType.id == 'ORGANIZATION' && dealApplicationData.result.productDealState.amount > 1000000 && dealApplicationData.result.productDealState.amount <= 10000000;
              }"
  - #docsPackage 5
    #name varchar(500) NOT NULL
    #Указать полное наименование пакета документов, включая наименование продукта и сервиса для полноты понимания
    name: "Пакет БГ(И), Банк БАНК1: ЮЛ на УСН/Сельхоз, сумма БГ на исполнение > 10 млн"
    #shortname varchar(50) NOT NULL
    #Указать краткое наименование пакета документов, чтобы по нему понять условия применимости пакета документов
    shortName: "ЮЛ на УСН/Сельхоз, сумма > 10 млн"
    #description varchar(1000) NULL, описание пакета документов, которое может выводиться как подсказка в системе
    description: NULL
    #полный перечень типов документов см. в docs_types
    #списком перечисляются мнемокоды типов обязательных документов в пакете
    #полный перечень см. в справочнике docs_types
    docsTypes:
    - "BREAKDOWN_ACCOUNTS_RECEIVABLE_LAST_REPORTING_DATE"
    - "TAX_DECLARATION_LAST_PERIOD"
    #правило применимости пакета документов
    applicabilityRule:
      #name varchar(150) NOT NULL
      #наименование правила применимости
      name: "ЮЛ с налогообложением = (УСНО ИЛИ Сельхоз) И сумма БГ на исполнение больше 10 млн"
      #type varchar(50) NOT NULL, по умолчанию значение = "script"
      type: "script"
      #script character varying(4000) NOT NULL
      #Скрипт правила в виде функции isAvailableForDealApplicationData(dealApplicationData), возвращающей TRUE, FALSE или NULL.
      #Если функция возвращает true, то считается, что пакет документов применим и при заполнении заявки у клиента будут запрошены документы в составе пакета
      #примеры готовых скриптов см. в документации - статья "Правила применимости: productApplicabilityRule, applicabilityRule"
      script: "function isAvailableForDealApplicationData(dealApplicationData) {
                  var companyClass = java.lang.Class.forName('com.keyintegrity.shb.company.query.dto.CompanyDto');
                  var clientCompany = dealApplicationData.fetchFields[companyClass][dealApplicationData.result.client.id];
                  if (clientCompany == null) {
                      return null;
                  }
                  var taxSystemClass =  java.lang.Class.forName('com.keyintegrity.shb.company.query.dto.catalog.TaxSystemCatalogDto');
                  var taxSystemDto = dealApplicationData.fetchFields[taxSystemClass][clientCompany.taxSystem];
                  if (clientCompany.legalType == null || taxSystemDto == null || dealApplicationData.result.productDealState.amount == null) {
                     return null;
                  }
                  var taxSystems = ['USN','ESHN'];
                  return taxSystems.indexOf(taxSystemDto.code) !== -1 && clientCompany.legalType.id == 'ORGANIZATION' && dealApplicationData.result.productDealState.amount > 10000000;
              }"
  - #docsPackage 6
    #name varchar(500) NOT NULL
    #Указать полное наименование пакета документов, включая наименование продукта и сервиса для полноты понимания
    name: "Пакет документов для АО (БГ на исполнение, БИН)"
    #shortname varchar(50) NOT NULL
    #Указать краткое наименование пакета документов, чтобы по нему понять условия применимости пакета документов
    shortName: "Пакет документов для АО (БГ, БИН)"
    #description varchar(1000) NULL, описание пакета документов, которое может выводиться как подсказка в системе
    description: NULL
    #полный перечень типов документов см. в docs_types
    #списком перечисляются мнемокоды типов обязательных документов в пакете
    #полный перечень см. в справочнике docs_types
    docsTypes:
    - "EXTRACT_FROM_REGISTER_SHAREHOLDERS"
    #правило применимости пакета документов
    applicabilityRule:
      #name varchar(150) NOT NULL
      #наименование правила применимости
      name: "Компания-клиент является акционерным обществом"
      #type varchar(50) NOT NULL, по умолчанию значение = "script"
      type: "script"
      #script character varying(4000) NOT NULL
      #Скрипт правила в виде функции isAvailableForDealApplicationData(dealApplicationData), возвращающей TRUE, FALSE или NULL.
      #Если функция возвращает true, то считается, что пакет документов применим и при заполнении заявки у клиента будут запрошены документы в составе пакета
      #примеры готовых скриптов см. в документации - статья "Правила применимости: productApplicabilityRule, applicabilityRule"
      script: "function isAvailableForDealApplicationData(dealApplicationData) {
                  if (dealApplicationData.result.client.clientType.id != 'COMPANY') {
                    return false;
                  }
                  var okopfTypes = ['12200', '12247', '12267'];
                  var companyClass = java.lang.Class.forName('com.keyintegrity.shb.company.query.dto.CompanyDto');
                  var clientCompany = dealApplicationData.fetchFields[companyClass][dealApplicationData.result.client.id];
                  var okopfClass = java.lang.Class.forName('com.keyintegrity.shb.company.query.dto.catalog.OkopfCatalogDto');
                  var okopfDto = dealApplicationData.fetchFields[okopfClass][clientCompany.okopf];
                  return okopfDto !== null && okopfTypes.indexOf(okopfDto.code) !== -1;
              }"
  - #docsPackage 7
    #name varchar(500) NOT NULL
    #Указать полное наименование пакета документов, включая наименование продукта и сервиса для полноты понимания
    name: "Пакет документов для ЮЛ (БГ на исполнение, БИН)"
    #shortname varchar(50) NOT NULL
    #Указать краткое наименование пакета документов, чтобы по нему понять условия применимости пакета документов
    shortName: "Пакет документов для ЮЛ (БГ, БИН)"
    #description varchar(1000) NULL, описание пакета документов, которое может выводиться как подсказка в системе
    description: NULL
    #полный перечень типов документов см. в docs_types
    #списком перечисляются мнемокоды типов обязательных документов в пакете
    #полный перечень см. в справочнике docs_types
    docsTypes:
    - "CHARTER"
    - "HEAD_APPOINTMENT_PROTOCOL"
    - "HEAD_PASSPORT_COPY"
    #нет applicabilityRule -пакет применим безусловно для всего продукта
  #-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  #требования к фин. показателям
  financePackages:
  - #FinancePackage 1
    name: "Открытие БГ(И), до 1 млн"   
    userTooltip: "Разрешается или заполнить финансовые показатели, или прикрепить обязательные документы."
    #описываются требования к каждой фин. форме, на текущий момент поддерживается два набора отчетности по две формы в каждом
    #набор отчетности КНД  0710098 с формами ОКУД 0710001 и ОКУД 0710002
    #набор отчетности КНД  0710099 с формами ОКУД 0710001 и ОКУД 0710002
    #полный перечень см. в справочнике finance_fields
    #в formSet подставляем значение из КНД набора форм
    #в form подставляем значение из Формы по ОКУД
    #в indicators.required подставляем значение из мнемокода
    #periodTypes определяет обязательный набор выводимых отчетных периодов для заполнения отчетности
    #для заполнения periodTypes полный перечень см. в справочнике period_types
    forms:
    - #form and indicators
      formSet: "0710098"
      form: "0710001"
      periodTypes:
      - "currentReportingPeriod"
      - "previousYear"
      - "yearPrecedingPrevious"
      indicators:
        required:
        - "noMaterial"
        - "material"
        - "1210"
        - "finAssets"
        - "1250"
        - "capital"
        - "1410"
        - "longTermDuties"
        - "1510"
        - "1520"
        - "shortTermDuties"
        - "1600"
        - "1700"
    - #form and indicators
      formSet: "0710098"
      form: "0710002"
      periodTypes:
      - "currentReportingPeriod"
      - "previousYear"
      - "yearPrecedingPrevious"
      indicators:
        required:
        - "2110"
        - "expenses"
        - "otherIncomes"
        - "2330"
        - "2350"
        - "2400"
        - "incomeTaxes"
    - #form and indicators
      formSet: "0710099"
      form: "0710001"
      periodTypes:
      - "currentReportingPeriod"
      - "previousYear"
      - "yearPrecedingPrevious"
      indicators:
        required:
        - "1100"
        - "1110"
        - "1120"
        - "1130"
        - "1140"
        - "1150"
        - "1160"
        - "1170"
        - "1180"
        - "1190"
        - "1200"
        - "1210"
        - "1220"
        - "1230"
        - "1240"
        - "1250"
        - "1260"
        - "1300"
        - "1310"
        - "1320"
        - "1340"
        - "1350"
        - "1360"
        - "1370"
        - "1400"
        - "1410"
        - "1420"
        - "1430"
        - "1450"
        - "1500"
        - "1510"
        - "1520"
        - "1530"
        - "1540"
        - "1550"
        - "1600"
        - "1700"
    - #form and indicators
      formSet: "0710099"
      form: "0710002"
      periodTypes:
      - "currentReportingPeriod"
      - "previousYear"
      - "yearPrecedingPrevious"
      indicators:
        required:
        - "2100"
        - "2110"
        - "2120"
        - "2200"
        - "2210"
        - "2220"
        - "2300"
        - "2310"
        - "2320"
        - "2330"
        - "2340"
        - "2350"
        - "2400"
        - "2410"
        - "2411"
        - "2412"
        - "2460"
        - "2500"
        - "2510"
        - "2520"
        - "2530"
        - "2900"
        - "2910"
    #правило применимости пакета фин. показателей
    applicabilityRule:
      #name varchar(150) NOT NULL
      #наименование правила применимости
      name: "Сумма БГ < 1 млн И нет документов FINANCE_REPORT_LAST_QUARTER, ANALYTICAL_BALANCE_LAST_REPORTING_YEAR" 
      #type varchar(50) NOT NULL, по умолчанию значение = "script"  type: "script"
      #script character varying(4000) NOT NULL
      #Скрипт правила в виде функции isAvailableForDealApplicationData(dealApplicationData), возвращающей TRUE или FALSE.
      script: "function isAvailableForDealApplicationData(dealApplicationData) {
                  var clientCompany = dealApplicationData.getFetchField('Company', dealApplicationData.result.client.id);
                  if (clientCompany == null || dealApplicationData.result.productDealState.amount == null) {
                      return null;
                  }
                  var financeReportExists = false;
                  var analyticalBalanceExists = false;
                  var documentsMap = dealApplicationData.getFetchFieldAsMap('ApplicationDocument');
                  if (documentsMap !== null) {
                      var documents = documentsMap.values();
                      financeReportExists = documents.stream().anyMatch(function(doc) {
                                    return doc.docType != null && doc.docType.id == 'FINANCE_REPORT_LAST_QUARTER' && doc.docState != null && doc.docState.id == 'ACTUAL';
                      });
                      analyticalBalanceExists = documents.stream().anyMatch(function(doc) {
                                    return doc.docType != null && doc.docType.id == 'ANALYTICAL_BALANCE_LAST_REPORTING_YEAR' && doc.docState != null && doc.docState.id == 'ACTUAL';
                      });

                  }
                  return clientCompany.legalType.id == 'ORGANIZATION' && !(financeReportExists && analyticalBalanceExists) && dealApplicationData.result.productDealState.amount < 1000000;
              }" 
  • Нет меток