Инструкция использования сервиса печатных форм
Вкладка Template
Для загрузки формы в сервис нужно находиться на странице (Template) загрузки формы
Данная страница содержит поля:
- Template Name – наименование файла
- Data Collection method – тип сборщика и обработки переменных (по умолчанию должен быть JS Loader)
- Template File – путь к файлу, который требуется загрузить
- Кнопка SUBMIT – загружает по итогу указанный файл в БД сервиса
Далее после нажатия submit перейдет на страницу по структуре определения переменных той формы, которую в данный момент загружали
На странице располагаются следующие поля:
- Template Name наименование файла
- Download Template – cкачать текущий загруженный шаблон
- Replace File – загрузить и заменить текущий загруженный шаблон
- Data Collection method – тип сборщика и обработки переменных (по умолчанию должен быть JS Loader)
- Text – редактор структуры переменных и блоков формы
В данном редакторе можно и необходимо определять\переопределять переменные и блоки
Пример структуры определения и переопределения
"generator": "libreoffice",
"variables": {
"totalDebtFormatted": "((contractBalance.all | arr_pick('inBalance.local') | arr_sum) + (contractBalance.all | arr_pick('outBalance.local') | arr_sum)) | float_format(2)",
"properties": {
"rows": [
[
"contractCalculatedSchedule.tranches._.number",
"contractCalculatedSchedule.tranches._.repaymentDate | date_format('DD.MM.YYYY')",
"contractCalculatedSchedule.tranches._.(principal + interest + eachRepaymentFee) | int_format",
"contractCalculatedSchedule.tranches._.principal | int_format",
"contractCalculatedSchedule.tranches._.interest | int_format",
"contractCalculatedSchedule.tranches._.eachRepaymentFee | int_format",
"contractCalculatedSchedule.tranches._.rest | int_format"
]
],
"blocks": {
"leaseBack": "contract.creditProductName includes 'LeaseBack'",
"leaseClassic": "contract.creditProductName includes 'Leasing classic'"
},
"emptyChar": "-",
"undefinedChar": "-"
}
Самые нужные и самые часто используемые разделы структуры
variables – тут переопределяются переменные для быстрого доступа позволяя не редактировать шаблон с переменными. Так же упрощает эстетический вид шаблона формы от длинных ссылок переменных, которые сложно читать среди текста шаблона.
Например в форме длинную ссылку переменной, которая может быть прописана в форме шаблона
${((contractBalance.all | arr_pick('inBalance.local') | arr_sum) + (contractBalance.all | arr_pick('outBalance.local') | arr_sum)) | float_format(2)}
Можно переопределить так:
"totalDebtFormatted": "((contractBalance.all | arr_pick('inBalance.local') | arr_sum) + (contractBalance.all | arr_pick('outBalance.local') | arr_sum)) | float_format(2)"
Данная переменная достает баланс по всем траншам (за балансом + в балансе)
и указать в шаблоне формы как ${totalDebtFormatted}
так же в редакторе поля Text можно корректировать структуру данной переменной, не редактируя при этом в самом шаблоне формы. Например, в переопределении переменных можно использовать условия.
“naturalPerson”: "client.naturalperson && !client.businessman ? ‘физ.лицо’ : ‘юр.лицо’"
Данная переменная выводит текст “физ.лицо” или “юр.лицо” в зависимости от значения переменных client.naturalperson и client.businessman
properties – определяет по шаблону формы наличие переменных, выводящих коллекцию\список данных в таблицу (например график или свойства залога) В данном поле переменные обязательно должны быть одинаково определены как в форме, так и в поле. Выше пример показывает определения переменных для вывода графика в таблицу формы (шаблона)
Пример заполнения таблицы для вывода планового графика из контракта
№ | Дата погашения | Сумма оплаты | Основная сумма | Проценты | Сборы | Остатки |
---|---|---|---|---|---|---|
${contractCalculatedSchedule.tranches._.number} | ${contractCalculatedSchedule.tranches._.repaymentDate | date_format('DD.MM.YYYY')} | ${contractCalculatedSchedule.tranches._.(principal + interest + eachRepaymentFee) | float_format} | ${contractCalculatedSchedule.tranches._.principal | float_format} | ${contractCalculatedSchedule.tranches._.interest | float_format} | ${contractCalculatedSchedule.tranches._.eachRepaymentFee | float_format} | ${contractCalculatedSchedule.tranches._.rest | float_format} |
${(contractCalculatedSchedule.tranches | arr_pick('principal') | arr_sum) + (contractCalculatedSchedule.tranches | arr_pick('interest') | arr_sum) + (contractCalculatedSchedule.tranches | arr_pick('eachRepaymentFee') | arr_sum)} | ${(contractCalculatedSchedule.tranches | arr_pick('principal') | arr_sum)} | ${(contractCalculatedSchedule.tranches | arr_pick('interest') | arr_sum)} | ${(contractCalculatedSchedule.tranches | arr_pick('eachRepaymentFee') | arr_sum)} |
blocks – определяет блоки которые при встраиваемых условия будут отображать или скрывать текс (с переменными и без) шаблона формы. Пример
"leaseBack": "contract.creditProductName includes 'LeaseBack'",
"leaseClassic": "contract.creditProductName includes 'Leasing classic'"
},
или
"blocks": {
"block_person": "client.naturalperson && !client.businessman",
"block_company": "!client.naturalperson"
},
- Первый пример в переменной contract.creditProductName (содержит строку имени кр. Продукта) проверяет на содержание в строке фразы LeaseBack
- Второй пример проверяет тип клиента – физ лицо или юр лицо
Пример использования блоков
Таблица загруженных форм
- Переключение режима между действующими и недействующими формами. Удалить форму нельзя, но ее можно деактивировать и восстановить снова.
- Переход на аналитику быстродействия ПФ
- Переход на страницу старого сборщика переменных
- Кнопка архивации формы
- Колонка наименования ПФ – содержит ссылки перехода на страницу редактора структуры переменных формы
- Тип загрузчика (JS-LOADER является основным и в будущем основным)
- Основные сущности, которые привязаны к форме
- Дата/Время обновления формы
Вкладка Test PrintForm
Старый сборщик и транслятор переменных, по нему есть отдельная инструкция
Вкладка Expressions
Примеры форматирования данных (сущности, нумерации, строки, логические данные, массивы), подробные примеры на самой вкладке
Вкладка Used variables
Список переменных и их комбинации, которые используются в формах текущего кастомера. У того или иного кастомера может быть очень богатый список примеров использования тех или иных переменных формах. Очень удобная реализация для того чтобы не лазить в формы и не искать среди текста в поисках нужного.
Вкладка Generations
Показывает сессии сгенерированных форм и скорость их обрабатывания.
Вкладка Sandbox
Данная вкладка является песочницей, в которой можно и нужно тестировать, отрабатывать комбинации переменных. Так же содержит встроенный поисковик по сущностям и переменным. На данной странице расположены поля для заполнения ID сущностей. Служат для отработки по содержащейся в базе информации той или иной введенной в поле с ID сущности.
Основные сущности которые требуют заполнения ID в Sandbox при тестах
В скобках указаны обозначение сущности для работе в переменных и песочнице
- Leads (lead) – лиды
- Clients (client) – клиенты
- LoanApps (loanApp) – заявки на займ
- Contracts (contract) – кредитный контракты
- Group of Signature Id (groupOfSignature) – группы подписей
- Manager for Signature Id (managerForSignature) – менеджер (Кредитный специалист)
- Share Contract (shareContract) - паевой контракт
- Deposit Contract (deposit Contract) – депозитный контракт
- Group Agreements – групповые соглашения, но по ним нет переменных
- Collateral Line (collateralLine) – линии кредитов (кредитные линии)
- Fund transaction (fundTransaction) - движение денежных средств (ДДС)
- On date – дата в Финансовой информации (для просмотра информации по операциям на дату)
Дополнительные сущности (работают при заполненных ID основных сущностей)
ПО ЛИДАМ
leadRecurrentConsent \ clientRecurrentConsent – возвращает true\false согласие на рекуррентное списание (содержится на ланистере) ссылка на API (https://flame-orangutan-1ed.notion.site/cc6badbca098498ea397663ff6219d66)
ПО КЛИЕНТАМ
- clientRfmTerroristHistory – переменные по МВК
- clientRfmFreezeHistory – переменные по РФМ
- clientRfmFromuHistory – переменные по ФРОМУ
- client.contracts – список всех контрактов по клиенту
ПО ЗАЯВКАМ
- loanAppFullCost – расчет ПСК по заявке
- loanAppSchedule – график по заявке
- loanAppInsurance – страховки по заявке
- loanAppStatuses – список статусов заявки
- loanApp.calc – перерасчет ПСК и графика по заявке (без учета firstRepaymentDate, repaymentPlanDate)
- loanApp.calcExtraField – перерасчет ПСК и графика по заявке (без учета repaymentPlanDate и с Экстрофилдом contract.firstRepaymentDate)
- loanApp.calcExtraField_HOTFIX - перерасчет ПСК и графика по заявке (с учетом Экстрафилдов contract.firstRepaymentDate (обязательный) и contract.repaymentPlanDate (необязательный))
- loanApp.calcCollateralLine - перерасчет ПСК и графика по заявке для кредитных линий (с учетом Экстрофилдов collateralLine.paymentDay = 0 и collateralLine.recalcGracePeriod = 5 для расчета interestGracePeriod)
- loanApp.calcSecondaryProduct - перерасчет ПСК и графика по заявке c ВСПОМОГАТЕЛЬНЫМ кредитным продуктом (без учета firstRepaymentDate, repaymentPlanDate)
- loanApp.calcExtraFieldSecondaryProduct - перерасчет ПСК и графика по заявке c ВСПОМОГАТЕЛЬНЫМ кредитным продуктом (без учета repaymentPlanDate и с Экстрофилдом contract.firstRepaymentDate)
- loanApp.calcCollateralLineSecondaryProduct - перерасчет ПСК и графика по заявке c ВСПОМОГАТЕЛЬНЫМ кредитным продуктом (с учетом Экстрофилдов collateralLine.paymentDay = 0 и collateralLine.recalcGracePeriod = 5 для расчета interestGracePeriod)
ПО КОНТРАКТАМ
- contractFullCost – расчет ПСК по контракту
- contractEffectiveInterestRateAFN – ЭПС для Казахстана
- contractOperations – список всех операций произведенных по контракту
- contractBalance – баланс по контракту (можно взаимодействовать во вкладке Sandbox с полем On date для установки даты процесса как в Финансовой информации)
- contractStatuses – список статусов контракта
- contractCalculatedSchedule – рассчитанный плановый график
- contractCompositeSchedule – составной плановый график
- contractFactSchedule – фактический график по выданному контракту
- contractCourtResolution – переменные по судебнику (если контракт попал под судебное решение)
- collateralTerminationRecord – переменные по откреплению залога от контракта (от ID контракта)
- contractFundTransactions – список ДДС по контракту
- contract.calc – перерасчет графика контракта, ПСК. Содержит в себе пересчитаный график (contract.calc.schedule)
ПО КРЕДИТНОЙ ЛНИИ
- collateralLineOperations – список операций по кредитной линии
- collateralLineEstimatedPaymentEarlyRepayment – расчет погашения по кредитной линии (досрочное)
- collateralLineEstimatedPaymentRepayment – расчет погашения по кредитной линии (текущее)
- collateralLine.collaterals – список залогов по кредитной линии
- collateralLine.loanApps – список заявок по кредитной линии
- collateralLine.contracts – список контрактов по кредитной линии
ПО ДДС
- fundTransactionCashbox – список ДДС по Казахскому микросервису (Cashbox)
- fundTransaction.operations – список операций содержащиеся в ДДС
Поиск переменных в сущностях (вкладка Sandbox)
В поле напротив лейбла Variables нужно вбить основную или дополнительную сущность и просмотреть доступные по релевантности (частоте использования) переменные. ВАЖНО !!! перед тем как нажать SEND нужно убедиться, что заполнен ID сущности с которой работаете (в разделе Expressions sandbox)
Так же можно в само поле Variables (под лейблом) вбить сущность нажать на кнопку Sand и посмотреть ее структуру (наименование, значение и тип переменных)
Важные ПРИМЕРЫ по работе с коллекциями и массивами сущностей.
суммирование массива (contractCalculatedSchedule.tranches) по полю (principal)
contractCalculatedSchedule.tranches | arr_pick('principal') | arr_sum
| arr_pick('principal')
- отвечает за преобразование в массив по указанному полю| arr_sum
- считает сумму по значению поля, которое предварительно сформировали в массивработа с условиями по коллекции для вывода в таблицу Допустим вы хотите проставить прочерк если поле eachRepaymentFee равно нулю В данном примере есть проблема, что при проверке в форме поле уже подается как строка, а в песочнице как число, может не корректно работать, нужно удостовериться и сообщить разработчику. Пока работает таким образом.
contractCalculatedSchedule.tranches._.(eachRepaymentFee != '0') ? (eachRepaymentFee | float_format(2)) : '-'
суммирование полей по конкретному элементу массива
contractCalculatedSchedule.tranches._.(principal + interest + eachRepaymentFee) | float_format
contractCalculatedSchedule.tranches.0.(principal + interest + eachRepaymentFee) | float_format
вызов элемента массива по значению под поля Допустим вам в первом по списку залоге нужно вытащить значение из поля, где значение подполя является Model. Данный пример демонстрирует как достать свойство Модель и вывести ее значение.
loanApp.collaterals[0].collateralProperties[.collateralPropertyType.name == 'Model'].value
достать сумму баланса по ID вида суммы
contractBalance.inBalance[.amountType.id == 101291] | arr_pick('inBalance.local') | arr_sum
текущая дата
now() | date_format('DD.MM.YYYY')
вывод свойств залога с исключением конкретных свойств
loanApp.collaterals[.collateralTypeId != 1017515 && .collateralTypeId != 121754]._.collateralType.name
loanApp.collaterals[.collateralTypeId == 1017515 || .collateralTypeId == 121754]._.collateralType.name
вывод значений из экстрафилдов
extraField(loanApp.collaterals[0].depositor, 'passport.managerKZ')
Пример выражения – находятся ли ID в поле 'collateralTypeId' по всем залогам
!((121754 || 1017515) in loanApp.collaterals | arr_pick('collateralTypeId'))
Расчет общей суммы соборов (по ставке и по сумме)
contract.creditFieldReq.fees[.amountTypeId == 10129159][0].value + (contract.loanAmount * contract.creditFieldReq.fees[.amountTypeId == 10129161][0].value / 100) + contract.creditFieldReq.fees[.amountTypeId == 10129162][0].value
contract.creditFieldReq.fees[.amountTypeId == 10129159].value + (contract.loanAmount * contract.creditFieldReq.fees[.amountTypeId == 10129161].value / 100) + contract.creditFieldReq.fees[.amountTypeId == 10129162].value
Вывод либо ФИО либо юо лицо организации
"loanApp.collaterals[.collateralTypeId == 1017515 || .collateralTypeId == 121754]._.(depositor.naturalperson ? (depositor.lastName + ' ' + depositor.firstName + ' ' + depositor.patronymic) : depositor.title)",
contractFullCost
ПСК
вычитать даты можно
date_diff
∙ feat(js-loader): добавлен date_diff (пример: contract.issueDate | date_diff(contract.issuePlanDate); contract.issueDate | date_diff(contract.issuePlanDate, 'day'(unit), false(float)) (sttvld)
КАРТЫ
lead.cardByToken
В настройках шаблона надо указывать в формате
Подставление даты заявки в поле даты Фин инфы
"overrideInputExpressions": {
"clientId": "loanApp.clientId",
"ondate": "ondate ? ondate : loanApp.creationDate | date_format('YYYY-MM-DD')"
}
Вывод согласия на рекуррент (нужен адрес ланистера)
clientRecurrentConsent
leadRecurrentConsent
ВЫТАЩИТЬ ПРОСРОЧЕННЫЕ ТРАНШИ
contractBalance.all[.repaymentDate | date_format('U') <= now() | date_format('U')]._.inBalance.local
ДАТА НАЧАЛА ПРОСРОЧКИ
contractBalance.all[.repaymentDate | date_format('U') <= now() | date_format('U')][0].repaymentDate | date_format('DD MM YYYY')
КОЛИЧЕСТВО ДНЕЙ ПРОСРОЧКИ
now() | date_diff((contractBalance.all[.repaymentDate | date_format('U') <= now() | date_format('U')][0].repaymentDate), 'days')