hl-core 0.0.7-beta.9 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/.prettierrc +2 -1
  2. package/api/index.ts +66 -47
  3. package/api/interceptors.ts +4 -4
  4. package/components/Button/Btn.vue +7 -2
  5. package/components/Button/ScrollButtons.vue +6 -0
  6. package/components/Complex/ContentBlock.vue +5 -0
  7. package/components/{Layout → Dialog}/Dialog.vue +3 -27
  8. package/components/Dialog/FamilyDialog.vue +39 -0
  9. package/components/Form/FormBlock.vue +114 -0
  10. package/components/Form/FormSection.vue +18 -0
  11. package/components/Form/FormTextSection.vue +20 -0
  12. package/components/Form/FormToggle.vue +52 -0
  13. package/components/Form/ProductConditionsBlock.vue +68 -0
  14. package/components/Input/EmptyFormField.vue +5 -0
  15. package/components/Input/FileInput.vue +71 -0
  16. package/components/Input/FormInput.vue +171 -0
  17. package/components/Input/PanelInput.vue +133 -0
  18. package/components/Input/RoundedInput.vue +35 -36
  19. package/components/Layout/Drawer.vue +18 -16
  20. package/components/Layout/Header.vue +4 -18
  21. package/components/Layout/Loader.vue +1 -7
  22. package/components/Layout/SettingsPanel.vue +17 -37
  23. package/components/List/ListEmpty.vue +22 -0
  24. package/components/Menu/MenuNav.vue +22 -20
  25. package/components/Menu/MenuNavItem.vue +6 -6
  26. package/components/Pages/Anketa.vue +333 -0
  27. package/components/Pages/Auth.vue +91 -0
  28. package/components/Pages/Documents.vue +108 -0
  29. package/components/Pages/MemberForm.vue +1138 -0
  30. package/components/Pages/ProductAgreement.vue +18 -0
  31. package/components/Pages/ProductConditions.vue +349 -0
  32. package/components/Panel/PanelItem.vue +2 -4
  33. package/components/Panel/PanelSelectItem.vue +20 -0
  34. package/components/Transitions/FadeTransition.vue +5 -0
  35. package/composables/classes.ts +299 -253
  36. package/composables/constants.ts +14 -7
  37. package/composables/index.ts +55 -60
  38. package/composables/styles.ts +31 -7
  39. package/layouts/default.vue +46 -26
  40. package/layouts/full.vue +2 -12
  41. package/nuxt.config.ts +3 -0
  42. package/package.json +13 -10
  43. package/pages/500.vue +40 -12
  44. package/plugins/helperFunctionsPlugins.ts +6 -2
  45. package/plugins/storePlugin.ts +6 -5
  46. package/store/data.store.js +781 -1880
  47. package/store/member.store.ts +291 -0
  48. package/store/messages.ts +66 -51
  49. package/store/rules.js +26 -28
  50. package/types/index.ts +250 -0
  51. package/composables/models.ts +0 -43
  52. /package/store/{form.store.js → form.store.ts} +0 -0
@@ -0,0 +1,291 @@
1
+ import { defineStore } from 'pinia';
2
+ import { useDataStore } from './data.store';
3
+ import { useFormStore } from './form.store';
4
+ import { ErrorHandler } from '../composables';
5
+ import { AxiosError } from 'axios';
6
+ import { Member } from '../composables/classes';
7
+
8
+ export const useMemberStore = defineStore('members', {
9
+ state: () => ({
10
+ router: useRouter(),
11
+ dataStore: useDataStore(),
12
+ formStore: useFormStore(),
13
+ }),
14
+ actions: {
15
+ isStatementEditible(whichForm: string, showToaster: boolean = false) {
16
+ if (this.formStore.isDisabled[whichForm as keyof typeof this.formStore.isDisabled] === true) {
17
+ if (showToaster) this.dataStore.showToaster('error', this.dataStore.t('toaster.viewErrorText'), 2000);
18
+ return false;
19
+ }
20
+ return true;
21
+ },
22
+ validateInitiator(showToaster: boolean = true) {
23
+ if (!this.dataStore.isInitiator()) {
24
+ if (showToaster) this.dataStore.showToaster('error', this.dataStore.t('toaster.viewErrorText'));
25
+ return false;
26
+ }
27
+ return true;
28
+ },
29
+ hasMemberData(whichForm: MemberKeys, whichIndex?: number, key: string = 'id', emptyValue: any = 0) {
30
+ if (!this.validateInitiator(false)) return false;
31
+ if (!this.isStatementEditible(whichForm)) return false;
32
+ return typeof whichIndex === 'number' ? this.formStore[whichForm][whichIndex][key] != emptyValue : this.formStore[whichForm][key] != emptyValue;
33
+ },
34
+ canMemberDeleted(whichForm: MemberKeys, whichIndex?: number) {
35
+ if (!whichForm) return false;
36
+ if (!this.isStatementEditible(whichForm)) return false;
37
+ if (!this.validateInitiator(false)) return false;
38
+ if (typeof whichIndex === 'number' && whichIndex > 0) {
39
+ return true;
40
+ }
41
+ if (this.dataStore.isTask() && this.dataStore.isProcessEditable(this.formStore.applicationData.statusCode)) {
42
+ if (whichForm !== this.formStore.policyholderFormKey) {
43
+ return this.hasMemberData(whichForm, whichIndex);
44
+ }
45
+ }
46
+ return false;
47
+ },
48
+ getMemberFromStore(whichForm: MemberKeys, whichIndex?: number): Member | null {
49
+ switch (whichForm) {
50
+ case this.formStore.policyholderFormKey:
51
+ return this.formStore.policyholderForm;
52
+ case this.formStore.policyholdersRepresentativeFormKey:
53
+ return this.formStore.policyholdersRepresentativeForm;
54
+ case this.formStore.insuredFormKey:
55
+ return this.formStore.insuredForm[whichIndex!];
56
+ case this.formStore.beneficiaryFormKey:
57
+ return this.formStore.beneficiaryForm[whichIndex!];
58
+ case this.formStore.beneficialOwnerFormKey:
59
+ return this.formStore.beneficialOwnerForm[whichIndex!];
60
+ default:
61
+ return null;
62
+ }
63
+ },
64
+ getMemberFromApplication(whichForm: MemberKeys, whichIndex?: number) {
65
+ const id = typeof whichIndex === 'number' ? this.formStore[whichForm][whichIndex].id : this.formStore[whichForm].id;
66
+ switch (whichForm) {
67
+ case this.formStore.policyholderFormKey:
68
+ return this.formStore.applicationData.clientApp;
69
+ case this.formStore.policyholdersRepresentativeFormKey:
70
+ return this.formStore.applicationData.spokesmanApp;
71
+ case this.formStore.insuredFormKey: {
72
+ const inStore = this.formStore.applicationData.insuredApp.find((member: any) => member.insisId === id);
73
+ return !!inStore ? inStore : false;
74
+ }
75
+ case this.formStore.beneficiaryFormKey: {
76
+ const inStore = this.formStore.applicationData.beneficiaryApp.find((member: any) => member.insisId === id);
77
+ return !!inStore ? inStore : false;
78
+ }
79
+ case this.formStore.beneficialOwnerFormKey: {
80
+ const inStore = this.formStore.applicationData.beneficialOwnerApp.find((member: any) => member.insisId === id);
81
+ return !!inStore ? inStore : false;
82
+ }
83
+ }
84
+ },
85
+ getMemberClass(whichForm: MemberKeys) {
86
+ if (!whichForm) return false;
87
+ switch (whichForm) {
88
+ case this.formStore.policyholderFormKey:
89
+ return new PolicyholderForm();
90
+ case this.formStore.insuredFormKey:
91
+ return new InsuredForm();
92
+ case this.formStore.beneficiaryFormKey:
93
+ return new BeneficiaryForm();
94
+ case this.formStore.beneficialOwnerFormKey:
95
+ return new BeneficialOwnerForm();
96
+ case this.formStore.policyholdersRepresentativeFormKey:
97
+ return new PolicyholdersRepresentativeForm();
98
+ default:
99
+ return false;
100
+ }
101
+ },
102
+ getMemberCode(whichForm: MemberKeys) {
103
+ switch (whichForm) {
104
+ case this.formStore.policyholderFormKey:
105
+ return 'Client';
106
+ case this.formStore.insuredFormKey:
107
+ return 'Insured';
108
+ case this.formStore.beneficiaryFormKey:
109
+ return 'Beneficiary';
110
+ case this.formStore.beneficialOwnerFormKey:
111
+ return 'BeneficialOwner';
112
+ case this.formStore.policyholdersRepresentativeFormKey:
113
+ return 'Spokesman';
114
+ }
115
+ },
116
+ clearMember(whichForm: MemberKeys, whichIndex?: number) {
117
+ if (!whichForm) return false;
118
+ if (!this.isStatementEditible(whichForm)) return false;
119
+ if (!this.validateInitiator()) return false;
120
+ if (whichForm === this.formStore.policyholderFormKey || whichForm === this.formStore.policyholdersRepresentativeFormKey) {
121
+ this.formStore[whichForm].resetMember();
122
+ }
123
+ if (typeof whichIndex === 'number') {
124
+ if (this.formStore[whichForm].length === 1) {
125
+ this.formStore[whichForm][whichIndex].resetMember();
126
+ } else {
127
+ this.formStore[whichForm].splice(whichIndex, 1);
128
+ }
129
+ }
130
+ return true;
131
+ },
132
+ async deleteMember(taskId: string, whichForm: MemberKeys, whichIndex?: number) {
133
+ if (!whichForm) return false;
134
+ if (!this.isStatementEditible(whichForm)) return false;
135
+ if (!this.validateInitiator()) return false;
136
+ try {
137
+ const memberCode = this.getMemberCode(whichForm);
138
+ const memberData = this.getMemberFromApplication(whichForm, whichIndex);
139
+ if (!memberCode) return false;
140
+ if (typeof whichIndex !== 'number') {
141
+ if (whichForm === this.formStore.policyholdersRepresentativeFormKey) {
142
+ await this.dataStore.api.deleteMember(memberCode, this.formStore.applicationData.processInstanceId);
143
+ }
144
+ } else {
145
+ if (memberData) await this.dataStore.api.deleteMember(memberCode, memberData.id as number);
146
+ }
147
+ if (memberData) await this.dataStore.getApplicationData(taskId, true, true, true, false);
148
+ return this.clearMember(whichForm, whichIndex);
149
+ } catch (err) {
150
+ console.log(err);
151
+ return ErrorHandler(err);
152
+ }
153
+ },
154
+ addMember(whichForm: MemberKeys) {
155
+ if (!whichForm) return false;
156
+ if (!this.isStatementEditible(whichForm)) return false;
157
+ if (!this.validateInitiator()) return false;
158
+ this.formStore[whichForm].push(this.getMemberClass(whichForm));
159
+ },
160
+ async getOtpStatus(iin: string, phone: string, processInstanceId: string | number | null = null) {
161
+ try {
162
+ const otpData = {
163
+ iin: iin.replace(/-/g, ''),
164
+ phoneNumber: formatPhone(phone),
165
+ type: 'AgreementOtp',
166
+ };
167
+ return await this.dataStore.api.getOtpStatus(
168
+ processInstanceId !== null && processInstanceId !== 0
169
+ ? {
170
+ ...otpData,
171
+ processInstanceId: processInstanceId,
172
+ }
173
+ : otpData,
174
+ );
175
+ } catch (err) {
176
+ return ErrorHandler(err);
177
+ }
178
+ },
179
+ async checkOtp(member: Member) {
180
+ if (!member.otpTokenId || !member.otpCode || !member.phoneNumber) {
181
+ this.dataStore.showToaster('error', this.dataStore.t('error.noOtpCode'));
182
+ return;
183
+ }
184
+ try {
185
+ this.dataStore.isLoading = true;
186
+ const otpData = {
187
+ tokenId: member.otpTokenId,
188
+ phoneNumber: formatPhone(member.phoneNumber),
189
+ code: member.otpCode.replace(/\s/g, ''),
190
+ };
191
+ const otpResponse = await this.dataStore.api.checkOtp(otpData);
192
+ if (otpResponse !== null) {
193
+ if ('errMessage' in otpResponse && otpResponse.errMessage !== null) {
194
+ this.dataStore.showToaster('error', otpResponse.errMessage, 3000);
195
+ return false;
196
+ }
197
+ if ('status' in otpResponse && !!otpResponse.status) {
198
+ // TODO Доработать и менять значение hasAgreement.value => true
199
+ this.dataStore.showToaster(otpResponse.status !== 2 ? 'error' : 'success', otpResponse.statusName, 3000);
200
+ if (otpResponse.status === 2) {
201
+ return true;
202
+ }
203
+ }
204
+ }
205
+ return false;
206
+ } catch (err) {
207
+ ErrorHandler(err);
208
+ } finally {
209
+ this.dataStore.isLoading = false;
210
+ }
211
+ return null;
212
+ },
213
+ async sendOtp(member: Member, processInstanceId: string | number | null = null, onInit: boolean = false) {
214
+ if (!this.validateInitiator()) return null;
215
+ this.dataStore.isLoading = true;
216
+ let otpStatus: boolean = false;
217
+ let otpResponse: SendOtpResponse = {};
218
+ try {
219
+ if (member.iin && member.phoneNumber && member.iin.length === useMask().iin.length && member.phoneNumber.length === useMask().phone.length) {
220
+ const status = await this.getOtpStatus(member.iin, member.phoneNumber, processInstanceId);
221
+ if (status === true) {
222
+ this.dataStore.showToaster('success', this.dataStore.t('toaster.hasSuccessOtp'), 3000);
223
+ otpStatus = true;
224
+ this.dataStore.isLoading = false;
225
+ return { otpStatus, otpResponse };
226
+ } else if (status === false && onInit === false) {
227
+ const otpData = {
228
+ iin: member.iin.replace(/-/g, ''),
229
+ phoneNumber: formatPhone(member.phoneNumber),
230
+ type: 'AgreementOtp',
231
+ };
232
+ otpResponse = await this.dataStore.api.sendOtp(
233
+ processInstanceId !== null && processInstanceId !== 0
234
+ ? {
235
+ ...otpData,
236
+ processInstanceId: processInstanceId,
237
+ }
238
+ : otpData,
239
+ );
240
+ this.dataStore.isLoading = false;
241
+ if (!!otpResponse) {
242
+ if ('errMessage' in otpResponse && otpResponse.errMessage !== null) {
243
+ this.dataStore.showToaster('error', otpResponse.errMessage, 3000);
244
+ return { otpStatus };
245
+ }
246
+ if ('result' in otpResponse && otpResponse.result === null) {
247
+ if ('statusName' in otpResponse && !!otpResponse.statusName) {
248
+ this.dataStore.showToaster('error', otpResponse.statusName, 3000);
249
+ return { otpStatus };
250
+ }
251
+ if ('status' in otpResponse && !!otpResponse.status) {
252
+ this.dataStore.showToaster('error', otpResponse.status, 3000);
253
+ return { otpStatus };
254
+ }
255
+ }
256
+ if ('tokenId' in otpResponse && otpResponse.tokenId) {
257
+ member.otpTokenId = otpResponse.tokenId;
258
+ this.dataStore.showToaster('success', this.dataStore.t('toaster.successOtp'), 3000);
259
+ }
260
+ } else {
261
+ this.dataStore.showToaster('error', this.dataStore.t('error.noOtpResponse'), 3000);
262
+ return { otpStatus };
263
+ }
264
+ }
265
+ } else {
266
+ if (onInit === false) {
267
+ this.dataStore.showToaster('error', this.dataStore.t('toaster.errorFormField').replace('{text}', 'Номер телефона, ИИН'));
268
+ this.dataStore.isLoading = false;
269
+ }
270
+ }
271
+ return { otpStatus, otpResponse };
272
+ } catch (err) {
273
+ this.dataStore.isLoading = false;
274
+ if (err instanceof AxiosError)
275
+ if ('response' in err && err.response && err.response.data) {
276
+ if ('statusName' in err.response.data && !!err.response.data.statusName) {
277
+ this.dataStore.showToaster('error', this.dataStore.t('toaster.phoneNotFoundInBMG'), 3000);
278
+ return { otpStatus };
279
+ }
280
+ if ('status' in err.response.data && !!err.response.data.status) {
281
+ this.dataStore.showToaster('error', err.response.data.status, 3000);
282
+ return { otpStatus };
283
+ }
284
+ }
285
+ } finally {
286
+ this.dataStore.isLoading = false;
287
+ }
288
+ return { otpStatus, otpResponse };
289
+ },
290
+ },
291
+ });
package/store/messages.ts CHANGED
@@ -28,16 +28,22 @@ export const messages = {
28
28
  rejectCause: 'Причина отказа',
29
29
  returnCause: 'Причина возврата на доработку',
30
30
  },
31
+ error: {
32
+ title: 'Ошибка 404',
33
+ description: 'Страница, которую вы запрашиваете, не существует либо устарела.',
34
+ connectionLost: 'Нет подключения к Интернету',
35
+ checkConnection: 'Проверьте ваше подключение',
36
+ noOtpResponse: 'Отсутствует ответ при отправке OTP кода',
37
+ noOtpCode: 'Заполните поля: ИИН, Номер телефона, Код подтверждения',
38
+ },
31
39
  toaster: {
40
+ noIinOrPhone: 'Отсутствуют данные для отправки СМС',
32
41
  ESBDErrorMessage: 'Введены не корректные данные по этому ИИН',
33
- phoneNotFoundInBMG:
34
- 'Введите номер зарегистрированный в БМГ или зарегистрируйте клиента в БМГ',
35
- errorSumOrPercentage:
36
- 'Процент от суммы выплат не может быть меньше или больше 100',
42
+ phoneNotFoundInBMG: 'Введите номер зарегистрированный в БМГ или зарегистрируйте клиента в БМГ',
43
+ errorSumOrPercentage: 'Процент от суммы выплат не может быть меньше или больше 100',
37
44
  fileWasDeleted: 'Файл успешно удален',
38
45
  attachManagerError: 'Прикрепите заявку менеджеру',
39
- viewErrorText:
40
- 'Вы сейчас находитесь в режиме просмотра или у вас нет доступа',
46
+ viewErrorText: 'Вы сейчас находитесь в режиме просмотра или у вас нет доступа',
41
47
  editModeText: 'Вы перешли в режим редактирования',
42
48
  viewModeText: 'Вы перешли в режим просмотра',
43
49
  noEditText: 'У вас нет доступа на редактирование',
@@ -51,8 +57,7 @@ export const messages = {
51
57
  undefinedError: 'Что-то произошло не так',
52
58
  noProductPermission: 'У вас нет доступа к данному продукту',
53
59
  noStatementPermission: 'У вас нет доступа к данной заявке',
54
- formFieldEmptyWarning:
55
- 'Вам нужно заполнить некоторые поля и сохранить участника',
60
+ formFieldEmptyWarning: 'Вам нужно заполнить некоторые поля и сохранить участника',
56
61
  needToRunStatement: 'Нужно создать заявку',
57
62
  shouldBeOneInsured: 'Нельзя удалить единственного застрахованного',
58
63
  readyStatementMembers: 'Данные всех участников успешно сохранены',
@@ -71,11 +76,10 @@ export const messages = {
71
76
  incorrectInput: 'Значение введено некорректно',
72
77
  error: 'Произошла ошибка ',
73
78
  applicationDeleted: 'Заявка удалена',
74
- emptyProductConditions:
75
- 'Не заполнены данные условия продуктов и расчетов',
76
- emptyHealthAnketa: 'Не заполнены данные анкеты по здоровью',
77
- emptyCriticalAnketa:
78
- 'Не заполнены данные анкеты по критическому заболеванию застрахованного',
79
+ emptyProductConditions: 'Не заполнены данные условия продуктов и расчетов',
80
+ emptyHealthAnketa: 'Не заполнены данные анкеты по здоровью Застрахованного',
81
+ emptyHealthAnketaPolicyholder: 'Не заполнены данные анкеты по здоровью Страхователя',
82
+ emptyCriticalAnketa: 'Не заполнены данные анкеты по критическому заболеванию Застрахованного',
79
83
  successOperation: 'Операция прошла успешно',
80
84
  noAssignee: 'Нужно взять задачу в работу',
81
85
  canDoOnlyAssignee: 'Задача в работе и у вас нету доступа',
@@ -83,22 +87,28 @@ export const messages = {
83
87
  noTasksForYou: 'Список, назначенных задач на вашу роль, пустой',
84
88
  youCanNotStartApplication: 'У вас нет доступа на запуск заявки',
85
89
  hasNewApplicationState: 'Неактуальная заявка',
86
- reloadEverySeconds: 'Обновление можно делать каждые { text } секунд',
90
+ reloadEverySeconds: 'Обновление можно делать каждые {text} секунд',
87
91
  successReload: 'Обновлено',
88
- sendEverySeconds: 'СМС можно отправлять каждые { text } секунд ',
92
+ sendEverySeconds: 'СМС можно отправлять каждые {text} секунд ',
89
93
  waitForClient: 'Ожидайте подтверждения клиента',
90
94
  noSuchProduct: 'Ошибка при переходе: неправильная ссылка',
91
- affiliationDocumentNotUploaded:
92
- 'Не прикреплен файл в решении андеррайтингового совета',
95
+ affiliationDocumentNotUploaded: 'Не прикреплен файл в решении андеррайтингового совета',
93
96
  documentNumberWasNotFilled: 'Номер документа и дата не были заполнены',
94
- valueShouldBeHigher: `Значение должно быть больше { text } процентов`,
97
+ valueShouldBeHigher: `Значение должно быть больше {text} процентов`,
95
98
  valueShouldBeBetween: `Значение должно быть в промежутке от { floor } до { ceil } процентов`,
96
99
  needAgreement: 'Нужно получить согласие клиента',
97
100
  successOtp: 'Код подтверждения отправлен успешно',
98
101
  hasSuccessOtp: 'По клиенту уже имеется согласие',
99
102
  tokenExpire: 'Истекло время ожидания',
103
+ requiredBeneficiary: 'Необходимо указать данные выгодоприобретателя',
104
+ requiredInsured: 'Необходимо указать данные застрахованного',
105
+ needToRecalculate: 'Необходимо пересчитать условия продукта',
106
+ noUrl: 'Отсутствует ссылка',
107
+ pickFamilyMember: 'Выберите члена семьи',
100
108
  },
101
109
  buttons: {
110
+ createStatement: 'Создать заявку',
111
+ add: 'Добавить',
102
112
  userLogin: 'Логин',
103
113
  password: 'Пароль',
104
114
  login: 'Вход в систему',
@@ -111,6 +121,7 @@ export const messages = {
111
121
  create: 'Создать',
112
122
  becomeAgent: 'Стать агентом',
113
123
  close: 'Закрыть',
124
+ reload: 'Обновить',
114
125
  makeIssueInvoice: 'Создать Счет на оплату',
115
126
  open: 'Открыть',
116
127
  edit: 'Редактировать',
@@ -133,17 +144,13 @@ export const messages = {
133
144
  createInvoice: 'Создать Счет на оплату',
134
145
  fromInsis: 'Информационная система INSIS',
135
146
  fromGBDFL: 'Государственная база данных физических лиц',
147
+ fromGKB: 'Государственное кредитное бюро',
136
148
  sendSMS: 'Отправить СМС',
137
149
  toPayment: 'Перейти к оплате',
138
150
  calcSum: 'Рассчитать сумму',
139
151
  calcPremium: 'Рассчитать премию',
140
- },
141
- error: {
142
- title: 'Ошибка 404',
143
- description:
144
- 'Страница, которую вы запрашиваете, не существует либо устарела.',
145
- connectionLost: 'Нет подключения к Интернету',
146
- checkConnection: 'Проверьте ваше подключение',
152
+ accept: 'Одобрить',
153
+ reject: 'Отказать',
147
154
  },
148
155
  dialog: {
149
156
  title: 'Подтверждение',
@@ -154,14 +161,13 @@ export const messages = {
154
161
  clear: 'Вы действительно хотите очистить данные участника?',
155
162
  delete: 'Вы действительно хотите удалить участника?',
156
163
  sent: 'Ссылка была отправлена',
157
- sentText:
158
- 'Ссылка была отправлена на номер {phoneNumber}. Повторно можно отправить через {minutes}:{seconds} сек`',
164
+ sentText: 'Ссылка была отправлена на номер {phoneNumber}. Повторно можно отправить через {minutes}:{seconds} сек`',
159
165
  sentSMS: 'СМС был отправлен',
160
- sentTextSMS:
161
- 'СМС был отправлен на номер {phoneNumber}. Повторно можно отправить через {minutes}:{seconds} сек`',
166
+ sentTextSMS: 'СМС был отправлен на номер {phoneNumber}. Повторно можно отправить через {minutes}:{seconds} сек`',
162
167
  deleteFile: 'Вы уверены что хотите удалить файл',
163
168
  continue: 'Продолжить',
164
169
  correctSum: 'Корректна ли сумма страховой премии?',
170
+ familyMember: 'Выберите члена семьи',
165
171
  },
166
172
  sign: {
167
173
  chooseDoc: 'Выберите документы для подписание',
@@ -177,34 +183,38 @@ export const messages = {
177
183
  codeFromSMS: 'Код из СМС',
178
184
  signEgov: 'Подписать с помощью eGov mobile',
179
185
  showQR: 'Показать QR-код',
180
- timer:
181
- 'Вы создали счет на оплату, через 00:59 сек счет станет не активным',
186
+ timer: 'Вы создали счет на оплату, через 00:59 сек счет станет не активным',
182
187
  },
183
188
  questionnaireType: {
184
189
  byHealth: 'Анкета по здоровью застрахованного',
185
190
  byCritical: 'Анкета по критической болезни Застрахованного',
186
- answerAllNo: 'Ответить везде Нет',
187
- pleaseAnswer: 'Пожалуйста ответьте на { text } вопросов',
191
+ answerAllNo: 'Ответить везде "Нет"',
192
+ pleaseAnswer: 'Пожалуйста ответьте на {text} вопросов',
188
193
  },
189
194
  questionnaireHealth: 'Анкета по здоровью Застрахованного',
190
195
  chooseAll: 'Выбрать все',
191
196
  statement: 'Заявление',
192
- policyholder: 'Страхователь',
193
- insured: 'Застрахованный',
194
- beneficiary: 'Выгодоприобретатель',
195
- beneficialOwner: 'Бенефициарный собственник',
196
- policyholdersRepresentativeTitle: 'Представитель страхователя',
197
+ policyholderForm: 'Страхователь',
198
+ policyholderAndInsured: 'Застрахованный / Страхователь',
199
+ policyholderAndInsuredSame: 'Застрахованный / Страхователь является одним лицом',
200
+ insuredForm: 'Застрахованный',
201
+ beneficiaryForm: 'Выгодоприобретатель',
202
+ beneficialOwnerForm: 'Бенефициарный собственник',
203
+ policyholdersRepresentativeForm: 'Представитель страхователя',
197
204
  productConditions: 'Условия продукта и расчеты',
198
205
  underwriterDecision: 'Решение андеррайтингового совета',
199
206
  recalculationInfo: 'Данные для перерасчета',
200
207
  generalConditions: 'Основные условия страхования',
201
208
  isPolicyholderInsured: 'Является ли страхователь застрахованным?',
209
+ isPolicyholderIPDL: 'Принадлежит ли и/или причастен ли Застрахованный / Страхователь или его члены семьи и близкие родственники к иностранному публичному должностному лицу?',
210
+ isMemberIPDL: 'Отметка о принадлежности и/или причастности к публичному должностному лицу, его супруге (супругу) и близким родственникам?',
202
211
  isPolicyholderBeneficiary: 'Является ли страхователь выгодоприобретателем?',
203
212
  hasRepresentative: 'Подписантом договора выступает представитель? ',
204
213
  isActOwnBehalf: ' Клиент действует от своего имени и в своих интересах?',
205
214
  coverPeriod: 'Срок',
206
215
  requestedSumInsured: 'Запрашиваемая сумма',
207
216
  insurancePremiumPerMonth: 'Премия в месяц',
217
+ noStatementCalculator: 'Калькулятор стоимости без ввода данных',
208
218
  agreement: 'Согласие',
209
219
  clientsStatement: 'Заявление клиента',
210
220
  document: 'Документ',
@@ -224,20 +234,22 @@ export const messages = {
224
234
  recalculation: 'Перерасчет',
225
235
  survey: 'Анкета',
226
236
  productConditionsForm: {
227
- coverPeriod: 'Срок страхования (в годах)',
237
+ coverPeriod: 'Срок страхования',
228
238
  payPeriod: 'Период оплаты страховой премии',
229
- processIndexRate:
230
- 'Запрашиваемый размер коэффициента индексации (от 3% до 7%)',
239
+ processIndexRate: 'Запрашиваемый размер коэффициента индексации (от 3% до 7%)',
231
240
  processPaymentPeriod: 'Периодичность оплаты страховой премии:',
232
- requestedSumInsured: 'Запрашиваемая Страховая сумма',
233
- insurancePremiumPerMonth: 'Размер страховой премии (тенге)',
241
+ requestedSumInsured: 'Страховая сумма',
242
+ sumInsured: 'Страховая сумма',
243
+ insurancePremiumPerMonth: 'Страховая премия',
234
244
  hint: 'Сумма рассчитывается автоматически',
235
245
  additional: 'Дополнительные условия страхования',
236
- possibilityToChange:
237
- 'Возможность изменения страховой суммы и страховых взносов (индексация)',
246
+ possibilityToChange: 'Возможность изменения страховой суммы и страховых взносов (индексация)',
238
247
  conditions: 'Условия оплаты страховой премии',
239
248
  processTariff: 'Тариф',
240
249
  riskGroup: 'Группа риска',
250
+ requestedProductConditions: 'Запрашиваемые условия страхования',
251
+ coverPeriodFrom3to20: 'Срок страхования (от 3-х до 20 лет)',
252
+ insurancePremiumAmount: 'Размер Страховой премии (страховой взнос)',
241
253
  },
242
254
  history: {
243
255
  addRegNumber: 'Номер',
@@ -297,8 +309,10 @@ export const messages = {
297
309
  requestedSumInsuredMycar: 'Максимальная сумма не должна превышать 60 млн',
298
310
  ageMycar: 'Пороговое значение по возрасту с 21 по 65',
299
311
  noResident: 'Нерезидентам отказано',
312
+ policyholderAgeLimit: 'Возраст Застрахованного должен быть не менее 18-ти лет',
313
+ beneficiaryAgeLimit: 'На дату подписания полиса возраст Выгодоприобретателя должен быть не более 15 лет',
300
314
  },
301
- code: 'Код',
315
+ code: 'КЭС',
302
316
  fontSize: 'Размер шрифта',
303
317
  policyholdersRepresentative: {
304
318
  name: 'ФИО',
@@ -306,13 +320,11 @@ export const messages = {
306
320
  NameParentCase: 'ФИО представителя в родительском падеже',
307
321
  basisDocKz: 'Действует на основании документа (каз)',
308
322
  basisDocRu: 'Действует на основании документа (рус)',
309
- basisDocRuParentCase:
310
- 'Действует на основании документа в родительском падеже (рус)',
323
+ basisDocRuParentCase: 'Действует на основании документа в родительском падеже (рус)',
311
324
  numberDoc: 'Номер документа подтверждающий полномочия',
312
- numberVisa: 'Номер визы или миграционный карточки',
325
+ numberVisa: 'Номер миграционный карточки',
313
326
  numberLicense: 'Номер лицензии',
314
- confirmAuthority:
315
- 'Лицо, подписавшего документ, подтверждающий полномочия, -Нотариус?',
327
+ confirmAuthority: 'Лицо, подписавшего документ, подтверждающий полномочия, -Нотариус?',
316
328
  documentIssuers: 'Наименование органа, выдавшего документ',
317
329
  },
318
330
  payment: {
@@ -331,6 +343,8 @@ export const messages = {
331
343
  recipientNumber: 'Номер получателя СМС',
332
344
  },
333
345
  form: {
346
+ migrationCard: '',
347
+ postIndex: 'Почтовый индекс',
334
348
  name: 'Наименование',
335
349
  bin: 'БИН',
336
350
  fullName: 'ФИО',
@@ -341,6 +355,7 @@ export const messages = {
341
355
  firstName: 'Имя',
342
356
  middleName: 'Отчество',
343
357
  birthDate: 'Дата рождения',
358
+ signDate: 'Дата расчета',
344
359
  age: 'Возраст',
345
360
  gender: 'Пол',
346
361
  familyStatus: 'Семейное положение',