hl-core 0.0.7 → 0.0.8-beta.2
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.
- package/.prettierrc +2 -1
- package/api/index.ts +548 -0
- package/api/interceptors.ts +38 -0
- package/components/Button/Btn.vue +57 -0
- package/components/Button/BtnIcon.vue +47 -0
- package/components/Button/ScrollButtons.vue +6 -0
- package/components/Button/SortArrow.vue +21 -0
- package/components/Complex/Content.vue +5 -0
- package/components/Complex/ContentBlock.vue +5 -0
- package/components/Complex/Page.vue +43 -0
- package/components/Dialog/Dialog.vue +76 -0
- package/components/Dialog/FamilyDialog.vue +39 -0
- package/components/Form/FormBlock.vue +114 -0
- package/components/Form/FormSection.vue +18 -0
- package/components/Form/FormTextSection.vue +20 -0
- package/components/Form/FormToggle.vue +52 -0
- package/components/Form/ProductConditionsBlock.vue +68 -0
- package/components/Input/Datepicker.vue +41 -0
- package/components/Input/EmptyFormField.vue +5 -0
- package/components/Input/FileInput.vue +71 -0
- package/components/Input/FormInput.vue +174 -0
- package/components/Input/PanelInput.vue +133 -0
- package/components/Input/RoundedInput.vue +143 -0
- package/components/Layout/Drawer.vue +45 -0
- package/components/Layout/Header.vue +48 -0
- package/components/Layout/Loader.vue +35 -0
- package/components/Layout/SettingsPanel.vue +48 -0
- package/components/List/ListEmpty.vue +22 -0
- package/components/Menu/MenuNav.vue +108 -0
- package/components/Menu/MenuNavItem.vue +37 -0
- package/components/Pages/Anketa.vue +341 -0
- package/components/Pages/Auth.vue +91 -0
- package/components/Pages/Documents.vue +108 -0
- package/components/Pages/MemberForm.vue +1148 -0
- package/components/Pages/ProductAgreement.vue +18 -0
- package/components/Pages/ProductConditions.vue +436 -0
- package/components/Panel/PanelHandler.vue +231 -0
- package/components/Panel/PanelItem.vue +5 -0
- package/components/Panel/PanelSelectItem.vue +20 -0
- package/components/Transitions/FadeTransition.vue +5 -0
- package/components/Transitions/SlideTransition.vue +5 -0
- package/composables/axios.ts +11 -0
- package/composables/classes.ts +1129 -0
- package/composables/constants.ts +66 -0
- package/composables/index.ts +168 -2
- package/composables/styles.ts +47 -8
- package/layouts/clear.vue +3 -0
- package/layouts/default.vue +75 -0
- package/layouts/full.vue +6 -0
- package/nuxt.config.ts +31 -5
- package/package.json +24 -10
- package/pages/500.vue +85 -0
- package/plugins/helperFunctionsPlugins.ts +17 -2
- package/plugins/storePlugin.ts +6 -7
- package/plugins/vuetifyPlugin.ts +10 -0
- package/store/data.store.js +2484 -6
- package/store/form.store.ts +8 -0
- package/store/member.store.ts +291 -0
- package/store/messages.ts +162 -38
- package/store/rules.js +29 -38
- package/tailwind.config.js +10 -0
- package/types/index.ts +303 -0
- package/app.vue +0 -3
- package/components/Button/GreenBtn.vue +0 -33
- package/store/app.store.js +0 -12
|
@@ -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
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export const t = (whichText: string) => {
|
|
1
|
+
export const t = (whichText: string): string => {
|
|
2
2
|
const keys = whichText.includes('.') ? whichText.split('.') : whichText;
|
|
3
3
|
if (typeof keys === typeof []) {
|
|
4
4
|
const firstKey = keys[0];
|
|
5
5
|
const secondKey = keys[1];
|
|
6
6
|
const firstObject = messages.ru[firstKey as keyof typeof messages.ru];
|
|
7
|
-
return firstObject[secondKey as keyof typeof firstObject];
|
|
7
|
+
return firstObject[secondKey as keyof typeof firstObject] as string;
|
|
8
8
|
} else {
|
|
9
|
-
return messages.ru[keys as keyof typeof messages.ru];
|
|
9
|
+
return messages.ru[keys as keyof typeof messages.ru] as string;
|
|
10
10
|
}
|
|
11
11
|
};
|
|
12
12
|
|
|
@@ -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
|
-
|
|
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: 'Обновление можно делать каждые {
|
|
90
|
+
reloadEverySeconds: 'Обновление можно делать каждые {text} секунд',
|
|
87
91
|
successReload: 'Обновлено',
|
|
88
|
-
sendEverySeconds: 'СМС можно отправлять каждые {
|
|
92
|
+
sendEverySeconds: 'СМС можно отправлять каждые {text} секунд ',
|
|
89
93
|
waitForClient: 'Ожидайте подтверждения клиента',
|
|
90
94
|
noSuchProduct: 'Ошибка при переходе: неправильная ссылка',
|
|
91
|
-
affiliationDocumentNotUploaded:
|
|
92
|
-
'Не прикреплен файл в решении андеррайтингового совета',
|
|
95
|
+
affiliationDocumentNotUploaded: 'Не прикреплен файл в решении андеррайтингового совета',
|
|
93
96
|
documentNumberWasNotFilled: 'Номер документа и дата не были заполнены',
|
|
94
|
-
valueShouldBeHigher: `Значение должно быть больше {
|
|
95
|
-
valueShouldBeBetween: `Значение должно быть в промежутке от {
|
|
97
|
+
valueShouldBeHigher: `Значение должно быть больше {text} процентов`,
|
|
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,12 +121,14 @@ export const messages = {
|
|
|
111
121
|
create: 'Создать',
|
|
112
122
|
becomeAgent: 'Стать агентом',
|
|
113
123
|
close: 'Закрыть',
|
|
124
|
+
reload: 'Обновить',
|
|
114
125
|
makeIssueInvoice: 'Создать Счет на оплату',
|
|
115
126
|
open: 'Открыть',
|
|
116
127
|
edit: 'Редактировать',
|
|
117
128
|
editApplication: 'Редактировать заявку',
|
|
118
129
|
cancel: 'Отменить',
|
|
119
130
|
cancelApplication: 'Отменить заявку',
|
|
131
|
+
viewApplication: 'Просмотреть заявку',
|
|
120
132
|
approve: 'Согласовать',
|
|
121
133
|
rejectStatement: 'Отклонить',
|
|
122
134
|
returnStatement: 'Вернуть на доработку',
|
|
@@ -133,45 +145,116 @@ export const messages = {
|
|
|
133
145
|
createInvoice: 'Создать Счет на оплату',
|
|
134
146
|
fromInsis: 'Информационная система INSIS',
|
|
135
147
|
fromGBDFL: 'Государственная база данных физических лиц',
|
|
148
|
+
fromGKB: 'Государственное кредитное бюро',
|
|
136
149
|
sendSMS: 'Отправить СМС',
|
|
137
150
|
toPayment: 'Перейти к оплате',
|
|
138
151
|
calcSum: 'Рассчитать сумму',
|
|
139
152
|
calcPremium: 'Рассчитать премию',
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
description:
|
|
144
|
-
'Страница, которую вы запрашиваете, не существует либо устарела.',
|
|
145
|
-
connectionLost: 'Нет подключения к Интернету',
|
|
146
|
-
checkConnection: 'Проверьте ваше подключение',
|
|
153
|
+
accept: 'Одобрить',
|
|
154
|
+
reject: 'Отказать',
|
|
155
|
+
pay: 'Оплатить',
|
|
147
156
|
},
|
|
148
157
|
dialog: {
|
|
149
158
|
title: 'Подтверждение',
|
|
150
159
|
exit: 'Вы действительно хотите выйти?',
|
|
151
160
|
exitApp: 'Вы действительно хотите выйти? Данные будут очищены.',
|
|
161
|
+
dataWillClear: 'Данные будут очищены',
|
|
152
162
|
cancel: 'Вы действительно хотите отменить заявку?',
|
|
153
163
|
clear: 'Вы действительно хотите очистить данные участника?',
|
|
154
164
|
delete: 'Вы действительно хотите удалить участника?',
|
|
155
165
|
sent: 'Ссылка была отправлена',
|
|
156
|
-
sentText:
|
|
157
|
-
'Ссылка была отправлена на номер {phoneNumber}. Повторно можно отправить через {minutes}:{seconds} сек`',
|
|
166
|
+
sentText: 'Ссылка была отправлена на номер {phoneNumber}. Повторно можно отправить через {minutes}:{seconds} сек`',
|
|
158
167
|
sentSMS: 'СМС был отправлен',
|
|
159
|
-
sentTextSMS:
|
|
160
|
-
'СМС был отправлен на номер {phoneNumber}. Повторно можно отправить через {minutes}:{seconds} сек`',
|
|
168
|
+
sentTextSMS: 'СМС был отправлен на номер {phoneNumber}. Повторно можно отправить через {minutes}:{seconds} сек`',
|
|
161
169
|
deleteFile: 'Вы уверены что хотите удалить файл',
|
|
162
170
|
continue: 'Продолжить',
|
|
163
171
|
correctSum: 'Корректна ли сумма страховой премии?',
|
|
172
|
+
sign: 'Подтверждение подписания',
|
|
173
|
+
pay: 'Подтверждение оплаты',
|
|
174
|
+
familyMember: 'Выберите члена семьи',
|
|
175
|
+
},
|
|
176
|
+
sign: {
|
|
177
|
+
chooseDoc: 'Выберите документы для подписание',
|
|
178
|
+
signed: 'Подписано ЭЦП',
|
|
179
|
+
chooseMethod: 'Выберите способ подписания',
|
|
180
|
+
downloadDoc: 'Скачать документ для подписи',
|
|
181
|
+
downloadSignedDoc: 'Загрузить Подписанный Документ',
|
|
182
|
+
signPaper: 'Подписать на бумажном носителе',
|
|
183
|
+
recipientNumber: 'Номер получателя ссылки',
|
|
184
|
+
signCloud: 'Подписать через облачную ЭЦП',
|
|
185
|
+
copyCloud: 'Скопировать ссылку на подпись через облачную ЭЦП',
|
|
186
|
+
codeSendNumber: 'Код отправлен на номер:',
|
|
187
|
+
codeFromSMS: 'Код из СМС',
|
|
188
|
+
signEgov: 'Подписать с помощью eGov mobile',
|
|
189
|
+
showQR: 'Показать QR-код',
|
|
190
|
+
timer: 'Вы создали счет на оплату, через 00:59 сек счет станет не активным',
|
|
164
191
|
},
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
192
|
+
questionnaireType: {
|
|
193
|
+
byHealth: 'Анкета по здоровью застрахованного',
|
|
194
|
+
byCritical: 'Анкета по критической болезни Застрахованного',
|
|
195
|
+
answerAllNo: 'Ответить везде "Нет"',
|
|
196
|
+
pleaseAnswer: 'Пожалуйста ответьте на {text} вопросов',
|
|
168
197
|
},
|
|
198
|
+
questionnaireHealth: 'Анкета по здоровью Застрахованного',
|
|
199
|
+
chooseAll: 'Выбрать все',
|
|
200
|
+
statement: 'Заявление',
|
|
201
|
+
policyholderForm: 'Страхователь',
|
|
202
|
+
policyholderAndInsured: 'Застрахованный / Страхователь',
|
|
203
|
+
policyholderAndInsuredSame: 'Застрахованный / Страхователь является одним лицом',
|
|
204
|
+
insuredForm: 'Застрахованный',
|
|
205
|
+
beneficiaryForm: 'Выгодоприобретатель',
|
|
206
|
+
beneficialOwnerForm: 'Бенефициарный собственник',
|
|
207
|
+
policyholdersRepresentativeForm: 'Представитель страхователя',
|
|
208
|
+
productConditions: 'Условия продукта и расчеты',
|
|
209
|
+
underwriterDecision: 'Решение андеррайтингового совета',
|
|
210
|
+
recalculationInfo: 'Данные для перерасчета',
|
|
211
|
+
generalConditions: 'Основные условия страхования',
|
|
212
|
+
isPolicyholderInsured: 'Является ли страхователь застрахованным?',
|
|
213
|
+
isPolicyholderIPDL: 'Принадлежит ли и/или причастен ли Застрахованный / Страхователь или его члены семьи и близкие родственники к иностранному публичному должностному лицу?',
|
|
214
|
+
isMemberIPDL: 'Отметка о принадлежности и/или причастности к публичному должностному лицу, его супруге (супругу) и близким родственникам?',
|
|
215
|
+
isPolicyholderBeneficiary: 'Является ли страхователь выгодоприобретателем?',
|
|
216
|
+
hasRepresentative: 'Подписантом договора выступает представитель? ',
|
|
217
|
+
isActOwnBehalf: ' Клиент действует от своего имени и в своих интересах?',
|
|
218
|
+
coverPeriod: 'Срок',
|
|
219
|
+
requestedSumInsured: 'Запрашиваемая сумма',
|
|
220
|
+
insurancePremiumPerMonth: 'Премия в месяц',
|
|
221
|
+
noStatementCalculator: 'Калькулятор стоимости без ввода данных',
|
|
169
222
|
agreement: 'Согласие',
|
|
223
|
+
clientsStatement: 'Заявление клиента',
|
|
224
|
+
document: 'Документ',
|
|
225
|
+
documents: 'Документы',
|
|
226
|
+
statementAndSurvey: 'Заявление и анкета',
|
|
227
|
+
underwriterDecisionDocument: '',
|
|
170
228
|
clientsCard: 'Карта клиента',
|
|
171
229
|
insuranceProduct: 'Страховой продукт',
|
|
172
230
|
historyStatementsAndStatuses: 'История заявок и статусы',
|
|
173
231
|
applicationNumber: 'Номер заявки: ',
|
|
174
232
|
operationList: 'Список операций',
|
|
233
|
+
payCalendar: 'Календарь платежей',
|
|
234
|
+
signedDoc: 'Подписанный докум (проект Байтерек)',
|
|
235
|
+
percent: 'Процент ',
|
|
236
|
+
chooseSource: 'Выберите источник данных',
|
|
237
|
+
sumAndPremium: `Сумма страховой премии {paymentPeriod}: {insurancePremiumPerMonth}₸\nЗапрашиваемая страховая сумма: {requestedSumInsured}₸`,
|
|
238
|
+
recalculation: 'Перерасчет',
|
|
239
|
+
survey: 'Анкета',
|
|
240
|
+
productConditionsForm: {
|
|
241
|
+
coverPeriod: 'Срок страхования',
|
|
242
|
+
payPeriod: 'Период оплаты страховой премии',
|
|
243
|
+
processIndexRate: 'Запрашиваемый размер коэффициента индексации (от 3% до 7%)',
|
|
244
|
+
processPaymentPeriod: 'Периодичность оплаты страховой премии:',
|
|
245
|
+
requestedSumInsured: 'Страховая сумма',
|
|
246
|
+
sumInsured: 'Страховая сумма',
|
|
247
|
+
insurancePremiumPerMonth: 'Страховая премия',
|
|
248
|
+
hint: 'Сумма рассчитывается автоматически',
|
|
249
|
+
additional: 'Дополнительные условия страхования',
|
|
250
|
+
possibilityToChange: 'Возможность изменения страховой суммы и страховых взносов (индексация)',
|
|
251
|
+
conditions: 'Условия оплаты страховой премии',
|
|
252
|
+
processTariff: 'Тариф',
|
|
253
|
+
riskGroup: 'Группа риска',
|
|
254
|
+
requestedProductConditions: 'Запрашиваемые условия страхования',
|
|
255
|
+
coverPeriodFrom3to20: 'Срок страхования (от 3-х до 20 лет)',
|
|
256
|
+
insurancePremiumAmount: 'Размер Страховой премии (страховой взнос)',
|
|
257
|
+
},
|
|
175
258
|
history: {
|
|
176
259
|
addRegNumber: 'Номер',
|
|
177
260
|
number: 'Номер заявки',
|
|
@@ -182,6 +265,10 @@ export const messages = {
|
|
|
182
265
|
assignee: 'Исполнитель',
|
|
183
266
|
initiator: 'Инициатор',
|
|
184
267
|
reason: 'Причина',
|
|
268
|
+
dateCreated: 'Дата начала',
|
|
269
|
+
factEndDate: 'Дата завершения',
|
|
270
|
+
decision: 'Статус',
|
|
271
|
+
userFullName: 'Исполнитель',
|
|
185
272
|
},
|
|
186
273
|
labels: {
|
|
187
274
|
search: 'Поиск',
|
|
@@ -197,6 +284,11 @@ export const messages = {
|
|
|
197
284
|
userFullName: 'ФИО',
|
|
198
285
|
userRoles: 'Роли',
|
|
199
286
|
noUserRoles: 'Нет ролей',
|
|
287
|
+
welcome: 'Добро пожаловать',
|
|
288
|
+
information: 'Дополнительные данные',
|
|
289
|
+
policyNumber: 'Номер полиса',
|
|
290
|
+
statusCode: 'Статус заявки',
|
|
291
|
+
initiator: 'Инициатор',
|
|
200
292
|
},
|
|
201
293
|
placeholders: {
|
|
202
294
|
login: 'Логин',
|
|
@@ -221,13 +313,43 @@ export const messages = {
|
|
|
221
313
|
requestedSumInsuredMycar: 'Максимальная сумма не должна превышать 60 млн',
|
|
222
314
|
ageMycar: 'Пороговое значение по возрасту с 21 по 65',
|
|
223
315
|
noResident: 'Нерезидентам отказано',
|
|
316
|
+
policyholderAgeLimit: 'Возраст Застрахованного должен быть не менее 18-ти лет',
|
|
317
|
+
beneficiaryAgeLimit: 'На дату подписания полиса возраст Выгодоприобретателя должен быть не более 15 лет',
|
|
224
318
|
},
|
|
225
|
-
code: '
|
|
319
|
+
code: 'КЭС',
|
|
226
320
|
fontSize: 'Размер шрифта',
|
|
321
|
+
policyholdersRepresentative: {
|
|
322
|
+
name: 'ФИО',
|
|
323
|
+
PowerOfAttorney: 'Доверенность',
|
|
324
|
+
NameParentCase: 'ФИО представителя в родительском падеже',
|
|
325
|
+
basisDocKz: 'Действует на основании документа (каз)',
|
|
326
|
+
basisDocRu: 'Действует на основании документа (рус)',
|
|
327
|
+
basisDocRuParentCase: 'Действует на основании документа в родительском падеже (рус)',
|
|
328
|
+
numberDoc: 'Номер документа подтверждающий полномочия',
|
|
329
|
+
numberVisa: 'Номер миграционный карточки',
|
|
330
|
+
numberLicense: 'Номер лицензии',
|
|
331
|
+
confirmAuthority: 'Лицо, подписавшего документ, подтверждающий полномочия, -Нотариус?',
|
|
332
|
+
documentIssuers: 'Наименование органа, выдавшего документ',
|
|
333
|
+
},
|
|
227
334
|
payment: {
|
|
228
335
|
method: 'Способ оплаты',
|
|
336
|
+
chooseMethod: 'Выберите способ оплаты',
|
|
337
|
+
payConditions: 'Условия оплаты',
|
|
338
|
+
issueInvoice: 'Выставить счет на оплату',
|
|
339
|
+
copyUrl: 'Скопировать ссылку на оплату',
|
|
340
|
+
copyBill: 'Скопировать счет на оплату',
|
|
341
|
+
sendBill: 'Отправить счет на оплату через СМС',
|
|
342
|
+
anyCard: 'Онлайн картой любого банка',
|
|
343
|
+
terminalHalyk: 'Через терминал Halyk Bank',
|
|
344
|
+
homebankContractNumber: 'Через номер договора в Homebank',
|
|
345
|
+
homebankIIN: 'Через ИИН в Homebank',
|
|
346
|
+
accountingDepartment: 'Через бухгалтерию организации',
|
|
347
|
+
kaspi: 'Через Kaspi.kz',
|
|
348
|
+
recipientNumber: 'Номер получателя СМС',
|
|
229
349
|
},
|
|
230
350
|
form: {
|
|
351
|
+
migrationCard: '',
|
|
352
|
+
postIndex: 'Почтовый индекс',
|
|
231
353
|
name: 'Наименование',
|
|
232
354
|
bin: 'БИН',
|
|
233
355
|
fullName: 'ФИО',
|
|
@@ -238,6 +360,7 @@ export const messages = {
|
|
|
238
360
|
firstName: 'Имя',
|
|
239
361
|
middleName: 'Отчество',
|
|
240
362
|
birthDate: 'Дата рождения',
|
|
363
|
+
signDate: 'Дата расчета',
|
|
241
364
|
age: 'Возраст',
|
|
242
365
|
gender: 'Пол',
|
|
243
366
|
familyStatus: 'Семейное положение',
|
|
@@ -272,6 +395,7 @@ export const messages = {
|
|
|
272
395
|
signOfIPDL: 'Признак ИПДЛ',
|
|
273
396
|
countryOfCitizenship: 'Страна гражданства',
|
|
274
397
|
countryOfTaxResidency: 'Страна налогового резиденства',
|
|
398
|
+
addTaxResidency: 'Указать если налоговое резиденство выбрано другое',
|
|
275
399
|
economySectorCode: 'Код сектора экономики',
|
|
276
400
|
contactsData: 'Контакты',
|
|
277
401
|
phoneNumber: 'Номер телефона',
|
|
@@ -281,7 +405,7 @@ export const messages = {
|
|
|
281
405
|
},
|
|
282
406
|
agreementBlock: {
|
|
283
407
|
title: 'Согласие на сбор и обработку пресональных данных',
|
|
284
|
-
text: `Я,
|
|
408
|
+
text: `Я, предоставляю АО «Халык-Life» (БИН 051140004354) и (или) организациям,
|
|
285
409
|
входящими в состав финансовой Группы «Халык» (Акционеру АО «Халык-Life» (БИН 940140000385) и его дочерним организациям),
|
|
286
410
|
перестраховочным организациям, организации по формированию и ведению базы данных по страхованию (БИН 120940011577), юридическому лицу,
|
|
287
411
|
осуществляющему деятельность по привлечению пенсионных взносов и пенсионным выплатам (БИН 971240002115), юридическому лицу,
|