hl-core 0.0.9-beta.5 → 0.0.9-beta.51

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 (63) hide show
  1. package/api/base.api.ts +1042 -0
  2. package/api/index.ts +2 -620
  3. package/api/interceptors.ts +53 -14
  4. package/components/Button/Btn.vue +2 -2
  5. package/components/Complex/MessageBlock.vue +2 -2
  6. package/components/Complex/Page.vue +1 -1
  7. package/components/Dialog/Dialog.vue +60 -15
  8. package/components/Form/DynamicForm.vue +100 -0
  9. package/components/Form/FormBlock.vue +12 -3
  10. package/components/Form/FormData.vue +110 -0
  11. package/components/Form/FormSection.vue +3 -3
  12. package/components/Form/FormToggle.vue +25 -5
  13. package/components/Form/ManagerAttachment.vue +150 -86
  14. package/components/Form/ProductConditionsBlock.vue +59 -6
  15. package/components/Input/Datepicker.vue +43 -7
  16. package/components/Input/DynamicInput.vue +23 -0
  17. package/components/Input/FileInput.vue +25 -5
  18. package/components/Input/FormInput.vue +7 -4
  19. package/components/Input/Monthpicker.vue +34 -0
  20. package/components/Input/PanelInput.vue +5 -1
  21. package/components/Input/RoundedEmptyField.vue +5 -0
  22. package/components/Input/RoundedSelect.vue +18 -0
  23. package/components/Input/SwitchInput.vue +64 -0
  24. package/components/Input/TextInput.vue +160 -0
  25. package/components/Layout/Drawer.vue +17 -4
  26. package/components/Layout/Header.vue +23 -2
  27. package/components/Layout/Loader.vue +1 -1
  28. package/components/Layout/SettingsPanel.vue +13 -7
  29. package/components/Menu/InfoMenu.vue +35 -0
  30. package/components/Menu/MenuNav.vue +17 -2
  31. package/components/Pages/Anketa.vue +140 -52
  32. package/components/Pages/Auth.vue +50 -9
  33. package/components/Pages/ContragentForm.vue +124 -50
  34. package/components/Pages/Documents.vue +179 -29
  35. package/components/Pages/InvoiceInfo.vue +1 -1
  36. package/components/Pages/MemberForm.vue +605 -116
  37. package/components/Pages/ProductAgreement.vue +1 -8
  38. package/components/Pages/ProductConditions.vue +1055 -183
  39. package/components/Panel/PanelHandler.vue +583 -46
  40. package/components/Panel/PanelSelectItem.vue +17 -2
  41. package/components/Panel/RightPanelCloser.vue +7 -0
  42. package/components/Transitions/Animation.vue +28 -0
  43. package/components/Utilities/Qr.vue +44 -0
  44. package/composables/axios.ts +1 -0
  45. package/composables/classes.ts +456 -8
  46. package/composables/constants.ts +114 -2
  47. package/composables/fields.ts +328 -0
  48. package/composables/index.ts +270 -19
  49. package/composables/styles.ts +29 -16
  50. package/layouts/default.vue +48 -3
  51. package/locales/ru.json +547 -14
  52. package/package.json +28 -24
  53. package/pages/Token.vue +1 -12
  54. package/plugins/vuetifyPlugin.ts +2 -0
  55. package/store/data.store.ts +1463 -275
  56. package/store/extractStore.ts +17 -0
  57. package/store/form.store.ts +13 -1
  58. package/store/member.store.ts +1 -1
  59. package/store/rules.ts +83 -5
  60. package/types/enum.ts +61 -0
  61. package/types/env.d.ts +1 -0
  62. package/types/form.ts +94 -0
  63. package/types/index.ts +259 -23
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <section class="flex flex-col gap-4 px-[10px]">
3
- <v-form v-if="member" ref="vForm" @submit="submitForm" class="max-h-[82svh] overflow-y-scroll">
3
+ <v-form v-if="member" ref="vForm" @submit="submitForm" class="max-h-[80svh] overflow-y-scroll">
4
4
  <div v-if="memberSetting && memberSetting.has === true && memberSetting.isMultiple === true" class="flex items-center mt-[14px] min-h-[54px]">
5
5
  <div :class="[$styles.blueBgLight]" class="flex flex-wrap items-center gap-2 p-1 rounded-t-[8px] h-full">
6
6
  <div
@@ -17,23 +17,60 @@
17
17
  :disabled="!memberStore.canMemberDeleted(whichForm, index) && !memberStore.canMemberCleared(whichForm, index)"
18
18
  variant="plain"
19
19
  :color="Number(whichIndex) === index ? '#FFF' : '#A0B3D8'"
20
- @click.prevent="memberStore.canMemberDeleted(whichForm, index) || memberStore.canMemberCleared(whichForm, index) ? deleteMember(index) : null"
20
+ @click.prevent="memberStore.canMemberDeleted(whichForm, index) || memberStore.canMemberCleared(whichForm, index) ? openDeletionDialog(index) : null"
21
21
  />
22
22
  </div>
23
23
  </div>
24
24
  <v-btn class="ml-2" icon="mdi-plus !text-[24px]" @click="memberStore.addMember(whichForm)" size="small" color="#A0B3D8" variant="tonal" />
25
25
  </div>
26
+ <base-form-section
27
+ v-if="$dataStore.hasFamilyTiesSection(whichForm)"
28
+ :title="$dataStore.t('pension.familyTies')"
29
+ :class="[memberSetting && memberSetting.has === true && memberSetting.isMultiple === true ? 'rounded-t-0 !mt-[-5px]' : 'mt-[14px]']"
30
+ >
31
+ <base-form-toggle v-model="isRelative" :disabled="isDisabled" :title="$dataStore.t('pension.ifHasRelationBeneficiary')" :has-border="false" :show-value="false" />
32
+ <base-fade-transition>
33
+ <div class="flex flex-col gap-[1px]" v-if="isRelative">
34
+ <base-panel-input
35
+ v-model="formStore.applicationData.insuredApp.iin"
36
+ :maska="$maska.iin"
37
+ :readonly="isDisabled"
38
+ :clearable="false"
39
+ :label="$dataStore.t('pension.insuredIIN')"
40
+ append-inner-icon="mdi mdi-chevron-right"
41
+ @append="searchMember"
42
+ />
43
+ </div>
44
+ </base-fade-transition>
45
+ </base-form-section>
26
46
  <base-form-section
27
47
  :title="$dataStore.t('form.personalData')"
28
48
  :class="[memberSetting && memberSetting.has === true && memberSetting.isMultiple === true ? 'rounded-t-0 !mt-[-5px]' : 'mt-[14px]']"
29
49
  >
50
+ <base-panel-input
51
+ v-if="$dataStore.isLifetrip || $dataStore.isPension"
52
+ v-model="member.signOfResidency"
53
+ :value="member.signOfResidency?.nameRu"
54
+ :label="$dataStore.t('form.signOfResidency')"
55
+ :readonly="isDisabled"
56
+ :clearable="!isDisabled"
57
+ :rules="residencyRule"
58
+ append-inner-icon="mdi mdi-chevron-right"
59
+ @append="openPanel($dataStore.t('form.signOfResidency'), [], 'signOfResidency', $dataStore.getResidents)"
60
+ />
61
+ <base-form-toggle
62
+ v-if="$dataStore.isLifetrip && whichForm === 'insuredForm'"
63
+ v-model="member.isInsuredUnderage"
64
+ :title="$dataStore.t('isInsuredUnderage')"
65
+ :has-border="false"
66
+ />
30
67
  <base-form-input
31
68
  v-model="member.phoneNumber"
32
69
  :label="$dataStore.t('form.phoneNumber')"
33
70
  :maska="$maska.phone"
34
71
  :readonly="!!isDisabled || !!isIinPhoneDisabled"
35
72
  :clearable="!isDisabled"
36
- :append-inner-icon="otpCondition ? 'mdi mdi-phone-message' : ''"
73
+ :append-inner-icon="otpCondition ? `${$dataStore.isPension ? 'mdi-message-text' : 'mdi mdi-phone-message'}` : ''"
37
74
  @append="openCustomPanel('otp')"
38
75
  @keyup.enter.prevent="otpCondition ? openCustomPanel('otp') : null"
39
76
  :rules="phoneRule"
@@ -42,49 +79,90 @@
42
79
  v-model="member.iin"
43
80
  :label="$dataStore.t('form.iin')"
44
81
  :maska="$maska.iin"
45
- :readonly="!!isDisabled || !!isIinPhoneDisabled"
82
+ :readonly="!!isDisabled || !!isIinPhoneDisabled || !!member.parsedDocument?.iin"
46
83
  :clearable="!isDisabled"
47
- :append-inner-icon="showSaveButton ? 'mdi mdi-magnify' : ''"
84
+ :append-inner-icon="hasMemberSearch ? (hasDocumentReader ? 'mdi mdi-credit-card-scan-outline' : 'mdi mdi-magnify') : ''"
48
85
  @append="searchMember"
49
86
  @input="onIinInput"
50
87
  :rules="$rules.required.concat($rules.iinRight)"
51
88
  />
52
89
  <base-form-input
53
90
  v-model.trim="member.lastName"
54
- :readonly="isDisabled || isFromGBD"
91
+ :readonly="isDisabled || isFromGBD || !!member.parsedDocument?.lastName"
55
92
  :clearable="!isDisabled"
56
93
  :label="$dataStore.t('form.lastName')"
57
94
  :rules="$rules.required.concat($rules.cyrillic)"
58
95
  />
59
96
  <base-form-input
60
97
  v-model.trim="member.firstName"
61
- :readonly="isDisabled || isFromGBD"
98
+ :readonly="isDisabled || isFromGBD || !!member.parsedDocument?.firstName"
62
99
  :clearable="!isDisabled"
63
100
  :label="$dataStore.t('form.firstName')"
64
101
  :rules="$rules.required.concat($rules.cyrillic)"
65
102
  />
66
103
  <base-form-input
104
+ v-if="hasMiddleName"
67
105
  v-model.trim="member.middleName"
68
- :readonly="isDisabled || isFromGBD"
106
+ :readonly="isDisabled || isFromGBD || !!member.parsedDocument?.middleName"
69
107
  :clearable="!isDisabled"
70
108
  :label="$dataStore.t('form.middleName')"
71
109
  :rules="$rules.cyrillicNonRequired"
72
110
  />
73
111
  <base-form-input
74
- v-model="member.birthDate"
112
+ v-if="$dataStore.isLifetrip"
113
+ v-model.trim="member.lastNameLat"
114
+ :readonly="isDisabled || isFromGBD"
115
+ :clearable="!isDisabled"
116
+ :label="$dataStore.t('form.lastNameLat')"
117
+ :rules="$rules.required.concat($rules.latin)"
118
+ :hint="$dataStore.t('labels.checkWithDoc')"
119
+ />
120
+ <base-form-input
121
+ v-if="$dataStore.isLifetrip"
122
+ v-model.trim="member.firstNameLat"
75
123
  :readonly="isDisabled || isFromGBD"
76
124
  :clearable="!isDisabled"
125
+ :label="$dataStore.t('form.firstNameLat')"
126
+ :rules="$rules.required.concat($rules.latin)"
127
+ :hint="$dataStore.t('labels.checkWithDoc')"
128
+ />
129
+ <base-form-input
130
+ v-model="member.birthDate"
131
+ :readonly="isDisabled || isFromGBD || !!member.parsedDocument?.birthDate"
132
+ :clearable="!isDisabled"
77
133
  :label="$dataStore.t('form.birthDate')"
78
134
  :rules="birthDateRule"
79
135
  :maska="$maska.date"
80
136
  append-inner-icon="mdi mdi-calendar-blank-outline"
81
137
  />
82
- <base-form-input v-model="member.age" :label="$dataStore.t('form.age')" :readonly="true" :clearable="!isDisabled" :rules="ageRule" />
138
+ <div v-if="$dataStore.isPension">
139
+ <base-panel-input
140
+ v-model="member.countryOfCitizenship"
141
+ :value="member.countryOfCitizenship?.nameRu"
142
+ :label="$dataStore.t('form.countryOfCitizenship')"
143
+ :readonly="isDisabled"
144
+ :clearable="!isDisabled"
145
+ :rules="$rules.objectRequired"
146
+ append-inner-icon="mdi mdi-chevron-right"
147
+ @append="openPanel($dataStore.t('form.countryOfCitizenship'), [], 'countryOfCitizenship', $dataStore.getCitizenshipCountries)"
148
+ />
149
+ <base-panel-input
150
+ v-model="member.birthPlace"
151
+ :value="member.birthPlace?.nameRu"
152
+ :label="$dataStore.t('form.birthData')"
153
+ :readonly="isDisabled"
154
+ :clearable="!isDisabled"
155
+ :rules="$rules.objectRequired"
156
+ append-inner-icon="mdi mdi-chevron-right"
157
+ @append="openPanel($dataStore.t('form.Country'), [], 'birthPlace', $dataStore.getCountries)"
158
+ />
159
+ </div>
160
+ <base-form-input v-if="!$dataStore.isPension" v-model="member.age" :label="$dataStore.t('form.age')" :readonly="true" :clearable="!isDisabled" :rules="ageRule" />
83
161
  <base-panel-input
84
162
  v-model="member.gender"
85
- :value="member.gender.nameRu"
163
+ :value="member.gender?.nameRu"
86
164
  :readonly="isDisabled || isFromGBD"
87
- :clearable="!isDisabled"
165
+ :clearable="!isDisabled && !isFromGBD"
88
166
  :label="$dataStore.t('form.gender')"
89
167
  :rules="$rules.objectRequired"
90
168
  append-inner-icon="mdi mdi-chevron-right"
@@ -93,7 +171,7 @@
93
171
  <base-panel-input
94
172
  v-if="hasFamilyStatus"
95
173
  v-model="member.familyStatus"
96
- :value="member.familyStatus.nameRu"
174
+ :value="member.familyStatus?.nameRu"
97
175
  :readonly="isDisabled"
98
176
  :clearable="!isDisabled"
99
177
  :label="$dataStore.t('form.familyStatus')"
@@ -102,9 +180,9 @@
102
180
  @append="openPanel($dataStore.t('form.familyStatus'), [], 'familyStatus', $dataStore.getFamilyStatuses)"
103
181
  />
104
182
  <base-panel-input
105
- v-if="(whichForm === formStore.beneficiaryFormKey || whichForm === formStore.insuredFormKey) && member.iin !== formStore.policyholderForm.iin"
183
+ v-if="hasRelationDegree"
106
184
  v-model="member.relationDegree"
107
- :value="member.relationDegree.nameRu"
185
+ :value="member.relationDegree?.nameRu"
108
186
  :readonly="isDisabled"
109
187
  :clearable="!isDisabled"
110
188
  :label="$dataStore.t('form.relations')"
@@ -121,6 +199,27 @@
121
199
  :rules="$rules.required.concat($rules.numbers)"
122
200
  />
123
201
  </base-form-section>
202
+
203
+ <base-form-section
204
+ v-if="$dataStore.isPension && (whichForm === formStore.insuredFormKey || whichForm === formStore.beneficiaryFormKey)"
205
+ :title="$dataStore.t('pension.disabilityInfo')"
206
+ >
207
+ <base-form-toggle v-model="hasDisability" :title="$dataStore.t('pension.ifHasDisability')" :disabled="isDisabled" :has-border="false" />
208
+ <base-animation>
209
+ <div class="flex flex-col gap-[1px]" v-if="hasDisability">
210
+ <base-panel-input
211
+ v-model="member.disabilityGroup"
212
+ :value="member.disabilityGroup?.nameRu"
213
+ :readonly="isDisabled"
214
+ :clearable="!isDisabled"
215
+ :label="$dataStore.t('pension.disabilityGroup')"
216
+ :rules="$rules.objectRequired"
217
+ append-inner-icon="mdi mdi-chevron-right"
218
+ @append="openPanel($dataStore.t('pension.disabilityGroup'), $dataStore.disabilityGroups, 'disabilityGroup', $dataStore.getDisabilityGroups)"
219
+ />
220
+ </div>
221
+ </base-animation>
222
+ </base-form-section>
124
223
  <base-form-section :title="$dataStore.t('policyholdersRepresentative.PowerOfAttorney')" v-if="whichForm === formStore.policyholdersRepresentativeFormKey">
125
224
  <base-form-input
126
225
  v-model.trim="member.fullNameRod"
@@ -231,7 +330,7 @@
231
330
  append-inner-icon="mdi mdi-calendar-blank-outline"
232
331
  />
233
332
  </base-form-section>
234
- <base-form-section :title="$dataStore.t('form.jobData')" v-if="$dataStore.hasJobSection(whichForm)">
333
+ <base-form-section v-if="$dataStore.hasJobSection(whichForm)" :title="$dataStore.t('form.jobData')">
235
334
  <base-form-input v-model.trim="member.job" :label="$dataStore.t('form.job')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
236
335
  <base-form-input v-model.trim="member.jobPosition" :label="$dataStore.t('form.jobPosition')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
237
336
  <base-form-input v-model.trim="member.jobPlace" :label="$dataStore.t('form.jobPlace')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
@@ -240,11 +339,11 @@
240
339
  <base-form-toggle v-if="hasSameAddressToggle" v-model="sameAddress" :disabled="isDisabled" :has-border="false" :title="$dataStore.t('form.sameAddress')" />
241
340
  <base-panel-input
242
341
  v-model="member.registrationCountry"
243
- :value="member.registrationCountry.nameRu"
342
+ :value="member.registrationCountry?.nameRu"
244
343
  :readonly="isDisabled"
245
344
  :clearable="!isDisabled"
246
345
  :label="$dataStore.t('form.Country')"
247
- :rules="$rules.objectRequired"
346
+ :rules="member.isInsuredUnderage ? [] : $rules.objectRequired"
248
347
  append-inner-icon="mdi mdi-chevron-right"
249
348
  @append="openPanel($dataStore.t('form.Country'), [], 'registrationCountry', $dataStore.getCountries)"
250
349
  />
@@ -252,42 +351,42 @@
252
351
  <div class="flex flex-col gap-[1px]" v-if="member.registrationCountry.nameRu === 'Казахстан' || member.registrationCountry.nameRu === null">
253
352
  <base-panel-input
254
353
  v-model="member.registrationProvince"
255
- :value="member.registrationProvince.nameRu"
354
+ :value="member.registrationProvince?.nameRu"
256
355
  :label="$dataStore.t('form.Province')"
257
356
  :readonly="isDisabled"
258
357
  :clearable="!isDisabled"
259
- :rules="$rules.objectRequired"
358
+ :rules="member.isInsuredUnderage ? [] : $rules.objectRequired"
260
359
  append-inner-icon="mdi mdi-chevron-right"
261
360
  @append="openPanel($dataStore.t('form.Province'), [], 'registrationProvince', $dataStore.getStates, 'registrationCountry')"
262
361
  />
263
362
  <base-panel-input
264
363
  v-model="member.registrationRegionType"
265
- :value="member.registrationRegionType.nameRu"
364
+ :value="member.registrationRegionType?.nameRu"
266
365
  :label="$dataStore.t('form.RegionType')"
267
366
  :readonly="isDisabled"
268
367
  :clearable="!isDisabled"
269
- :rules="$rules.objectRequired"
368
+ :rules="member.isInsuredUnderage ? [] : $rules.objectRequired"
270
369
  append-inner-icon="mdi mdi-chevron-right"
271
370
  @append="openPanel($dataStore.t('form.RegionType'), [], 'registrationRegionType', $dataStore.getLocalityTypes)"
272
371
  />
273
372
  <base-panel-input
274
373
  v-if="member.registrationRegionType.nameRu !== 'город'"
275
374
  v-model="member.registrationRegion"
276
- :value="member.registrationRegion.nameRu"
375
+ :value="member.registrationRegion?.nameRu"
277
376
  :label="$dataStore.t('form.Region')"
278
377
  :readonly="isDisabled"
279
378
  :clearable="!isDisabled"
280
- :rules="$rules.objectRequired"
379
+ :rules="member.isInsuredUnderage ? [] : $rules.objectRequired"
281
380
  append-inner-icon="mdi mdi-chevron-right"
282
381
  @append="openPanel($dataStore.t('form.Region'), [], 'registrationRegion', $dataStore.getRegions, 'registrationProvince')"
283
382
  />
284
383
  <base-panel-input
285
384
  v-model="member.registrationCity"
286
- :value="member.registrationCity.nameRu"
385
+ :value="member.registrationCity?.nameRu"
287
386
  :label="$dataStore.t('form.City')"
288
387
  :readonly="isDisabled"
289
388
  :clearable="!isDisabled"
290
- :rules="$rules.objectRequired"
389
+ :rules="member.isInsuredUnderage ? [] : $rules.objectRequired"
291
390
  append-inner-icon="mdi mdi-chevron-right"
292
391
  @append="openPanel($dataStore.t('form.City'), [], 'registrationCity', $dataStore.getCities, 'registrationProvince')"
293
392
  />
@@ -297,14 +396,14 @@
297
396
  <base-form-input v-model.trim="member.registrationMicroDistrict" :readonly="isDisabled" :clearable="!isDisabled" :label="$dataStore.t('form.MicroDistrict')" />
298
397
  <base-form-input
299
398
  v-model.trim="member.registrationStreet"
300
- :rules="$rules.required"
399
+ :rules="member.isInsuredUnderage ? [] : $rules.required"
301
400
  :readonly="isDisabled"
302
401
  :clearable="!isDisabled"
303
402
  :label="$dataStore.t('form.Street')"
304
403
  />
305
404
  <base-form-input
306
405
  v-model.trim="member.registrationNumberHouse"
307
- :rules="$rules.required"
406
+ :rules="member.isInsuredUnderage ? [] : $rules.required"
308
407
  :readonly="isDisabled"
309
408
  :clearable="!isDisabled"
310
409
  :label="$dataStore.t('form.NumberHouse')"
@@ -316,7 +415,7 @@
316
415
  <base-form-section :title="$dataStore.t('form.birthData')" v-if="$dataStore.hasBirthSection(whichForm)">
317
416
  <base-panel-input
318
417
  v-model="member.birthPlace"
319
- :value="member.birthPlace.nameRu"
418
+ :value="member.birthPlace?.nameRu"
320
419
  :label="$dataStore.t('form.Country')"
321
420
  :readonly="isDisabled"
322
421
  :clearable="!isDisabled"
@@ -327,7 +426,7 @@
327
426
  <!-- TODO -->
328
427
  <!-- <base-panel-input
329
428
  v-model="member.birthRegion"
330
- :value="member.birthRegion.nameRu"
429
+ :value="member.birthRegion?.nameRu"
331
430
  :label="$dataStore.t('form.Region')"
332
431
  :readonly="isDisabled"
333
432
  :clearable="!isDisabled"
@@ -339,7 +438,7 @@
339
438
  <base-form-section :title="$dataStore.t('form.documentData')" v-if="$dataStore.hasDocumentSection(whichForm)">
340
439
  <base-panel-input
341
440
  v-model="member.documentType"
342
- :value="member.documentType.nameRu"
441
+ :value="member.documentType?.nameRu"
343
442
  :label="$dataStore.t('form.documentType')"
344
443
  :readonly="isDisabled"
345
444
  :clearable="!isDisabled"
@@ -350,7 +449,7 @@
350
449
  <base-form-input
351
450
  v-model.trim="member.documentNumber"
352
451
  :label="$dataStore.t('form.documentNumber')"
353
- :readonly="isDisabled"
452
+ :readonly="isDisabled || !!member.parsedDocument?.documentNumber"
354
453
  :clearable="!isDisabled"
355
454
  :rules="$rules.required"
356
455
  />
@@ -361,9 +460,9 @@
361
460
  </base-empty-form-field> -->
362
461
  <base-panel-input
363
462
  v-model="member.documentIssuers"
364
- :value="member.documentIssuers.nameRu"
463
+ :value="member.documentIssuers?.nameRu"
365
464
  :label="$dataStore.t('form.documentIssuers')"
366
- :readonly="isDisabled"
465
+ :readonly="isDisabled || !!member.parsedDocument?.documentIssuer"
367
466
  :clearable="!isDisabled"
368
467
  :rules="$rules.objectRequired"
369
468
  append-inner-icon="mdi mdi-chevron-right"
@@ -372,7 +471,7 @@
372
471
  <base-form-input
373
472
  v-model="member.documentDate"
374
473
  :label="$dataStore.t('form.documentDate')"
375
- :readonly="isDisabled"
474
+ :readonly="isDisabled || !!member.parsedDocument?.documentIssueDate"
376
475
  :clearable="!isDisabled"
377
476
  :rules="$rules.required.concat($rules.date)"
378
477
  :maska="$maska.date"
@@ -383,7 +482,7 @@
383
482
  v-if="member.documentType.ids !== 'SBI' && member.documentType.ids !== 'VNZ'"
384
483
  v-model="member.documentExpire"
385
484
  :label="$dataStore.t('form.documentExpire')"
386
- :readonly="isDisabled"
485
+ :readonly="isDisabled || !!member.parsedDocument?.documentExpireDate"
387
486
  :clearable="!isDisabled"
388
487
  :rules="$rules.required.concat($rules.date)"
389
488
  :maska="$maska.date"
@@ -391,8 +490,9 @@
391
490
  />
392
491
  </base-fade-transition>
393
492
  <base-panel-input
493
+ v-if="!$dataStore.isLifetrip && !$dataStore.isPension"
394
494
  v-model="member.signOfResidency"
395
- :value="member.signOfResidency.nameRu"
495
+ :value="member.signOfResidency?.nameRu"
396
496
  :label="$dataStore.t('form.signOfResidency')"
397
497
  :readonly="isDisabled"
398
498
  :clearable="!isDisabled"
@@ -402,7 +502,7 @@
402
502
  />
403
503
  <base-panel-input
404
504
  v-model="member.countryOfTaxResidency"
405
- :value="member.countryOfTaxResidency.nameRu"
505
+ :value="member.countryOfTaxResidency?.nameRu"
406
506
  :label="$dataStore.t('form.countryOfTaxResidency')"
407
507
  :readonly="isDisabled"
408
508
  :clearable="!isDisabled"
@@ -414,7 +514,7 @@
414
514
  <base-panel-input
415
515
  v-if="member.countryOfTaxResidency.ids === '500014.3'"
416
516
  v-model="member.addTaxResidency"
417
- :value="member.addTaxResidency.nameRu"
517
+ :value="member.addTaxResidency?.nameRu"
418
518
  :label="$dataStore.t('form.addTaxResidency')"
419
519
  :readonly="isDisabled"
420
520
  :clearable="!isDisabled"
@@ -426,8 +526,8 @@
426
526
  <base-panel-input
427
527
  v-if="hasSignOfIPDL"
428
528
  v-model="member.signOfIPDL"
429
- :value="member.signOfIPDL.nameRu"
430
- :label="$dataStore.t('form.signOfIPDL')"
529
+ :value="member.signOfIPDL?.nameRu"
530
+ :label="$dataStore.isPension ? $dataStore.t('form.signOfPDL') : $dataStore.t('form.signOfIPDL')"
431
531
  :readonly="isDisabled"
432
532
  :clearable="!isDisabled"
433
533
  :rules="$rules.objectRequired"
@@ -435,8 +535,9 @@
435
535
  @append="openPanel($dataStore.t('form.signOfIPDL'), $dataStore.ipdl, 'signOfIPDL')"
436
536
  />
437
537
  <base-panel-input
538
+ v-if="!$dataStore.isPension"
438
539
  v-model="member.countryOfCitizenship"
439
- :value="member.countryOfCitizenship.nameRu"
540
+ :value="member.countryOfCitizenship?.nameRu"
440
541
  :label="$dataStore.t('form.countryOfCitizenship')"
441
542
  :readonly="isDisabled"
442
543
  :clearable="!isDisabled"
@@ -446,7 +547,7 @@
446
547
  />
447
548
  <base-panel-input
448
549
  v-model="member.economySectorCode"
449
- :value="member.economySectorCode.nameRu"
550
+ :value="member.economySectorCode?.nameRu"
450
551
  :label="$dataStore.t('form.economySectorCode')"
451
552
  :readonly="isDisabled"
452
553
  :clearable="!isDisabled"
@@ -457,7 +558,7 @@
457
558
  <base-panel-input
458
559
  v-if="hasInsurancePay"
459
560
  v-model="member.insurancePay"
460
- :value="member.insurancePay.nameRu"
561
+ :value="member.insurancePay?.nameRu"
461
562
  :readonly="isDisabled"
462
563
  :clearable="!isDisabled"
463
564
  :rules="$rules.objectRequired"
@@ -466,6 +567,61 @@
466
567
  @append="openPanel($dataStore.t('form.insurancePay'), $dataStore.insurancePay, 'insurancePay', $dataStore.getInsurancePay)"
467
568
  />
468
569
  </base-form-section>
570
+ <base-form-section v-if="$dataStore.hasBankSection(whichForm)" :title="$dataStore.t('bankDetailsForm.title')">
571
+ <base-form-input
572
+ v-model="member.bankInfo.iik"
573
+ :label="$dataStore.t('clients.form.iik')"
574
+ :maska="$maska.iik"
575
+ :readonly="isDisabled"
576
+ :clearable="!isDisabled"
577
+ :rules="$rules.required.concat($rules.iik)"
578
+ />
579
+ <base-panel-input
580
+ v-model="member.bankInfo.bankName"
581
+ :value="member.bankInfo.bankName.nameRu"
582
+ :label="$dataStore.t('clients.form.nameBank')"
583
+ :readonly="isDisabled"
584
+ :clearable="!isDisabled"
585
+ :rules="$rules.objectRequired"
586
+ append-inner-icon="mdi mdi-chevron-right"
587
+ @append="openPanel($dataStore.t('clients.form.nameBank'), [], 'bankInfo', $dataStore.getBanks, '', 'bankName')"
588
+ />
589
+ <base-form-input
590
+ v-model.trim="member.bankInfo.bin"
591
+ :label="$dataStore.t('form.bin')"
592
+ :maska="$maska.iin"
593
+ :readonly="isDisabled"
594
+ :clearable="!isDisabled"
595
+ :rules="$rules.required.concat($rules.iinRight)"
596
+ />
597
+ <base-form-input v-model="member.bankInfo.bik" :label="$dataStore.t('clients.form.bik')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
598
+ </base-form-section>
599
+ <base-form-section v-if="$dataStore.hasAdditionalDocumentsSection(whichForm)" :title="$dataStore.t('form.phDocuments')">
600
+ <base-file-input
601
+ :label="$dataStore.t('form.identyDocument')"
602
+ :disabled="isDisabled"
603
+ :clearable="!isDisabled"
604
+ icon="mdi-paperclip"
605
+ @input="attachFile($event, '1')"
606
+ :rules="$rules.required"
607
+ />
608
+ <base-file-input
609
+ :label="$dataStore.t('form.bankStatement')"
610
+ :disabled="isDisabled"
611
+ :clearable="!isDisabled"
612
+ icon="mdi-paperclip"
613
+ @input="attachFile($event, '10')"
614
+ :rules="$rules.required"
615
+ />
616
+ <base-file-input
617
+ :label="$dataStore.t('pension.ENPFnote')"
618
+ :disabled="isDisabled"
619
+ :clearable="!isDisabled"
620
+ icon="mdi-paperclip"
621
+ @input="attachFile($event, '8')"
622
+ :rules="$rules.required"
623
+ />
624
+ </base-form-section>
469
625
  <base-form-section :title="$dataStore.t('form.contactsData')" v-if="$dataStore.hasContactSection(whichForm)">
470
626
  <base-form-input
471
627
  v-model="member.homePhone"
@@ -474,13 +630,13 @@
474
630
  :label="$dataStore.t('form.homePhone')"
475
631
  :readonly="isDisabled"
476
632
  :clearable="!isDisabled"
477
- :rules="whichForm === formStore.beneficiaryFormKey ? [] : $rules.phoneFormat"
633
+ :rules="whichForm === formStore.beneficiaryFormKey || member.isInsuredUnderage ? [] : $rules.phoneFormat"
478
634
  />
479
- <base-form-input v-model.trim="member.email" :label="$dataStore.t('form.email')" :rules="$rules.email" />
635
+ <base-form-input v-model.trim="member.email" :label="$dataStore.t('form.email')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.email" />
480
636
  </base-form-section>
481
637
  </v-form>
482
638
  <base-btn v-if="showSaveButton" :loading="isButtonLoading || isSubmittingForm" :text="$dataStore.t('buttons.save')" @click="submitForm" />
483
- <Teleport v-if="isPanelOpen" to="#panel-actions">
639
+ <Teleport v-if="isPanelOpen" to="#right-panel-actions">
484
640
  <div :class="[$styles.scrollPage]" class="flex flex-col items-center">
485
641
  <base-rounded-input v-model="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
486
642
  <div v-if="panelList && isPanelLoading === false" class="w-full flex flex-col gap-2 p-2">
@@ -496,20 +652,34 @@
496
652
  <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50" />
497
653
  </div>
498
654
  </Teleport>
499
- <Teleport v-if="isSearchOpen" to="#panel-actions">
655
+ <Teleport v-if="isSearchOpen" to="#right-panel-actions">
500
656
  <div :class="[$styles.flexColNav]">
501
657
  <base-btn v-if="hasGBDFL" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromGBDFL')" @click="getContragentFromGBDFL" />
502
658
  <base-btn v-if="hasInsis" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromInsis')" @click="getContragent" />
503
659
  <base-btn v-if="hasGKB" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromGKB')" @click="getFamilyInfo" />
660
+ <base-form-section v-if="hasDocumentReader" class="!mt-0">
661
+ <base-file-input
662
+ :disabled="isDisabled"
663
+ :clearable="!isDisabled"
664
+ accept="image/*,.pdf"
665
+ append="mdi-credit-card-scan-outline"
666
+ :multiple="true"
667
+ @onClear="imageDataList = []"
668
+ @input="attachDocumentReader($event)"
669
+ />
670
+ </base-form-section>
671
+ <base-animation>
672
+ <base-btn v-if="hasDocumentReader && imageDataList && !!imageDataList.length" :loading="isButtonLoading" text="Получить данные" @click="getDocumentReader" />
673
+ </base-animation>
504
674
  </div>
505
675
  </Teleport>
506
- <Teleport v-if="isDocumentOpen" to="#panel-actions">
676
+ <Teleport v-if="isDocumentOpen" to="#right-panel-actions">
507
677
  <div :class="[$styles.flexColNav]">
508
678
  <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')" />
509
679
  <base-btn :disabled="documentLoading" :loading="documentLoading" text="Скачать" @click="getFile('download')" />
510
680
  </div>
511
681
  </Teleport>
512
- <Teleport v-if="isOtpPanelOpen && !member.hasAgreement" to="#panel-actions">
682
+ <Teleport v-if="isOtpPanelOpen && !member.hasAgreement" to="#right-panel-actions">
513
683
  <div :class="[$styles.flexColNav]">
514
684
  <base-fade-transition>
515
685
  <base-rounded-input
@@ -527,7 +697,16 @@
527
697
  <base-btn v-if="member.otpTokenId" :disabled="otpSending" :loading="otpSending" :text="$dataStore.t('buttons.check')" @click="checkOtp()" />
528
698
  </div>
529
699
  </Teleport>
530
- <base-dialog v-model="familyDialog" :title="$dataStore.t('dialog.familyMember')" actions="familyDialog">
700
+ <base-dialog
701
+ v-model="deletionDialog"
702
+ :title="$dataStore.t('dialog.confirmDelete')"
703
+ :subtitle="$dataStore.t('dialog.delete')"
704
+ :confirm="$dataStore.t('confirm.delete')"
705
+ :icon="{ mdi: 'delete-outline', color: '#FD2D39' }"
706
+ @yes="deleteMember"
707
+ @no="deletionDialog = false"
708
+ />
709
+ <base-dialog v-model="familyDialog" :subtitle="$dataStore.t('dialog.familyMember')" :icon="{ mdi: 'hand-pointing-up' }" actions="familyDialog">
531
710
  <template #actions>
532
711
  <base-family-dialog :selected="selectedFamilyMember" @selectFamilyMember="selectFamilyMember" @reset="closeFamilyDialog(true)" />
533
712
  </template>
@@ -566,12 +745,20 @@ export default {
566
745
  const isPanelLoading = ref<boolean>(false);
567
746
  const isChangingMember = ref<boolean>(false);
568
747
  const familyDialog = ref<boolean>(false);
748
+ const deletionDialog = ref<boolean>(false);
749
+ const selectedIndex = ref<number>(0);
569
750
  const sameAddress = ref<boolean>(false);
570
751
  const panelValue = ref<Value>(new Value());
571
752
  const panelList = ref<Value[]>([]);
572
753
  const currentPanel = ref<keyof typeof member.value>();
573
754
  const searchQuery = ref<string>('');
574
755
  const fileData = ref<{ file: any }>();
756
+ const imageDataList = ref<string[]>([]);
757
+ const isRelative = ref<boolean>(false);
758
+
759
+ const currentPanelDeep = ref<string>();
760
+ const currentPanelSubDeep = ref<string>();
761
+ const hasDisability = ref<boolean>(false);
575
762
 
576
763
  const memberSetting = computed(() => dataStore.members[memberStore.getMemberApplicationCode(whichForm.value)!]);
577
764
  const hasOtp = computed(() => member.value.otpCode && member.value.otpCode.length === useMask().otp.length);
@@ -581,11 +768,15 @@ export default {
581
768
  const isFromGBD = computed(() => !!member.value.gosPersonData);
582
769
  const showSaveButton = computed(() => {
583
770
  const generalCondition = !isDisabled.value && !!isTask.value && !!dataStore.isInitiator();
584
- const perMemberCondtion = () => {
771
+ const perMemberCondition = () => {
585
772
  switch (whichForm.value) {
586
773
  case formStore.policyholderFormKey:
587
774
  return true;
588
775
  case formStore.insuredFormKey:
776
+ if (dataStore.isPension) {
777
+ return true;
778
+ }
779
+ return route.params.taskId !== '0';
589
780
  case formStore.beneficiaryFormKey:
590
781
  case formStore.beneficialOwnerFormKey:
591
782
  case formStore.policyholdersRepresentativeFormKey:
@@ -594,7 +785,7 @@ export default {
594
785
  return false;
595
786
  }
596
787
  };
597
- return generalCondition && perMemberCondtion();
788
+ return generalCondition && perMemberCondition();
598
789
  });
599
790
 
600
791
  const hasGBDFL = computed(() => {
@@ -607,9 +798,17 @@ export default {
607
798
  if (dataStore.isBolashak || dataStore.isGons) {
608
799
  return false;
609
800
  }
801
+ if (member.value.age !== null && Number(member.value.age) < 18) {
802
+ return false;
803
+ }
804
+ return true;
805
+ }
806
+ case formStore.insuredFormKey: {
807
+ if (dataStore.isLifetrip && member.value.isInsuredUnderage) {
808
+ return false;
809
+ }
610
810
  return true;
611
811
  }
612
- case formStore.insuredFormKey:
613
812
  case formStore.beneficialOwnerFormKey:
614
813
  case formStore.policyholdersRepresentativeFormKey:
615
814
  return true;
@@ -617,7 +816,7 @@ export default {
617
816
  return true;
618
817
  }
619
818
  };
620
- return dataStore.controls.hasGBDFL && perMemberCondition();
819
+ return dataStore.isAULETTI || dataStore.isAulettiParent ? false : dataStore.controls.hasGBDFL && perMemberCondition();
621
820
  });
622
821
  const hasInsis = computed(() => dataStore.controls.hasInsis);
623
822
  const hasGKB = computed(() => {
@@ -640,8 +839,29 @@ export default {
640
839
  };
641
840
  return dataStore.controls.hasGKB && !!dataStore.isTask() && perMemberCondition();
642
841
  });
643
-
842
+ const hasDocumentReader = computed(() => {
843
+ return !!member.value.hasAgreement && !!isTask.value && (dataStore.isAULETTI || dataStore.isAulettiParent);
844
+ });
845
+ const hasMemberSearch = computed(() => showSaveButton.value && (hasGBDFL.value || hasGKB.value || hasInsis.value || hasDocumentReader.value));
846
+ const hasMiddleName = computed(() => {
847
+ if (dataStore.isLifetrip) {
848
+ return false;
849
+ }
850
+ return true;
851
+ });
852
+ const hasRelationDegree = computed(() => {
853
+ if (dataStore.isLifetrip || dataStore.isPension) {
854
+ return false;
855
+ }
856
+ if ((whichForm.value === formStore.beneficiaryFormKey || whichForm.value === formStore.insuredFormKey) && member.value.iin !== formStore.policyholderForm.iin) {
857
+ return true;
858
+ }
859
+ return false;
860
+ });
644
861
  const hasFamilyStatus = computed(() => {
862
+ if (dataStore.isLifetrip || dataStore.isPension) {
863
+ return false;
864
+ }
645
865
  if (whichForm.value === formStore.beneficiaryFormKey) {
646
866
  if (dataStore.isBolashak) {
647
867
  return false;
@@ -658,7 +878,7 @@ export default {
658
878
  return false;
659
879
  });
660
880
  const hasSignOfIPDL = computed(() => {
661
- if (dataStore.isGons) {
881
+ if (dataStore.isGons || dataStore.isLifetrip) {
662
882
  return false;
663
883
  }
664
884
  return true;
@@ -667,7 +887,7 @@ export default {
667
887
 
668
888
  const birthDateRule = computed(() => {
669
889
  const baseDateRule = dataStore.rules.required.concat(dataStore.rules.birthDate);
670
- const byMemverAndProductRule = () => {
890
+ const byMemberAndProductRule = () => {
671
891
  if (whichForm.value === formStore.policyholderFormKey) {
672
892
  if (dataStore.isGons || dataStore.isBolashak || dataStore.isBaiterek) {
673
893
  return dataStore.rules.age18ByDate;
@@ -677,10 +897,13 @@ export default {
677
897
  if (dataStore.isBolashak || dataStore.isBaiterek) {
678
898
  return dataStore.rules.age18ByDate;
679
899
  }
900
+ if (dataStore.isLifetrip) {
901
+ return dataStore.rules.ageExceeds80ByDate;
902
+ }
680
903
  }
681
904
  return [];
682
905
  };
683
- return baseDateRule.concat(byMemverAndProductRule());
906
+ return baseDateRule.concat(byMemberAndProductRule());
684
907
  });
685
908
  const ageRule = computed(() => {
686
909
  const baseAgeRule = dataStore.rules.numbers;
@@ -711,10 +934,13 @@ export default {
711
934
  if (dataStore.isGons || dataStore.isBolashak) {
712
935
  return [];
713
936
  }
714
- if ((dataStore.isKazyna || dataStore.isLiferenta) && Number(member.value.age) < 18) {
937
+ if (member.value.age !== null && Number(member.value.age) < 18) {
715
938
  return [];
716
939
  }
717
940
  }
941
+ if (member.value.isInsuredUnderage) {
942
+ return [];
943
+ }
718
944
  return basePhoneRule;
719
945
  });
720
946
 
@@ -725,6 +951,9 @@ export default {
725
951
  return baseResidencyRule.concat(dataStore.rules.noResident);
726
952
  }
727
953
  }
954
+ if (dataStore.isLifetrip) {
955
+ return baseResidencyRule.concat(dataStore.rules.noResidentOffline);
956
+ }
728
957
  return baseResidencyRule;
729
958
  });
730
959
 
@@ -732,8 +961,10 @@ export default {
732
961
  switch (whichForm.value) {
733
962
  case formStore.policyholderFormKey:
734
963
  return route.params.taskId === '0';
735
- case formStore.policyholdersRepresentativeFormKey:
736
964
  case formStore.insuredFormKey:
965
+ if (dataStore.isPension) return route.params.taskId === '0';
966
+ return route.query.id === '0';
967
+ case formStore.policyholdersRepresentativeFormKey:
737
968
  case formStore.beneficiaryFormKey:
738
969
  case formStore.beneficialOwnerFormKey:
739
970
  return route.query.id === '0';
@@ -742,6 +973,8 @@ export default {
742
973
  const otpCondition = computed(() => {
743
974
  // Add conditions by product
744
975
  if (member.value.hasAgreement) return false;
976
+ if (whichForm.value === formStore.beneficiaryFormKey && member.value.age !== null && Number(member.value.age) < 18) return false;
977
+ if (dataStore.isLifetrip && whichForm.value === formStore.insuredFormKey && member.value.isInsuredUnderage) return false;
745
978
  if (!member.value.phoneNumber || (member.value.phoneNumber && member.value.phoneNumber.length !== useMask().phone.length)) return false;
746
979
  return getOtpConditionByMember();
747
980
  });
@@ -749,8 +982,8 @@ export default {
749
982
  const searchMember = async () => {
750
983
  if (!isDisabled.value) {
751
984
  dataStore.panelAction = null;
752
- dataStore.panel.title = 'Поиск контрагента';
753
- dataStore.panel.open = true;
985
+ dataStore.rightPanel.title = hasDocumentReader.value ? 'Получение данных со скана документа' : 'Поиск контрагента';
986
+ dataStore.rightPanel.open = true;
754
987
  isSearchOpen.value = true;
755
988
  isDocumentOpen.value = false;
756
989
  isOtpPanelOpen.value = false;
@@ -767,23 +1000,23 @@ export default {
767
1000
  const openCustomPanel = (type: 'document' | 'otp' = 'document') => {
768
1001
  dataStore.panelAction = null;
769
1002
  if (type === 'document' && memberDocument.value) {
770
- dataStore.panel.title = memberDocument.value.fileTypeName!;
1003
+ dataStore.rightPanel.title = memberDocument.value.fileTypeName!;
771
1004
  isDocumentOpen.value = true;
772
1005
  isSearchOpen.value = false;
773
1006
  isPanelOpen.value = false;
774
1007
  isOtpPanelOpen.value = false;
775
1008
  }
776
1009
  if (type === 'otp') {
777
- dataStore.panel.title = dataStore.t('form.otpCode');
1010
+ dataStore.rightPanel.title = dataStore.t('form.otpCode');
778
1011
  isOtpPanelOpen.value = true;
779
1012
  isDocumentOpen.value = false;
780
1013
  isSearchOpen.value = false;
781
1014
  isPanelOpen.value = false;
782
1015
  }
783
- dataStore.panel.open = true;
1016
+ dataStore.rightPanel.open = true;
784
1017
  };
785
1018
 
786
- const openPanel = async (title: string, list: Value[], key: string, asyncFunction?: Function, filterKey?: string) => {
1019
+ const openPanel = async (title: string, list: Value[], key: string, asyncFunction?: Function, filterKey?: string, deepKey?: string, subDeepKey?: string) => {
787
1020
  if (!isDisabled.value) {
788
1021
  isSearchOpen.value = false;
789
1022
  isDocumentOpen.value = false;
@@ -798,16 +1031,41 @@ export default {
798
1031
  currentPanel.value = key as keyof typeof member.value;
799
1032
  isPanelOpen.value = true;
800
1033
  dataStore.panelAction = null;
801
- dataStore.panel.open = true;
802
- dataStore.panel.title = title;
1034
+ dataStore.rightPanel.open = true;
1035
+ dataStore.rightPanel.title = title;
803
1036
 
804
1037
  let newList = list;
805
1038
  if (asyncFunction) {
806
1039
  isPanelLoading.value = true;
807
- newList = await asyncFunction(filterKey, member.value);
1040
+ const filterKeys: any = {};
1041
+ if (!!subDeepKey) {
1042
+ filterKeys.key = key;
1043
+ filterKeys.deepKey = deepKey;
1044
+ filterKeys.subDeepKey = filterKey;
1045
+ } else {
1046
+ if (!!deepKey) {
1047
+ filterKeys.key = key;
1048
+ filterKeys.deepKey = filterKey;
1049
+ } else {
1050
+ filterKeys.key = filterKey;
1051
+ }
1052
+ }
1053
+ newList = await asyncFunction(filterKey, member.value, filterKeys);
808
1054
  }
809
1055
  panelList.value = filterList(newList, key);
810
- panelValue.value = member.value[currentPanel.value];
1056
+ panelValue.value = !!deepKey
1057
+ ? !!subDeepKey
1058
+ ? //@ts-ignore
1059
+ member.value[currentPanel.value][deepKey as any][subDeepKey as any]
1060
+ : //@ts-ignore
1061
+ member.value[currentPanel.value][deepKey as any]
1062
+ : member.value[currentPanel.value];
1063
+ if (!!deepKey) {
1064
+ currentPanelDeep.value = deepKey;
1065
+ if (!!subDeepKey) {
1066
+ currentPanelSubDeep.value = subDeepKey;
1067
+ }
1068
+ }
811
1069
  isPanelLoading.value = false;
812
1070
  } else {
813
1071
  dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
@@ -831,11 +1089,24 @@ export default {
831
1089
  };
832
1090
 
833
1091
  const pickPanelValue = (item: Value) => {
1092
+ if (!currentPanel.value) return;
834
1093
  if (formStore.isDisabled[whichForm.value as keyof typeof formStore.isDisabled] === false) {
835
- dataStore.panel.open = false;
1094
+ dataStore.rightPanel.open = false;
836
1095
  isPanelOpen.value = false;
837
- // @ts-ignore
838
- member.value[currentPanel.value] = item.nameRu === null ? new Value() : item;
1096
+ if (!!currentPanelDeep.value) {
1097
+ if (!!currentPanelSubDeep.value) {
1098
+ //@ts-ignore
1099
+ member.value[currentPanel.value][currentPanelDeep.value][currentPanelSubDeep.value] = item.nameRu === null ? new Value() : item;
1100
+ } else {
1101
+ //@ts-ignore
1102
+ member.value[currentPanel.value][currentPanelDeep.value] = item.nameRu === null ? new Value() : item;
1103
+ }
1104
+ } else {
1105
+ // @ts-ignore
1106
+ member.value[currentPanel.value] = item.nameRu === null ? new Value() : item;
1107
+ }
1108
+ currentPanelDeep.value = '';
1109
+ currentPanelSubDeep.value = '';
839
1110
  } else {
840
1111
  dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
841
1112
  }
@@ -864,16 +1135,105 @@ export default {
864
1135
  }
865
1136
  };
866
1137
 
867
- const attachFile = (event: InputEvent) => {
1138
+ const attachFile = (event: InputEvent, code?: string) => {
868
1139
  if (event.target) {
869
- fileData.value = { file: (event.target as HTMLInputElement).files };
1140
+ fileData.value = code ? { file: (event.target as HTMLInputElement).files } : { file: (event.target as HTMLInputElement).files };
870
1141
  } else {
871
1142
  if (event.dataTransfer) {
872
- fileData.value = { file: (event.dataTransfer as DataTransfer).files };
1143
+ fileData.value = code ? { file: (event.dataTransfer as DataTransfer).files } : { file: (event.dataTransfer as DataTransfer).files };
873
1144
  }
874
1145
  }
875
1146
  };
876
1147
 
1148
+ const attachDocumentReader = async (event: InputEvent) => {
1149
+ if (event.target) {
1150
+ const target = event.target as HTMLInputElement;
1151
+ if (target.files && !!target.files.length) {
1152
+ imageDataList.value = [];
1153
+ await Promise.allSettled(
1154
+ Object.values(target.files).map(async f => {
1155
+ const { execute: getBase64 } = useBase64(f);
1156
+ imageDataList.value.push(await getBase64());
1157
+ }),
1158
+ );
1159
+ }
1160
+ } else {
1161
+ if (event.dataTransfer) {
1162
+ const dataTransfer = event.dataTransfer as DataTransfer;
1163
+ if (!!dataTransfer.files && !!dataTransfer.files.length) {
1164
+ imageDataList.value = [];
1165
+ await Promise.allSettled(
1166
+ Object.values(dataTransfer.files).map(async f => {
1167
+ const { execute: getBase64 } = useBase64(f);
1168
+ imageDataList.value.push(await getBase64());
1169
+ }),
1170
+ );
1171
+ }
1172
+ }
1173
+ }
1174
+ };
1175
+
1176
+ const getDocumentReader = async () => {
1177
+ if (imageDataList.value && !!imageDataList.value.length) {
1178
+ isButtonLoading.value = true;
1179
+ const parsedDocument = await callDocumentReader(imageDataList.value);
1180
+ if (typeof parsedDocument === 'object') {
1181
+ if (
1182
+ member.value.iin &&
1183
+ parsedDocument.iin &&
1184
+ reformatIin(parsedDocument.iin) &&
1185
+ member.value.iin.length === useMask().iin.length &&
1186
+ reformatIin(parsedDocument.iin).length === useMask().iin.length &&
1187
+ member.value.iin !== reformatIin(parsedDocument.iin)
1188
+ ) {
1189
+ dataStore.showToaster('error', 'Не совпадают ИИН');
1190
+ isButtonLoading.value = false;
1191
+ return;
1192
+ }
1193
+ formatDateProperty(parsedDocument, 'front');
1194
+ member.value.parsedDocument = parsedDocument;
1195
+ if (parsedDocument.age) member.value.age = parsedDocument.age;
1196
+ if (parsedDocument.iin) member.value.iin = reformatIin(parsedDocument.iin);
1197
+ if (parsedDocument.gender) {
1198
+ if (parsedDocument.gender === 'M' || parsedDocument.gender === 'F') {
1199
+ const gender = dataStore.gender.find((i: Value) => i.id === (parsedDocument.gender === 'M' ? 1 : 2));
1200
+ if (gender) member.value.gender = gender;
1201
+ }
1202
+ }
1203
+ if (parsedDocument.birthDate) member.value.birthDate = parsedDocument.birthDate;
1204
+ if (parsedDocument.documentIssueDate) member.value.documentDate = parsedDocument.documentIssueDate;
1205
+ if (parsedDocument.documentExpireDate) member.value.documentExpire = parsedDocument.documentExpireDate;
1206
+ if (parsedDocument.documentNumber) member.value.documentNumber = parsedDocument.documentNumber;
1207
+ if (parsedDocument.lastName) member.value.lastName = parsedDocument.lastName;
1208
+ if (parsedDocument.firstName) member.value.firstName = parsedDocument.firstName;
1209
+ if (parsedDocument.middleName) member.value.middleName = parsedDocument.middleName;
1210
+ if (parsedDocument.fullName) member.value.longName = parsedDocument.fullName;
1211
+ if (parsedDocument.documentName && parsedDocument.documentName.startsWith('Kazakhstan - Id Card')) {
1212
+ const documentType = dataStore.documentTypes.find((i: Value) => i.ids === '1UDL');
1213
+ if (documentType) member.value.documentType = documentType;
1214
+ }
1215
+ if (!!parsedDocument.documentIssuer) {
1216
+ if (
1217
+ parsedDocument.documentIssuer === 'МИНИСТЕРСТВО ВНУТРЕННИХ ДЕЛ РК' ||
1218
+ parsedDocument.documentIssuer === 'ҚР ІШКІ ІСТЕР МИНИСТРЛІГІ' ||
1219
+ /ҚАЗАҚСТАН/gi.test(parsedDocument.documentIssuer) ||
1220
+ /КАЗАХСТАН/gi.test(parsedDocument.documentIssuer)
1221
+ ) {
1222
+ const documentIssuer = dataStore.documentIssuers.find(i => (i.nameRu as string).match(new RegExp('МВД РК', 'i')));
1223
+ if (documentIssuer) member.value.documentIssuers = documentIssuer;
1224
+ } else {
1225
+ const documentIssuer = dataStore.documentIssuers.find(i => (i.nameRu as string).match(new RegExp(`${parsedDocument.documentIssuer}`, 'i')));
1226
+ if (documentIssuer) member.value.documentIssuers = documentIssuer;
1227
+ }
1228
+ }
1229
+ dataStore.rightPanel.open = false;
1230
+ dataStore.showToaster('success', dataStore.t('toaster.successOperation'));
1231
+ imageDataList.value = [];
1232
+ }
1233
+ isButtonLoading.value = false;
1234
+ }
1235
+ };
1236
+
877
1237
  const getFile = async (type: FileActions) => {
878
1238
  if (memberDocument.value) {
879
1239
  documentLoading.value = true;
@@ -904,7 +1264,7 @@ export default {
904
1264
  familyDialog.value = false;
905
1265
  selectedFamilyMember.value = {};
906
1266
  isButtonLoading.value = false;
907
- dataStore.panel.open = false;
1267
+ dataStore.rightPanel.open = false;
908
1268
  isSearchOpen.value = false;
909
1269
  };
910
1270
 
@@ -921,20 +1281,20 @@ export default {
921
1281
  }
922
1282
  familyDialog.value = false;
923
1283
  isButtonLoading.value = false;
924
- dataStore.panel.open = false;
1284
+ dataStore.rightPanel.open = false;
925
1285
  isSearchOpen.value = false;
926
1286
  };
927
1287
 
928
1288
  const getContragentFromGBDFL = async () => {
929
1289
  if (member.value.hasAgreement !== true) {
930
1290
  dataStore.showToaster('error', dataStore.t('toaster.needAgreement'), 3000);
931
- dataStore.panel.open = false;
1291
+ dataStore.rightPanel.open = false;
932
1292
  isSearchOpen.value = false;
933
1293
  return;
934
1294
  }
935
1295
  if (!member.value.iin || member.value.iin.length !== useMask().iin.length || !member.value.phoneNumber || member.value.phoneNumber.length !== useMask().phone.length) {
936
1296
  dataStore.showToaster('error', dataStore.t('toaster.errorFormField', { text: 'Номер телефона, ИИН' }), 5000);
937
- dataStore.panel.open = false;
1297
+ dataStore.rightPanel.open = false;
938
1298
  isSearchOpen.value = false;
939
1299
  return;
940
1300
  }
@@ -944,7 +1304,7 @@ export default {
944
1304
  if (response === true) {
945
1305
  member.value.gotFromInsis = true;
946
1306
  }
947
- dataStore.panel.open = false;
1307
+ dataStore.rightPanel.open = false;
948
1308
  isSearchOpen.value = false;
949
1309
  }
950
1310
  isButtonLoading.value = false;
@@ -953,20 +1313,20 @@ export default {
953
1313
  const getContragent = async () => {
954
1314
  if (member.value.hasAgreement !== true) {
955
1315
  dataStore.showToaster('error', dataStore.t('toaster.needAgreement'), 3000);
956
- dataStore.panel.open = false;
1316
+ dataStore.rightPanel.open = false;
957
1317
  isSearchOpen.value = false;
958
1318
  return;
959
1319
  }
960
1320
  if (!member.value.iin || member.value.iin.length !== useMask().iin.length) {
961
1321
  dataStore.showToaster('error', dataStore.t('toaster.errorFormField', { text: 'ИИН' }), 5000);
962
- dataStore.panel.open = false;
1322
+ dataStore.rightPanel.open = false;
963
1323
  isSearchOpen.value = false;
964
1324
  return;
965
1325
  }
966
1326
  isButtonLoading.value = true;
967
1327
  await dataStore.getContragent(member.value, false);
968
1328
  isButtonLoading.value = false;
969
- dataStore.panel.open = false;
1329
+ dataStore.rightPanel.open = false;
970
1330
  isSearchOpen.value = false;
971
1331
  };
972
1332
 
@@ -999,10 +1359,10 @@ export default {
999
1359
  }
1000
1360
  const isInsured = formStore.isPolicyholderInsured;
1001
1361
  const remoteIsInsured = ref<boolean | null>(null);
1002
- if (whichForm.value == formStore.policyholderFormKey) {
1362
+ if (whichForm.value == formStore.policyholderFormKey || (dataStore.isPension && whichForm.value == formStore.insuredFormKey)) {
1003
1363
  if (route.params.taskId === '0') {
1004
1364
  try {
1005
- const taskId = await dataStore.startApplication(member.value);
1365
+ const taskId = await dataStore.startApplication(member.value, dataStore.isPension ? (String(route.query.type) === 'joint' ? 4 : 1) : undefined);
1006
1366
  if (typeof taskId === 'string') {
1007
1367
  await dataStore.getApplicationData(taskId, false, false, false, false);
1008
1368
  remoteIsInsured.value = formStore.applicationData.clientApp.isInsured;
@@ -1036,18 +1396,40 @@ export default {
1036
1396
  if (!isSaved) return false;
1037
1397
  if (whichForm.value === formStore.policyholderFormKey) {
1038
1398
  if (isInsured === true || remoteIsInsured.value === true) {
1039
- formStore.insuredForm[0] = formStore.policyholderForm;
1040
- const isInsuredSaved = await dataStore.saveMember(
1041
- member.value,
1042
- memberStore.getMemberCode(formStore.insuredFormKey)!,
1043
- memberStore.getMemberFromApplication(formStore.insuredFormKey, formStore.insuredFormIndex),
1044
- );
1045
- if (!isInsuredSaved) return false;
1046
- wasInsuredAction.value = true;
1399
+ const insuredFormIndex = remoteIsInsured.value === true ? 0 : isInsured === true ? formStore.insuredForm.findIndex(i => i.iin === formStore.policyholderForm.iin) : -1;
1400
+ if (insuredFormIndex !== -1) {
1401
+ formStore.insuredForm[insuredFormIndex] = formStore.policyholderForm;
1402
+ const isInsuredSaved = await dataStore.saveMember(
1403
+ member.value,
1404
+ memberStore.getMemberCode(formStore.insuredFormKey)!,
1405
+ memberStore.getMemberFromApplication(formStore.insuredFormKey, insuredFormIndex),
1406
+ );
1407
+ if (!isInsuredSaved) return false;
1408
+ wasInsuredAction.value = true;
1409
+ }
1047
1410
  }
1048
1411
  }
1049
1412
  if (whichForm.value === formStore.insuredFormKey) {
1050
1413
  wasInsuredAction.value = true;
1414
+ if (dataStore.isPension) {
1415
+ formStore.applicationData.pensionApp = {
1416
+ ...formStore.applicationData.pensionApp,
1417
+ account: member.value.bankInfo.iik,
1418
+ bankBik: member.value.bankInfo.bik,
1419
+ bankBin: member.value.bankInfo.bankName.ids,
1420
+ bankId: member.value.bankInfo.bankName.id,
1421
+ bankName: member.value.bankInfo.bankName.nameRu,
1422
+ guaranteedPeriod: 0,
1423
+ amount: 0,
1424
+ compulsoryContractAmount: 0,
1425
+ voluntaryContractAmount: 0,
1426
+ ownFundsRaisAmount: 0,
1427
+ compulsoryProfContractAmount: 0,
1428
+ };
1429
+ const isApplicationSaved = await dataStore.setApplication();
1430
+ if (isApplicationSaved === false) return;
1431
+ dataStore.showToaster('info', dataStore.t('toaster.needToRecalculate'), 5000);
1432
+ }
1051
1433
  }
1052
1434
  await router.replace({
1053
1435
  name: route.name!,
@@ -1056,8 +1438,8 @@ export default {
1056
1438
  await dataStore.getApplicationData(route.params.taskId as string, false, false, true, wasInsuredAction.value);
1057
1439
  if (dataStore.controls.hasCalculator) {
1058
1440
  if (formStore.additionalInsuranceTermsWithout && formStore.additionalInsuranceTermsWithout.length !== 0) {
1059
- formStore.additionalInsuranceTerms.forEach((term: any) => {
1060
- const defaultTerm = formStore.additionalInsuranceTermsWithout.find((i: any) => i.coverTypeId === term.coverTypeId);
1441
+ formStore.additionalInsuranceTerms.forEach(term => {
1442
+ const defaultTerm = formStore.additionalInsuranceTermsWithout.find(i => i.coverTypeId === term.coverTypeId);
1061
1443
  if (defaultTerm) {
1062
1444
  term.coverSumName = defaultTerm.coverSumName;
1063
1445
  term.coverSumId = defaultTerm.coverSumId;
@@ -1071,14 +1453,16 @@ export default {
1071
1453
  };
1072
1454
 
1073
1455
  const validateAgreement = () => {
1074
- if (dataStore.isGons || dataStore.isBolashak) {
1075
- if (whichForm.value === formStore.beneficiaryFormKey) {
1076
- // TODO уточнить
1456
+ if (dataStore.isPension && whichForm.value === formStore.policyholdersRepresentativeFormKey) {
1457
+ return true;
1458
+ }
1459
+ if (whichForm.value === formStore.beneficiaryFormKey) {
1460
+ if (member.value.age !== null && Number(member.value.age) < 18) {
1077
1461
  return true;
1078
1462
  }
1079
1463
  }
1080
- if (dataStore.isKazyna || dataStore.isLiferenta) {
1081
- if (whichForm.value === formStore.beneficiaryFormKey && Number(member.value.age) < 18) {
1464
+ if (whichForm.value === formStore.insuredFormKey) {
1465
+ if (dataStore.isLifetrip && member.value.isInsuredUnderage) {
1082
1466
  return true;
1083
1467
  }
1084
1468
  }
@@ -1096,10 +1480,16 @@ export default {
1096
1480
  if (v.valid) {
1097
1481
  isSubmittingForm.value = true;
1098
1482
  const docType = member.value.documentType.ids;
1099
- if (member.value.gotFromInsis === true && (docType === '1UDL' || docType === 'SBI')) {
1483
+ if (member.value.gotFromInsis === true && (docType === '1UDL' || docType === 'SBI' || docType === 'PS')) {
1100
1484
  dataStore.isLoading = true;
1101
- const ESBDResponse = await validateESBD(docType === '1UDL' ? 1 : 3);
1485
+ const docTypeCodes = {
1486
+ '1UDL': 1,
1487
+ PS: 2,
1488
+ SBI: 3,
1489
+ };
1490
+ const ESBDResponse = await validateESBD(docTypeCodes[docType]);
1102
1491
  if (!ESBDResponse) {
1492
+ isSubmittingForm.value = false;
1103
1493
  dataStore.isLoading = false;
1104
1494
  return;
1105
1495
  }
@@ -1109,6 +1499,22 @@ export default {
1109
1499
  if (typeof ESBDResponse === 'object' && ESBDResponse.errorCode === 0) {
1110
1500
  member.value.verifyType = 'ESBD';
1111
1501
  member.value.verifyDate = ESBDResponse.verifiedDate;
1502
+
1503
+ if (member.value.bankInfo.iik.length === useMask().iik.length) {
1504
+ const isValidIik = await dataStore.checkAccountNumber(member.value.bankInfo.iik);
1505
+ if (isValidIik === false) {
1506
+ dataStore.showToaster('error', dataStore.t('error.notValidIik'));
1507
+ member.value.bankInfo.iik = '';
1508
+ isSubmittingForm.value = false;
1509
+ return;
1510
+ }
1511
+ if (formStore.applicationData.pensionApp) {
1512
+ formStore.applicationData.pensionApp.account = member.value.bankInfo.iik;
1513
+ formStore.applicationData.pensionApp.bankBik = member.value.bankInfo.bik;
1514
+ formStore.applicationData.pensionApp.bankBin = member.value.bankInfo.bin;
1515
+ formStore.applicationData.pensionApp.bankId = member.value.bankInfo.bankName.id;
1516
+ }
1517
+ }
1112
1518
  const hasMemberSaved = await saveMember();
1113
1519
  } else {
1114
1520
  dataStore.isLoading = false;
@@ -1153,7 +1559,7 @@ export default {
1153
1559
  }
1154
1560
  otpSending.value = false;
1155
1561
  if (checked === true) {
1156
- dataStore.panel.open = false;
1562
+ dataStore.rightPanel.open = false;
1157
1563
  }
1158
1564
  };
1159
1565
 
@@ -1163,7 +1569,7 @@ export default {
1163
1569
  if (response) {
1164
1570
  if (member.value.hasAgreement === null) member.value.hasAgreement = response.otpStatus;
1165
1571
  if (response.otpStatus === true) {
1166
- dataStore.panel.open = false;
1572
+ dataStore.rightPanel.open = false;
1167
1573
  }
1168
1574
  }
1169
1575
  otpSending.value = false;
@@ -1177,6 +1583,15 @@ export default {
1177
1583
  if (setDefaults.percentage) {
1178
1584
  setPercentage();
1179
1585
  }
1586
+ if (setDefaults.signOfResidency) {
1587
+ setSignOfResidency();
1588
+ }
1589
+ if (setDefaults.countryOfTaxResidency) {
1590
+ setCountryOfTaxResidency();
1591
+ }
1592
+ if (setDefaults.countryOfCitizenship) {
1593
+ setCountryOfCitizenship();
1594
+ }
1180
1595
  };
1181
1596
 
1182
1597
  const setSectorCode = async () => {
@@ -1186,7 +1601,27 @@ export default {
1186
1601
  member.value.economySectorCode = defaultValue ? defaultValue : new Value();
1187
1602
  }
1188
1603
  };
1189
-
1604
+ const setSignOfResidency = async () => {
1605
+ if (member.value.id === 0 && route.query.id === '0') {
1606
+ const residents = await dataStore.getResidents();
1607
+ const defaultValue = residents.find(item => String(item.nameRu).match(new RegExp('Резидент', 'i'))) as Value;
1608
+ member.value.signOfResidency = defaultValue ? defaultValue : new Value();
1609
+ }
1610
+ };
1611
+ const setCountryOfTaxResidency = async () => {
1612
+ if (member.value.id === 0 && route.query.id === '0') {
1613
+ const taxCountries = await dataStore.getTaxCountries();
1614
+ const defaultValue = taxCountries.find(item => String(item.nameRu).match(new RegExp('Казахстан', 'i'))) as Value;
1615
+ member.value.countryOfTaxResidency = defaultValue ? defaultValue : new Value();
1616
+ }
1617
+ };
1618
+ const setCountryOfCitizenship = async () => {
1619
+ if (member.value.id === 0 && route.query.id === '0') {
1620
+ const citizenshipCountries = await dataStore.getCitizenshipCountries();
1621
+ const defaultValue = citizenshipCountries.find(item => String(item.nameRu).match(new RegExp('Казахстан', 'i'))) as Value;
1622
+ member.value.countryOfCitizenship = defaultValue ? defaultValue : new Value();
1623
+ }
1624
+ };
1190
1625
  const setPercentage = () => {
1191
1626
  if (whichForm.value === formStore.beneficiaryFormKey && member.value.id === 0 && route.query.id === '0' && member.value.percentageOfPayoutAmount === null) {
1192
1627
  if (dataStore.members.beneficiaryApp.isMultiple) {
@@ -1203,7 +1638,7 @@ export default {
1203
1638
  };
1204
1639
 
1205
1640
  const selectMember = async (index: number, update?: boolean) => {
1206
- dataStore.panel.open = false;
1641
+ dataStore.rightPanel.open = false;
1207
1642
  isButtonLoading.value = true;
1208
1643
  isChangingMember.value = true;
1209
1644
  //@ts-ignore
@@ -1212,13 +1647,19 @@ export default {
1212
1647
  isButtonLoading.value = false;
1213
1648
  };
1214
1649
 
1215
- const deleteMember = async (index: number) => {
1216
- await memberStore.deleteMember(route.params.taskId as string, whichForm.value, index);
1650
+ const openDeletionDialog = (index: number) => {
1651
+ deletionDialog.value = true;
1652
+ selectedIndex.value = index;
1653
+ };
1654
+
1655
+ const deleteMember = async () => {
1656
+ await memberStore.deleteMember(route.params.taskId as string, whichForm.value, selectedIndex.value);
1217
1657
  const currentIndex = Number(whichIndex.value);
1218
- if (index <= currentIndex) {
1658
+ if (selectedIndex.value <= currentIndex) {
1219
1659
  const newIndex = ref<number>(currentIndex - 1 > 0 ? currentIndex - 1 : 0);
1220
- await selectMember(newIndex.value, index === currentIndex ? true : undefined);
1660
+ await selectMember(newIndex.value, selectedIndex.value === currentIndex ? true : undefined);
1221
1661
  }
1662
+ deletionDialog.value = false;
1222
1663
  };
1223
1664
 
1224
1665
  const onInit = async () => {
@@ -1238,8 +1679,8 @@ export default {
1238
1679
  // if (filteredDocuments && filteredDocuments.length) memberDocument.value = filteredDocuments[0];
1239
1680
  }
1240
1681
  await setDefaultValues();
1682
+ if (Number(formStore.applicationData.processCode) === 4) dataStore.members.insuredApp.isMultiple = true;
1241
1683
  };
1242
-
1243
1684
  onMounted(async () => {
1244
1685
  await onInit();
1245
1686
  });
@@ -1302,14 +1743,16 @@ export default {
1302
1743
  };
1303
1744
 
1304
1745
  watch(
1305
- () => dataStore.panel.open,
1746
+ () => dataStore.rightPanel.open,
1306
1747
  () => {
1307
- if (dataStore.panel.open === false) {
1748
+ if (dataStore.rightPanel.open === false) {
1308
1749
  isPanelOpen.value = false;
1309
1750
  isDocumentOpen.value = false;
1310
1751
  isSearchOpen.value = false;
1311
1752
  isOtpPanelOpen.value = false;
1312
1753
  dataStore.panelAction = null;
1754
+ currentPanelDeep.value = '';
1755
+ currentPanelSubDeep.value = '';
1313
1756
  }
1314
1757
  },
1315
1758
  { immediate: true },
@@ -1320,6 +1763,41 @@ export default {
1320
1763
  searchQuery.value = '';
1321
1764
  }
1322
1765
  });
1766
+ if (dataStore.isLifetrip) {
1767
+ watch(
1768
+ () => member.value.age,
1769
+ val => {
1770
+ if (val && Number(val) >= 18) {
1771
+ if (member.value.hasAgreement !== true) {
1772
+ member.value.hasAgreement = false;
1773
+ }
1774
+ } else {
1775
+ member.value.hasAgreement = true;
1776
+ }
1777
+ member.value.isInsuredUnderage = Number(val) >= 18 ? false : true;
1778
+ },
1779
+ );
1780
+ watch(
1781
+ () => member.value.isInsuredUnderage,
1782
+ val => {
1783
+ if (val === true && Number(member.value.age) >= 18) {
1784
+ member.value.isInsuredUnderage = false;
1785
+ return dataStore.showToaster('error', dataStore.t('toaster.underageShouldBeLess18'), 3000);
1786
+ }
1787
+ },
1788
+ );
1789
+ }
1790
+ if (dataStore.isPension) {
1791
+ watch(
1792
+ () => member.value.bankInfo.bankName,
1793
+ val => {
1794
+ if (val) {
1795
+ member.value.bankInfo.bik = val.code as string;
1796
+ member.value.bankInfo.bin = reformatIin(val.ids as string);
1797
+ }
1798
+ },
1799
+ );
1800
+ }
1323
1801
 
1324
1802
  return {
1325
1803
  // State
@@ -1342,9 +1820,13 @@ export default {
1342
1820
  Value,
1343
1821
  memberDocument,
1344
1822
  familyDialog,
1823
+ deletionDialog,
1824
+ selectedIndex,
1345
1825
  selectedFamilyMember,
1346
1826
  sameAddress,
1347
-
1827
+ hasDisability,
1828
+ isRelative,
1829
+ imageDataList,
1348
1830
  // Computed
1349
1831
  whichForm,
1350
1832
  whichIndex,
@@ -1359,10 +1841,14 @@ export default {
1359
1841
  hasGBDFL,
1360
1842
  hasInsis,
1361
1843
  hasGKB,
1844
+ hasDocumentReader,
1845
+ hasMiddleName,
1846
+ hasRelationDegree,
1362
1847
  hasFamilyStatus,
1363
1848
  hasInsurancePay,
1364
1849
  hasSignOfIPDL,
1365
1850
  hasSameAddressToggle,
1851
+ hasMemberSearch,
1366
1852
 
1367
1853
  // Rules
1368
1854
  ageRule,
@@ -1382,9 +1868,12 @@ export default {
1382
1868
  getContragentFromGBDFL,
1383
1869
  getContragent,
1384
1870
  attachFile,
1871
+ attachDocumentReader,
1872
+ getDocumentReader,
1385
1873
  getFile,
1386
1874
  selectFamilyMember,
1387
1875
  closeFamilyDialog,
1876
+ openDeletionDialog,
1388
1877
  scrollForm,
1389
1878
  onIinInput,
1390
1879
  onOtpCodeInput,