В EWA реалізоване налаштування візуальних форм для друку договору. Є декілька видів друкованих форм, які можна підключити до продукту:

  • Друковні форми зі значеннями полей договору - основні візуальні форми, які містять інформацію з договору страхування (номер договору, персональні дані страхувальника, строки дії, тарифи і т.д.)


  • PDF-файли - стандартні документи, які видаються всім страхувальникам і не містять специфічну інформацію по конкретному договору (напр. оферти, опис програм, акційні пропозиція і т.д.)

           * Дізнатись більш детально про додавання PDF-файлів в продукт ви можете за посиланням


  • Глобальні друковані форми - вже готові друковані форми, які реалізовані в EWA і використовуються всіма страховиками. Сюди входять рахунки-фактури, стандартні шаблони договорів ОСЦПВ та пам'ятки до них, стандартні шаблони Зеленої картки і т.д. Вони доступні одразу після налаштування компанії в EWA.                     



НАЛАШТУВАННЯ ДРУКОВАНОЇ ФОРМИ


--------------------------------------------------------------------------------------------------------------------------------------------------------

1. Встановлення програми "Jasper"

--------------------------------------------------------------------------------------------------------------------------------------------------------


1. Установлення JDK (Windows): 

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

  • В розділі Java SE Development Kit завантажуємо необхідний архівв (останню версію). Наприклад, для Windows x64  - jdk-8u251-windows-x64.exe
  • Запускаємо та встановлюємо


2. В перемінному середовищі (Start -> Правою кнопкою на "Мій компьютер" -> Властивості -> Додаткові параметри системи -> Перемінні середовища -> Системні перемінні -> Створити) JAVA_HOME прописуємо шлях до JDK (наприклад, C:\Program Files\Java\jdk_версія).



3. Залишаючись в цьому вікні, обираємо перемінну середовища Path і додаємо в нього значення %JAVA_HOME%\bin (важно додати на початку перемінної)


4. Установлення TIBCO Jaspersoft Studio

https://community.jaspersoft.com/project/jaspersoft-studio/releases

  • Завантажуємо останню версію Jaspersoft Studio (згідно вимог розрядності системи користувача)
  • Запускаємо та встановлюємо


--------------------------------------------------------------------------------------------------------------------------------------------------------

2. Стиснення зображень/заливка на сервер

--------------------------------------------------------------------------------------------------------------------------------------------------------


1. У відкритому Microsoft Office через принтер Foxit Reader PDF створюємо PDF (https://www.foxitsoftware.com/ru/pdf-reader/)

2. Стискаємо PDF https://pdfcompressor.com/ru/ (також використовуємо якщо треба PDF файл залити в EWA)

3. Конвертуємо PDF в PNG https://pdf2png.com/ru/

4. Стискаємо PNG https://compresspng.com/ru/

5. Генеруємо GUID для перейменування файлів https://www.guidgenerator.com/online-guid-generator.aspx

6. Якщо сторінок декілька, то перейменовуємо, резервуючи останні символи для нумерації сторінок


ℹ️ Використання "подложки" значно спрощує налаштування друкованої форми, але дає мало можливостей для її подальшого коригування. За бажанням, друковану форму в програмі Jasper можна налаштовувати з нуля, додавая різні види полей та не використовуючи подложку.


--------------------------------------------------------------------------------------------------------------------------------------------------------

3. Витягування даних з договору в ПФ

--------------------------------------------------------------------------------------------------------------------------------------------------------


1. Запускаємо конструктор друкованих форм TIBCO JaspersoftStudio.


2. Обираємо: File -> New -> Jasper Report -> Blank A4 -> Next -> Вказати назву (напр.: MyReport.jrxml) -> Finish

(за замовчуванням ДФ зберігаються в папку С:\Users\Користувач\JaspersoftWorkspace\MyReports\ ).

* Якщо для ДФ була попередньо залита подложка, на цьому етапі необхідно відкрити її, а не створювати нову ДФ


3. Блоки (Bands) Title, Page Header, Column Header, Column Footer, Page Footer, Summary необхідно видалити (виділити блок і натиснути Del), залишаємо тільки Detail 1.


4. Робимо активним блок Detail 1, далі натискаємо правою кнопкою миші та обираємо Maximize Band Height.


5. Далі можна конструєвати друковану форму шляхом вибору на вкладці Palette необхідного компоненту (як правило, для ДФ достатньо лише 3 компонентів: Text Field, Static Text, Image).


⚠️  Дозволяється використовуватиь тільки шріфти Arial Narrow и Times New Romans для коректної роботи друку та імпорту в PDF.


Основні параметри для відображення на ДФ:


Типи договорів


ОСЦПВ$F{contract}ua.nexstep.evo.shared.model.Policy - ua.nexstep.evo.shared.model.tariff.policy.TariffPolicy
Е-поліс ОСЦПВ$F{contract}ua.nexstep.evo.shared.model.EPolicy - ua.nexstep.evo.shared.model.tariff.policy.TariffEPolicy
ДЦВ$F{contract}ua.nexstep.evo.shared.model.Vcl - ua.nexstep.evo.shared.model.tariff.vcl.TariffVcl
Зелена картка$F{contract}ua.nexstep.evo.shared.model.GreenCard - ua.nexstep.evo.shared.model.tariff.greencard.TariffGreenCard
Майно$F{contract}ua.nexstep.evo.shared.model.Property - ua.nexstep.evo.shared.model.tariff.custom.TariffCustom
КАСКО$F{contract}ua.nexstep.evo.shared.model.Kasko - ua.nexstep.evo.shared.model.tariff.kasko.TariffKasko
Нещасний випадок$F{contract}ua.nexstep.evo.shared.model.Accident - ua.nexstep.evo.shared.model.tariff.custom.TariffCustom
Туризм$F{contract}ua.nexstep.evo.shared.model.Tourism - ua.nexstep.evo.shared.model.tariff.tourism.TariffTourism
ДМС$F{contract}ua.nexstep.evo.shared.model.LiabilityMedicine - ua.nexstep.evo.shared.model.tariff.custom.TariffCustom
ЗНБ$F{contract}ua.nexstep.evo.shared.model.Health - ua.nexstep.evo.shared.model.tariff.custom.TariffCustom
Кастомний$F{contract}ua.nexstep.evo.shared.model.CustomContract - ua.nexstep.evo.shared.model.tariff.custom.TariffCustom


Типи об'єктів страхування


Автомобіль$F{insuranceObject}ua.nexstep.evo.shared.model.
InsuranceObjectAuto
Марка, модель$F{insuranceObject}.asAuto().getModelText()java.lang.String
Регістраційний номер$F{insuranceObject}.asAuto().getStateNumber()java.lang.String
Ознака відсутності номеру кузова$F{insuranceObject}.isDontHaveBodyNumber()java.lang.Boolean
Номер кузова$F{insuranceObject}.asAuto().getBodyNumber()java.lang.String
За межами Україны (ознака)$F{insuranceObject}.isOutsideUkraine()java.lang.Boolean
Місце реєстрації$F{insuranceObject}.asAuto().
getRegistrationPlace().getNameFull()
java.lang.String
Особа$F{insuranceObject}ua.nexstep.evo.shared.model.
InsuranceObjectPerson

"Назва (ПІБ)"

$F{insuranceObject}.getObjectName()
Прізвище (1 застрахований)$F{contract}.getInsuranceObjects().get(0).
asPerson().getNameLast()

Ім'я (1 застрахований)$F{contract}.getInsuranceObjects().get(0).
asPerson().getNameFirst()

По-батькові (1 застрахованни)$F{contract}.getInsuranceObjects().get(0).
asPerson().getNameMiddle()

Дата народження$F{insuranceObject}.getBirthDate()

пример: $F{insuranceObject}.getBirthDate().
format(DateUtils.DEFAULT_DATE_FORMATTER)
java.util.Date
Код ЕДРПОУ/ІПН$F{insuranceObject}.getCode()java.lang.String
Серія документу$F{insuranceObject}.getDocument().getSeries()java.lang.String
Номер документу$F{insuranceObject}.getDocument().getNumber()java.lang.String
Ким виданий документ$F{insuranceObject}.getDocument().getIssuedBy()java.lang.String
Дата видачі документу$F{insuranceObject}.getDocument().getDate()java.util.Date
Майно$F{insuranceObject}ua.nexstep.evo.shared.model.
InsuranceObjectProperty
Назва$F{insuranceObject}.getObjectName()java.lang.String
Адреса об'єкту$F{insuranceObject}.getAddress()java.lang.String


Договір


EWA-код договору$F{contract}.getCode()

пример: "№ EWA-" + ($F{contract}.getCode() != null ? $F{contract}.getCode() : "")
java.lang.String
Номер договору$F{number}

пример: ($F{number} != null ? $F{number} : $F{code})
java.lang.String
Серія та номер бланку без пробілу$V{varNumberTrim} != null ? $V{varNumberTrim} : $F{code}
java.lang.String
Номер бланку без серії
$F{number} != null ? $F{number}.substring($F{number}.indexOf(" ") + 1) : ""
java.lang.String
Номер договору з додаванням нулів

    <variable name="varNumberList" class="java.util.List">

        <variableExpression><![CDATA[Arrays.asList($F{number}.replaceAll("\\p{Z}","-").split("-", 2))]]></variableExpression>

    </variable>

    <variable name="varContractNumber" class="java.lang.String">

        <variableExpression><![CDATA[$V{varNumberList}.size() > 1 ? $V{varNumberList}.get(1) : ""]]></variableExpression>

    </variable>

    <variable name="varContractSeries" class="java.lang.String">

        <variableExpression><![CDATA[$V{varNumberList}.size() > 0 ? $V{varNumberList}.get(0) : ""]]></variableExpression>

    </variable>

    <variable name="varContractSeriesAndNumber" class="java.lang.String">

        <variableExpression><![CDATA[($V{varContractSeries} != null ? ($V{varContractSeries} + " ") : "") +

($V{varContractNumber} != null ? new DecimalFormat("0000000").format(Integer.parseInt

($V{varContractNumber})) : "")]]></variableExpression>

    </variable>


Дата договору$F{date}

пример:
$F{date}.format(DateTimeFormatter.ofPattern("dd.MM.yyyy р."))
java.util.Date
Дата початку$F{dateFrom}

пример: 
$F{dateFrom}.format(DateTimeFormatter.ofPattern("dd.MM.yyyy"))
java.util.Date
Дата закінчення$F{dateTo}

пример:
$F{dateTo}.format(DateTimeFormatter.ofPattern("dd.MM.yyyy"))
java.util.Date
Дата створення договору$F{created}java.util.Date
Страхова сума (ліміт)$F{limit}java.math.BigDecimal
Страхова сума$F{insuranceAmount}java.math.BigDecimal
Страховий платіж$F{payment}java.math.BigDecimal
Франшиза$F{franchise}java.math.BigDecimal
Договір Туризм

Кількість днів$F{contract}.getCoverageDays()java.lang.Long
Кількість застрахованих$F{contract}.getInsuranceObjects().size()java.lang.Long
Програма страхування$F{contract}.getCustomFieldValue("travel_program")java.lang.String
Кількість поїздок$F{contract}.isMultivisa()java.lang.Boolean
Зона покриття$F{contract}.getCoverageTerritory().getShortName()java.lang.String
Країна поїздки$F{contract}.getCountry().getNameInEnglish()


Страхувальник


Назва (ПІБ)$F{customer}.getName()java.lang.String
Прізвище
$F{customer}.getNameLast()java.lang.String
Ім'я$F{customer}.getNameFirst()java.lang.String
По-батькові$F{customer}.getNameMiddle()java.lang.String
Дата народження$F{customer}.getBirthDate()

пример: (!$F{customer}.isLegal() && $F{customer}.getBirthDate() != null) ? $F{customer}.getBirthDate().format(DateTimeFormatter.ofPattern("dd.MM.yyyy р.")) : "")
java.util.Date
Адреса$F{customer}.getAddress()

пример: ($F{customer}.getAddress() != null ? $F{customer}.getAddress() : "")
java.lang.String
ЕДРПОУ/ ІПН$F{customer}.getCode()

пример: ($F{customer}.getCode() != null ? $F{customer}.getCode() : "")
java.lang.String
OTP-пароль$F{customerOtp}

пример: ($F{customerOtp} != null ? $F{customerOtp} : "")

Коротко ПІБ (для підпису)$F{customer}.getShortName()java.lang.String
Телефон$F{customer}.getPhone()

пример: ($F{customer}.getPhone() != null ? $F{customer}.getPhone() : "")
java.lang.String
Е-mail$F{customer}.getEmail()

пример: ($F{customer}.getEmail() != null ? $F{customer}.getEmail() : "")
java.lang.String
Юр. особа (ознака)$F{customer}.isLegal()java.lang.Boolean
Тип документуServerMessages.MESSAGES.customerDocumentTypeText
($F{customer}.getDocument().getType(), ServerMessages.UKRAINIAN)
предварительно добавить библиотеку ua.nexstep.evo.server.internationalization.*

Серія документу$F{customer}.getDocument().getSeries()

пример: ($F{customer}.getDocument().getSeries() != null ?
$F{customer}.getDocument().getSeries(): "")
java.lang.String
Номер документу$F{customer}.getDocument().getNumber()

пример: ($F{customer}.getDocument().getNumber() != null ?
$F{customer}.getDocument().getNumber(): "")
java.lang.String
Ким виданий документ$F{customer}.getDocument().getIssuedBy()

пример: ($F{customer}.getDocument().getIssuedBy() != null ? (" виданий " + $F{customer}.getDocument().getIssuedBy()) : "")
java.lang.String
Дата видачі документу$F{customer}.getDocument().getDate()

пример: ($F{customer}.getDocument().getDate() != null ?
(" від " + $F{customer}.getDocument().getDate().
format(DateTimeFormatter.ofPattern("dd.MM.yyyy р."))) : "")
java.util.Date
Документ Страхувальника

(ServerMessages.MESSAGES.customerDocumentTypeText

($F{customer}.getDocument().getType(), ServerMessages.UKRAINIAN) +": " +

($F{customer}.getDocument() != null ?

($F{customer}.getDocument().getSeries() != null ? ($F{customer}.getDocument().getSeries()+ " ") : "") +

($F{customer}.getDocument().getNumber() != null ? $F{customer}.getDocument().getNumber() : "___________") +

($F{customer}.getDocument().getIssuedBy() != null ? (" виданий " + $F{customer}.getDocument().getIssuedBy()) : "") +

($F{customer}.getDocument().getDate() != null ? (" від " + $F{customer}.getDocument().getDate().format

(DateTimeFormatter.ofPattern("dd.MM.yyyy р."))) : "")

: ""))



Платежи


Платежі за договор$F{contract}.getPayments()
1 платіж$F{contract}.getPayments().size() > 0 ? (new DecimalFormat("#,##0.00").format($F{contract}.getPayments().get(0).getPayment())) : (new DecimalFormat("#,##0.00").format($F{payment}))
2 платежі$F{contract}.getPayments().size() > 1 ? (new DecimalFormat("#,##0.00").format($F{contract}.getPayments().get(1).getPayment())) : ""
Дата 2-го платежа($F{contract}.getPayments().size() > 1 ? ("до 24.00 " + $F{contract}.getPayments().get(1).getDate().format(DateUtils.DEFAULT_DATE_FORMATTER) + " р.") : "")


Даты (преобразование)


Перемінні

TRANSFER_DATE_FORMAT = "yyyy-MM-dd"

TRANSFER_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

DEFAULT_DATE_FORMAT = "dd.MM.yyyy"

DEFAULT_DATE_TIME_FORMAT = "dd.MM.yyyy HH:mm:ss"

Перетворення дати з кастомного поляLocalDate.parse($F{contract}.getCustomFieldValue("osago_date"), DateUtils.TRANSFER_DATE_FORMATTER).format(DateUtils.DEFAULT_DATE_FORMATTER)
Періоди страхування по рокам

"<b>5.2.1.</b> Перший період страхування – з 00.00 год. " + $F{dateFrom}.format(DateUtils.DEFAULT_DATE_FORMATTER) + " по 24.00 год. " + DateUtils.addMonthsToDateMinusOneDay($F{dateFrom}.toLocalDate(), DateUtils.MONTHS_IN_YEAR).format(DateUtils.DEFAULT_DATE_FORMATTER) + " р." + "\n" +

((DateUtils.yearsBetween($F{dateFrom}.toLocalDate(), $F{dateTo}) > 1) ? (

"<b>5.2.2.</b> Другий період страхування – з 00.00 год. " + DateUtils.addMonthsToDateMinusOneDay($F{dateFrom}.toLocalDate(), DateUtils.MONTHS_IN_YEAR).plusDays(1).format(DateUtils.DEFAULT_DATE_FORMATTER) + " по 24.00 год. " + DateUtils.addMonthsToDateMinusOneDay($F{dateFrom}.toLocalDate(), DateUtils.MONTHS_IN_YEAR * 2).format(DateUtils.DEFAULT_DATE_FORMATTER) + " р." + "\n") : "")

Місяць рядком$F{dateFrom}.format(DateTimeFormatter.ofPattern("«dd» MMMM yyyy", new Locale("uk")))
Кількість днів дії договоруDateUtils.daysBetween($F{dateTo}, $F{dateFrom}.toLocalDate())


Суми/числові значення


Страховий платіж$F{payment}

пример: ($F{payment} != null ? new DecimalFormat("#,##0.00").format($F{payment}) : "")
Страхова сума$F{insuranceAmount}

пример: ($F{insuranceAmount} != null ? new DecimalFormat("#,##0.00").format($F{insuranceAmount}) : "")


Дійсна вартість ТЗ (КАСКО)


new DecimalFormat("#,##0.00").format($F{insuranceObject}.getPrice())
Страхова сума прописом

(Long.toString($F{insuranceAmount}.longValue()) + 

" грн. " +

String.format("%02d", $F{insuranceAmount}.subtract($F{insuranceAmount}.setScale(0, RoundingMode.DOWN)).setScale(2, RoundingMode.HALF_DOWN).unscaledValue().longValue()) + 

" коп. (" +

String.format(

"%s грн. %02d коп.",

new RuleBasedNumberFormat(new Locale("uk"), RuleBasedNumberFormat.SPELLOUT).format(

$F{insuranceAmount}.longValue(), "%spellout-cardinal-feminine"),

$F{insuranceAmount}.subtract($F{insuranceAmount}.setScale(0, RoundingMode.DOWN)).setScale(2, RoundingMode.HALF_DOWN).unscaledValue().intValue()) +

") ")

Страховий платіж прописом

(Long.toString($F{payment}.longValue()) + 

" грн. " +

String.format("%02d", $F{payment}.subtract($F{payment}.setScale(0, RoundingMode.DOWN)).setScale(2, RoundingMode.HALF_DOWN).unscaledValue().longValue()) + 

" коп. (" +

String.format(

    "%s грн. %d коп.",

    new RuleBasedNumberFormat(new Locale("uk"), RuleBasedNumberFormat.SPELLOUT).format(

        $F{payment}.longValue(), "%spellout-cardinal-feminine"),

        $F{payment}.subtract($F{payment}.setScale(0, RoundingMode.DOWN)).setScale(2, RoundingMode.HALF_DOWN).unscaledValue().intValue()) +

") ")

Страховой тариф (розрахунковий)($F{insuranceAmount} != null ? new DecimalFormat("#,##0.00##").format($F{payment}.
divide($F{insuranceAmount}, new MathContext(8)).multiply(new BigDecimal("100"), new MathContext(4))) : "")


Інші поля


Зовнішній ідентифікатор точки продаж($F{contract}.getSalePoint().getCode() != null ? $F{contract}.getSalePoint().getCode() : "")


Кастомні (настраюваня) поля


на рівні договору$F{contract}.getCustomFieldValue("iznos")
на рівні договору  (значення коефіцієнта)$F{contract}.getCustomFieldCoeff("region_im")
на рівні об'єкту страхування$F{insuranceObject}.getCustomFieldValue("kasko_expert")
на рівні ризику$F{contract}.getRisk(1L).getCustomFieldValue("sport")
якщо поле типу "список", можна витягувати "назву" зі списку$F{contract}.getCustomFieldDisplayValue("representative_insurer_new")


--------------------------------------------------------------------------------------------------------------------------------------------------------

4. Загрузка друкованої форми в EWA

--------------------------------------------------------------------------------------------------------------------------------------------------------


Друковані форми в EWA знаходяться в меню налаштувань - "Шаблони друкованих форм":



Для додання нової друкованої форми можна обрати варіант "Створити" або "Копіювати" (для використання параметрів вже існуючої друкованої форми). 


Для створення нової ДФ необхідно натиснути кнопку "Створити", обрати тип форми "Jasper"


На вкладці "Основна інформація" необхідно заповнити поля:


Назва

Вказати назву ДФ

Вміст

Необхідно завантажити файл друкованої форми з розширенням *.jrxml. Натиснувши на кнопку "Обрати", завантажити файл з вашого компьютера. Щоб скачати файл вже існуючої форми на компьютер користувача, необхідно натиснути на кнопку "Завантажити файл друкованої форми"

Чорновик

Накладення ЕЦП

Відправляти ДФ Страхувальнику 

Тип договору

Відмітити галочками необхідні поля

Параметри

Зазначити параметрі відображення ДФ

Примітки

За необхідимості до друкованої форми можна додати коментар

Період дії

Зазначити період дії друкованої форми


На вкладці “Страхові продукти” будуть відображені страхові продукти, до яких дана друкована форма прикріплена.