hl-core 0.0.10-beta.3 → 0.0.10-beta.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +0 -2
  2. package/api/base.api.ts +300 -190
  3. package/api/interceptors.ts +3 -5
  4. package/components/Complex/TextBlock.vue +2 -0
  5. package/components/Dialog/Dialog.vue +7 -1
  6. package/components/Dialog/FamilyDialog.vue +2 -0
  7. package/components/Form/DigitalDocument.vue +52 -0
  8. package/components/Form/DynamicForm.vue +1 -0
  9. package/components/Form/FormData.vue +1 -0
  10. package/components/Form/ManagerAttachment.vue +17 -8
  11. package/components/Form/ProductConditionsBlock.vue +12 -6
  12. package/components/Input/Datepicker.vue +5 -0
  13. package/components/Input/DynamicInput.vue +2 -0
  14. package/components/Input/FormInput.vue +7 -0
  15. package/components/Input/OtpInput.vue +25 -0
  16. package/components/Input/PanelInput.vue +1 -0
  17. package/components/Input/RoundedInput.vue +4 -0
  18. package/components/Input/RoundedSelect.vue +4 -0
  19. package/components/Input/SwitchInput.vue +2 -0
  20. package/components/Input/TextInput.vue +2 -0
  21. package/components/Layout/Drawer.vue +2 -0
  22. package/components/Pages/Anketa.vue +166 -167
  23. package/components/Pages/Auth.vue +2 -0
  24. package/components/Pages/ContragentForm.vue +2 -1
  25. package/components/Pages/Documents.vue +429 -59
  26. package/components/Pages/MemberForm.vue +327 -159
  27. package/components/Pages/ProductConditions.vue +681 -150
  28. package/components/Panel/PanelHandler.vue +261 -114
  29. package/components/Transitions/Animation.vue +2 -0
  30. package/components/Utilities/Chip.vue +3 -1
  31. package/components/Utilities/JsonViewer.vue +1 -2
  32. package/composables/classes.ts +133 -42
  33. package/composables/constants.ts +41 -0
  34. package/composables/fields.ts +6 -4
  35. package/composables/index.ts +246 -7
  36. package/composables/styles.ts +8 -24
  37. package/configs/pwa.ts +1 -7
  38. package/layouts/clear.vue +1 -1
  39. package/layouts/default.vue +1 -1
  40. package/layouts/full.vue +1 -1
  41. package/locales/ru.json +44 -14
  42. package/nuxt.config.ts +10 -13
  43. package/package.json +13 -12
  44. package/plugins/head.ts +2 -1
  45. package/store/data.store.ts +670 -480
  46. package/store/member.store.ts +18 -6
  47. package/store/rules.ts +21 -2
  48. package/tsconfig.json +3 -0
  49. package/types/enum.ts +20 -2
  50. package/types/env.d.ts +2 -2
  51. package/types/form.ts +71 -74
  52. package/types/index.ts +916 -873
@@ -68,51 +68,56 @@
68
68
  v-model="member.phoneNumber"
69
69
  :label="$dataStore.t('form.phoneNumber')"
70
70
  :maska="$maska.phone"
71
- :readonly="!!isDisabled || !!isIinPhoneDisabled"
72
- :clearable="!isDisabled"
71
+ :readonly="!!isDisabled || !!isIinPhoneDisabled || !!isDataFromGov"
72
+ :clearable="!isDisabled && !isIinPhoneDisabled && !isDataFromGov"
73
73
  :append-inner-icon="otpCondition ? `${$dataStore.isPension ? 'mdi-message-text' : 'mdi mdi-phone-message'}` : ''"
74
74
  @append="openCustomPanel('otp')"
75
75
  @keyup.enter.prevent="otpCondition ? openCustomPanel('otp') : null"
76
76
  :rules="phoneRule"
77
77
  />
78
- <base-form-input
79
- v-model="member.iin"
80
- :label="$dataStore.t('form.iin')"
81
- :maska="$maska.iin"
82
- :readonly="!!isDisabled || !!isIinPhoneDisabled || !!member.parsedDocument?.iin"
83
- :clearable="!isDisabled"
84
- :append-inner-icon="hasMemberSearch ? (hasDocumentReader ? 'mdi mdi-credit-card-scan-outline' : 'mdi mdi-magnify') : ''"
85
- @append="searchMember"
86
- @input="onIinInput"
87
- :rules="$rules.required.concat($rules.iinRight)"
88
- />
78
+ <base-animation>
79
+ <base-form-input
80
+ v-if="!isNonResident"
81
+ v-model="member.iin"
82
+ :label="$dataStore.t('form.iin')"
83
+ :maska="$maska.iin"
84
+ :readonly="!!isDisabled || !!isIinPhoneDisabled || !!member.parsedDocument?.iin || !!isDataFromGov"
85
+ :clearable="!isDisabled && !isIinPhoneDisabled && !member.parsedDocument?.iin && !isDataFromGov"
86
+ :append-inner-icon="hasMemberSearch || !isNonResident ? (hasDocumentReader ? 'mdi mdi-credit-card-scan-outline' : 'mdi mdi-magnify') : ''"
87
+ @append="searchMember"
88
+ @input="onIinInput"
89
+ :rules="isNonResident ? [] : $rules.required.concat($rules.iinRight)"
90
+ />
91
+ </base-animation>
89
92
  <base-form-input
90
93
  v-model.trim="member.lastName"
91
- :readonly="isDisabled || isFromGBD || !!member.parsedDocument?.lastName"
92
- :clearable="!isDisabled"
94
+ :readonly="isDisabled || isDataFromGov || !!member.parsedDocument?.lastName"
95
+ :clearable="!isDisabled && !isDataFromGov && !member.parsedDocument?.lastName"
93
96
  :label="$dataStore.t('form.lastName')"
94
97
  :rules="$rules.required.concat($rules.cyrillic)"
95
98
  />
96
99
  <base-form-input
97
100
  v-model.trim="member.firstName"
98
- :readonly="isDisabled || isFromGBD || !!member.parsedDocument?.firstName"
99
- :clearable="!isDisabled"
101
+ :readonly="isDisabled || isDataFromGov || !!member.parsedDocument?.firstName"
102
+ :clearable="!isDisabled && !isDataFromGov && !member.parsedDocument?.firstName"
100
103
  :label="$dataStore.t('form.firstName')"
101
104
  :rules="$rules.required.concat($rules.cyrillic)"
105
+ :append-inner-icon="isNonResident ? 'mdi mdi-magnify' : ''"
106
+ @append="searchMember"
102
107
  />
103
108
  <base-form-input
104
109
  v-if="hasMiddleName"
105
110
  v-model.trim="member.middleName"
106
- :readonly="isDisabled || isFromGBD || !!member.parsedDocument?.middleName"
107
- :clearable="!isDisabled"
111
+ :readonly="isDisabled || isDataFromGov || !!member.parsedDocument?.middleName"
112
+ :clearable="!isDisabled && !isDataFromGov && !member.parsedDocument?.middleName"
108
113
  :label="$dataStore.t('form.middleName')"
109
114
  :rules="$rules.cyrillicNonRequired"
110
115
  />
111
116
  <base-form-input
112
117
  v-if="$dataStore.isLifetrip"
113
118
  v-model.trim="member.lastNameLat"
114
- :readonly="isDisabled || isFromGBD"
115
- :clearable="!isDisabled"
119
+ :readonly="isDisabled || isDataFromGov"
120
+ :clearable="!isDisabled && !isDataFromGov"
116
121
  :label="$dataStore.t('form.lastNameLat')"
117
122
  :rules="$rules.required.concat($rules.latin)"
118
123
  :hint="$dataStore.t('labels.checkWithDoc')"
@@ -120,16 +125,16 @@
120
125
  <base-form-input
121
126
  v-if="$dataStore.isLifetrip"
122
127
  v-model.trim="member.firstNameLat"
123
- :readonly="isDisabled || isFromGBD"
124
- :clearable="!isDisabled"
128
+ :readonly="isDisabled || isDataFromGov"
129
+ :clearable="!isDisabled && !isDataFromGov"
125
130
  :label="$dataStore.t('form.firstNameLat')"
126
131
  :rules="$rules.required.concat($rules.latin)"
127
132
  :hint="$dataStore.t('labels.checkWithDoc')"
128
133
  />
129
134
  <base-form-input
130
135
  v-model="member.birthDate"
131
- :readonly="isDisabled || isFromGBD || !!member.parsedDocument?.birthDate"
132
- :clearable="!isDisabled"
136
+ :readonly="isDisabled || isDataFromGov || !!member.parsedDocument?.birthDate"
137
+ :clearable="!isDisabled && !isDataFromGov && !member.parsedDocument?.birthDate"
133
138
  :label="$dataStore.t('form.birthDate')"
134
139
  :rules="birthDateRule"
135
140
  :maska="$maska.date"
@@ -161,8 +166,8 @@
161
166
  <base-panel-input
162
167
  v-model="member.gender"
163
168
  :value="member.gender?.nameRu"
164
- :readonly="isDisabled || isFromGBD"
165
- :clearable="!isDisabled && !isFromGBD"
169
+ :readonly="isDisabled || isDataFromGov"
170
+ :clearable="!isDisabled && !isDataFromGov"
166
171
  :label="$dataStore.t('form.gender')"
167
172
  :rules="$rules.objectRequired"
168
173
  append-inner-icon="mdi mdi-chevron-right"
@@ -199,7 +204,10 @@
199
204
  :rules="$rules.required.concat($rules.numbers)"
200
205
  />
201
206
  </base-form-section>
202
- <base-form-section v-if="$dataStore.isPension && whichForm === formStore.insuredFormKey" :title="$dataStore.t('pension.disabilityInfo')">
207
+ <base-form-section
208
+ v-if="$dataStore.isPension && (whichForm === formStore.insuredFormKey || $route.query.tab === 'slaveInsuredForm')"
209
+ :title="$dataStore.t('pension.disabilityInfo')"
210
+ >
203
211
  <base-form-toggle v-model="member.isDisability" :title="$dataStore.t('pension.ifHasDisability')" :disabled="isDisabled" :has-border="false" />
204
212
  <base-animation>
205
213
  <base-panel-input
@@ -347,7 +355,7 @@
347
355
  />
348
356
  <base-form-input v-model.trim="member.jobPlace" :label="$dataStore.t('form.jobPlace')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
349
357
  </base-form-section>
350
- <base-form-section :title="$dataStore.t('form.placeRegistration')" v-if="$dataStore.hasPlaceSection(whichForm)">
358
+ <base-form-section :title="$dataStore.t('form.placeRegistration')">
351
359
  <base-form-toggle v-if="hasSameAddressToggle" v-model="sameAddress" :disabled="isDisabled" :has-border="false" :title="$dataStore.t('form.sameAddress')" />
352
360
  <base-panel-input
353
361
  v-model="member.registrationCountry"
@@ -415,7 +423,7 @@
415
423
  />
416
424
  <base-form-input
417
425
  v-model.trim="member.registrationNumberHouse"
418
- :rules="$rules.required"
426
+ :rules="[...$rules.required, $rules.lengthLimit(member.registrationNumberHouse, 10)]"
419
427
  :readonly="isDisabled"
420
428
  :clearable="!isDisabled"
421
429
  :label="$dataStore.t('form.NumberHouse')"
@@ -447,7 +455,7 @@
447
455
  @append="openPanel($dataStore.t('form.Region'), [], 'birthRegion', $dataStore.getRegions)"
448
456
  /> -->
449
457
  </base-form-section>
450
- <base-form-section :title="$dataStore.t('form.documentData')" v-if="$dataStore.hasDocumentSection(whichForm)">
458
+ <base-form-section :title="$dataStore.t('form.documentData')">
451
459
  <base-panel-input
452
460
  v-if="gbdDocuments && gbdDocuments.length"
453
461
  value="Список документов из ГБДФЛ"
@@ -461,8 +469,8 @@
461
469
  v-model="member.documentType"
462
470
  :value="member.documentType?.nameRu"
463
471
  :label="$dataStore.t('form.documentType')"
464
- :readonly="isDisabled"
465
- :clearable="!isDisabled"
472
+ :readonly="isDisabled || isDataFromGov"
473
+ :clearable="!isDisabled && !isDataFromGov"
466
474
  :rules="$rules.objectRequired"
467
475
  append-inner-icon="mdi mdi-chevron-right"
468
476
  @append="openPanel($dataStore.t('form.documentType'), [], 'documentType', $dataStore.getDocumentTypes)"
@@ -470,8 +478,8 @@
470
478
  <base-form-input
471
479
  v-model.trim="member.documentNumber"
472
480
  :label="$dataStore.t('form.documentNumber')"
473
- :readonly="isDisabled || !!member.parsedDocument?.documentNumber"
474
- :clearable="!isDisabled"
481
+ :readonly="isDisabled || !!member.parsedDocument?.documentNumber || isDataFromGov"
482
+ :clearable="!isDisabled && !member.parsedDocument?.documentNumber && !isDataFromGov"
475
483
  :rules="$rules.required"
476
484
  />
477
485
  <!-- <base-file-input v-if="!memberDocument" :disabled="isDisabled" :clearable="!isDisabled" @input="attachFile($event)" />
@@ -483,17 +491,42 @@
483
491
  v-model="member.documentIssuers"
484
492
  :value="member.documentIssuers?.nameRu"
485
493
  :label="$dataStore.t('form.documentIssuers')"
486
- :readonly="isDisabled || !!member.parsedDocument?.documentIssuer"
487
- :clearable="!isDisabled"
494
+ :readonly="isDisabled || !!member.parsedDocument?.documentIssuer || isDataFromGov"
495
+ :clearable="!isDisabled && !member.parsedDocument?.documentIssuer && !isDataFromGov"
488
496
  :rules="$rules.objectRequired"
489
497
  append-inner-icon="mdi mdi-chevron-right"
490
498
  @append="openPanel($dataStore.t('form.documentIssuers'), [], 'documentIssuers', $dataStore.getDocumentIssuers)"
491
499
  />
500
+ <base-animation>
501
+ <div v-if="hasIssuerOther" class="flex flex-col gap-[1px]">
502
+ <base-form-input
503
+ v-model="member.documentIssuers.issuerOtherName"
504
+ :label="$dataStore.t('form.issuerOtherName')"
505
+ :readonly="isDisabled"
506
+ :clearable="!isDisabled"
507
+ :rules="$rules.required.concat($rules.onlySymbols)"
508
+ />
509
+ <base-form-input
510
+ v-model="member.documentIssuers.issuerOtherNameOrig"
511
+ :label="$dataStore.t('form.issuerOtherNameOrig')"
512
+ :readonly="isDisabled"
513
+ :clearable="!isDisabled"
514
+ :rules="$rules.required"
515
+ />
516
+ <base-form-input
517
+ v-model="member.documentIssuers.issuerOtherNameRu"
518
+ :label="$dataStore.t('form.issuerOtherNameRu')"
519
+ :readonly="isDisabled"
520
+ :clearable="!isDisabled"
521
+ :rules="$rules.required.concat($rules.cyrillic)"
522
+ />
523
+ </div>
524
+ </base-animation>
492
525
  <base-form-input
493
526
  v-model="member.documentDate"
494
527
  :label="$dataStore.t('form.documentDate')"
495
- :readonly="isDisabled || !!member.parsedDocument?.documentIssueDate"
496
- :clearable="!isDisabled"
528
+ :readonly="isDisabled || !!member.parsedDocument?.documentIssueDate || isDataFromGov"
529
+ :clearable="!isDisabled && !member.parsedDocument?.documentIssueDate && !isDataFromGov"
497
530
  :rules="$rules.required.concat($rules.date)"
498
531
  :maska="$maska.date"
499
532
  append-inner-icon="mdi mdi-calendar-blank-outline"
@@ -503,8 +536,8 @@
503
536
  v-if="member.documentType.ids !== 'SBI'"
504
537
  v-model="member.documentExpire"
505
538
  :label="$dataStore.t('form.documentExpire')"
506
- :readonly="isDisabled || !!member.parsedDocument?.documentExpireDate"
507
- :clearable="!isDisabled"
539
+ :readonly="isDisabled || !!member.parsedDocument?.documentExpireDate || isDataFromGov"
540
+ :clearable="!isDisabled && !member.parsedDocument?.documentExpireDate && !isDataFromGov"
508
541
  :rules="$rules.required.concat($rules.date)"
509
542
  :maska="$maska.date"
510
543
  append-inner-icon="mdi mdi-calendar-blank-outline"
@@ -601,47 +634,19 @@
601
634
  v-model="member.bankInfo.bankName"
602
635
  :value="member.bankInfo.bankName.nameRu"
603
636
  :label="$dataStore.t('clients.form.nameBank')"
604
- :readonly="isDisabled"
605
- :clearable="!isDisabled"
637
+ :readonly="true"
638
+ :clearable="false"
606
639
  :rules="$rules.objectRequired"
607
- append-inner-icon="mdi mdi-chevron-right"
608
- @append="openPanel($dataStore.t('clients.form.nameBank'), [], 'bankInfo', $dataStore.getBanks, '', 'bankName')"
609
640
  />
610
641
  <base-form-input
611
642
  v-model.trim="member.bankInfo.bin"
612
- :label="$dataStore.t('form.bin')"
613
643
  :maska="$maska.iin"
614
- :readonly="isDisabled"
615
- :clearable="!isDisabled"
644
+ :label="$dataStore.t('form.bin')"
645
+ :readonly="true"
646
+ :clearable="false"
616
647
  :rules="$rules.required.concat($rules.iinRight)"
617
648
  />
618
- <base-form-input v-model="member.bankInfo.bik" :label="$dataStore.t('clients.form.bik')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
619
- </base-form-section>
620
- <base-form-section v-if="$dataStore.hasAdditionalDocumentsSection(whichForm)" :title="$dataStore.t('form.phDocuments')">
621
- <base-file-input
622
- :label="$dataStore.t('form.identyDocument')"
623
- :disabled="isDisabled"
624
- :clearable="!isDisabled"
625
- icon="mdi-paperclip"
626
- @input="attachFile($event, '1')"
627
- :rules="$rules.required"
628
- />
629
- <base-file-input
630
- :label="$dataStore.t('form.bankStatement')"
631
- :disabled="isDisabled"
632
- :clearable="!isDisabled"
633
- icon="mdi-paperclip"
634
- @input="attachFile($event, '10')"
635
- :rules="$rules.required"
636
- />
637
- <base-file-input
638
- :label="$dataStore.t('pension.ENPFnote')"
639
- :disabled="isDisabled"
640
- :clearable="!isDisabled"
641
- icon="mdi-paperclip"
642
- @input="attachFile($event, '8')"
643
- :rules="$rules.required"
644
- />
649
+ <base-form-input v-model="member.bankInfo.bik" :label="$dataStore.t('clients.form.bik')" :readonly="true" :clearable="false" :rules="$rules.required" />
645
650
  </base-form-section>
646
651
  <base-form-section :title="$dataStore.t('form.contactsData')" v-if="$dataStore.hasContactSection(whichForm)">
647
652
  <base-form-input
@@ -678,6 +683,7 @@
678
683
  <base-btn v-if="hasGBDFL" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromGBDFL')" @click="getContragentFromGBDFL" />
679
684
  <base-btn v-if="hasInsis" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromInsis')" @click="getContragent" />
680
685
  <base-btn v-if="hasGKB" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromGKB')" @click="getFamilyInfo" />
686
+ <base-btn v-if="isNonResident" :loading="isButtonLoading" :text="$dataStore.t('buttons.searchByFio')" @click="getContragent" />
681
687
  <base-form-section v-if="hasDocumentReader" class="!mt-0">
682
688
  <base-file-input
683
689
  :disabled="isDisabled"
@@ -702,18 +708,16 @@
702
708
  </Teleport>
703
709
  <Teleport v-if="isOtpPanelOpen && !member.hasAgreement" to="#right-panel-actions">
704
710
  <div :class="[$styles.flexColNav]">
705
- <base-fade-transition>
706
- <base-rounded-input
707
- v-if="otpCondition && member.otpTokenId"
708
- v-model="member.otpCode"
709
- :label="$dataStore.t('form.otpCode')"
710
- :maska="$maska.otp"
711
- :append-inner-icon="hasOtp ? 'mdi-cellphone-message text-[17px]' : ''"
712
- hide-details
713
- @keyup.enter.prevent="hasOtp ? checkOtp() : null"
714
- @input="onOtpCodeInput"
715
- />
716
- </base-fade-transition>
711
+ <base-animation>
712
+ <div v-if="otpCondition && member.otpTokenId" class="flex flex-col">
713
+ <base-form-section class="mt-0 py-2">
714
+ <base-otp-input v-model="member.otpCode" :length="4" @keyup.enter.prevent="hasOtp && checkOtp()" @input="onOtpCodeInput" />
715
+ </base-form-section>
716
+ <span class="text-center cursor-pointer mt-2" :class="[$styles.mutedText]" @click="sendOtp(false)"
717
+ >Не получили код? <span class="underline underline-offset-2">Отправить код заново</span></span
718
+ >
719
+ </div>
720
+ </base-animation>
717
721
  <base-btn v-if="!member.otpTokenId" :disabled="otpSending" :loading="otpSending" :text="$dataStore.t('buttons.sendOtp')" @click="sendOtp(false)" />
718
722
  <base-btn v-if="member.otpTokenId" :disabled="otpSending" :loading="otpSending" :text="$dataStore.t('buttons.check')" @click="checkOtp()" />
719
723
  </div>
@@ -721,12 +725,12 @@
721
725
  <Teleport v-if="isPositionPanelOpen" to="#right-panel-actions">
722
726
  <div :class="[$styles.scrollPage]" class="flex flex-col items-center">
723
727
  <base-rounded-input
724
- v-model="searchQuery"
725
- :label="$dataStore.t('labels.search')"
728
+ v-model.trim="searchQuery"
729
+ label="Выполните поиск должностей"
726
730
  class="w-full p-2"
727
731
  :hide-details="searchQuery.length >= 4"
728
- :rules="[searchQuery.length < 4 ? $dataStore.t('rules.searchQueryLen', { len: '4' }) : true]"
729
- :append-inner-icon="searchQuery.length < 4 ? '' : 'mdi mdi-magnify'"
732
+ :rules="[searchQuery.length < 4 ? $dataStore.t('rules.searchQueryLen', { len: 4 }) : true]"
733
+ append-inner-icon="mdi mdi-magnify"
730
734
  @append="searchPositions"
731
735
  />
732
736
  <base-animation>
@@ -783,6 +787,27 @@
783
787
  <base-list-empty class="w-full" v-else @click="documentChooseDialog = false" />
784
788
  </template>
785
789
  </base-dialog>
790
+ <base-dialog
791
+ v-model="fioChooseDialog"
792
+ :title="$dataStore.t('pension.contragentSelect')"
793
+ :icon="{ mdi: 'format-list-bulleted-type', color: '#A0B3D8' }"
794
+ actions="fioChooseDialog"
795
+ :persistent="false"
796
+ >
797
+ <template #actions>
798
+ <v-list lines="two" v-if="contragents && contragents.length" class="w-full !py-0">
799
+ <v-list-item v-for="person of contragents" :key="person.id" @click="getContragentClick(person)">
800
+ <v-list-item-title :class="[$styles.greenText, $styles.textTitle]">
801
+ {{ person.longName }}
802
+ </v-list-item-title>
803
+ <v-list-item-subtitle :class="[$styles.textSimple]">
804
+ {{ reformatDate(person.birthDate) }} - {{ person.genderName }} - Рег: {{ reformatDate(person.registrationDate) }}
805
+ </v-list-item-subtitle>
806
+ </v-list-item>
807
+ </v-list>
808
+ <base-list-empty class="w-full" v-else @click="fioChooseDialog = false" />
809
+ </template>
810
+ </base-dialog>
786
811
  </section>
787
812
  <base-scroll-buttons @up="scrollForm('up')" @down="scrollForm('down')" />
788
813
  </template>
@@ -790,7 +815,8 @@
790
815
  <script lang="ts">
791
816
  import { Value, DocumentItem, Member } from '../../composables/classes';
792
817
  import { uuid } from 'vue-uuid';
793
- import { StoreMembers, Enums } from '../../types/enum';
818
+ import { StoreMembers, CoreEnums } from '../../types/enum';
819
+ import type { Api, ContragentType, Dicts, ESBDValidationType, FileActions, MultipleMember } from '../../types';
794
820
 
795
821
  export default {
796
822
  setup() {
@@ -802,7 +828,8 @@ export default {
802
828
  const memberStore = useMemberStore();
803
829
  const whichForm = computed(() => route.query.tab as keyof typeof StoreMembers);
804
830
  const whichIndex = computed(() => route.query.i as string);
805
- const getMember = (whichForm: keyof typeof StoreMembers, whichIndex?: string) => memberStore.getMemberFromStore(whichForm, Number((whichIndex ? whichIndex : '0') as string))!;
831
+ const getMember = (whichForm: keyof typeof StoreMembers | 'slaveInsuredForm', whichIndex?: string) =>
832
+ memberStore.getMemberFromStore(whichForm, Number((whichIndex ? whichIndex : '0') as string))!;
806
833
  const member = ref(getMember(whichForm.value, whichIndex.value));
807
834
  const selectedFamilyMember = ref<Api.GKB.BirthInfo>({});
808
835
  const isPanelOpen = ref<boolean>(false);
@@ -817,9 +844,12 @@ export default {
817
844
  const isPositionPanelOpen = ref<boolean>(false);
818
845
  const isPanelLoading = ref<boolean>(false);
819
846
  const isChangingMember = ref<boolean>(false);
847
+ const isNonResident = computed(() => dataStore.isPension && member.value.signOfResidency.ids === '500011.2');
848
+ const isDataFromGov = computed(() => member.value.verifyType === 'GBDFL' || member.value.verifyType === 'ESBD' || !!member.value.gosPersonData);
820
849
  const familyDialog = ref<boolean>(false);
821
850
  const deletionDialog = ref<boolean>(false);
822
851
  const documentChooseDialog = ref<boolean>(false);
852
+ const fioChooseDialog = ref<boolean>(false);
823
853
  const selectedIndex = ref<number>(0);
824
854
  const sameAddress = ref<boolean>(false);
825
855
  const panelValue = ref<Value>(new Value());
@@ -830,6 +860,8 @@ export default {
830
860
  const fileData = ref<{ file: any }>();
831
861
  const imageDataList = ref<string[]>([]);
832
862
  const isRelative = ref<boolean>(false);
863
+ const additionalDocuments = ref<any[]>([]);
864
+ const contragents = ref<ContragentType[]>([]);
833
865
 
834
866
  const currentPanelDeep = ref<string>();
835
867
  const currentPanelSubDeep = ref<string>();
@@ -839,7 +871,6 @@ export default {
839
871
  const isDisabled = computed(() => !memberStore.isStatementEditible(whichForm.value));
840
872
  const isTask = computed(() => route.params.taskId === '0' || dataStore.isTask());
841
873
  const isIinPhoneDisabled = computed(() => member.value.hasAgreement);
842
- const isFromGBD = computed(() => !!member.value.gosPersonData);
843
874
  const gbdDocuments = computed(() => {
844
875
  if (hasGBDFLDocSelection && !!member.value.gosPersonData && !!member.value.gosPersonData.documents) {
845
876
  const documents = Array.isArray(member.value.gosPersonData.documents.document)
@@ -865,6 +896,7 @@ export default {
865
896
  case formStore.policyholdersRepresentativeFormKey:
866
897
  return route.params.taskId !== '0';
867
898
  default:
899
+ if (route.query.tab === 'slaveInsuredForm') return true;
868
900
  return false;
869
901
  }
870
902
  };
@@ -901,7 +933,7 @@ export default {
901
933
  };
902
934
  return dataStore.isAULETTI || dataStore.isAulettiParent ? false : dataStore.controls.hasGBDFL && perMemberCondition();
903
935
  });
904
- const hasGBDFLDocSelection = dataStore.isLifetrip && whichForm.value === formStore.policyholderFormKey;
936
+ const hasGBDFLDocSelection = dataStore.isLifetrip;
905
937
  const hasInsis = computed(() => dataStore.controls.hasInsis);
906
938
  const hasGKB = computed(() => {
907
939
  const perMemberCondition = () => {
@@ -972,7 +1004,8 @@ export default {
972
1004
  (whichForm.value === formStore.beneficiaryFormKey && member.value.iin !== formStore.policyholderForm.iin) ||
973
1005
  (dataStore.isLifetrip && whichForm.value === formStore.insuredFormKey && member.value.isInsuredUnderage),
974
1006
  );
975
- const hasWorkPositionDict = !useEnv().isProduction && dataStore.isBaiterek && dataStore.isEfoParent;
1007
+ const hasWorkPositionDict = dataStore.isBaiterek;
1008
+ const hasIssuerOther = computed(() => (useEnv().isProduction ? dataStore.isPension : true) && member.value.documentIssuers && member.value.documentIssuers.nameRu === 'Другое');
976
1009
 
977
1010
  const birthDateRule = computed(() => {
978
1011
  const baseDateRule = dataStore.rules.required.concat(dataStore.rules.birthDate);
@@ -1047,16 +1080,18 @@ export default {
1047
1080
  });
1048
1081
 
1049
1082
  const getOtpConditionByMember = () => {
1050
- switch (whichForm.value) {
1083
+ const which = whichForm.value as keyof typeof StoreMembers | 'slaveInsuredForm';
1084
+ switch (which) {
1051
1085
  case formStore.policyholderFormKey:
1052
1086
  return route.params.taskId === '0';
1053
1087
  case formStore.insuredFormKey:
1054
- if (dataStore.isPension) return route.params.taskId === '0';
1055
- return route.query.id === '0';
1088
+ case 'slaveInsuredForm':
1056
1089
  case formStore.policyholdersRepresentativeFormKey:
1057
1090
  case formStore.beneficiaryFormKey:
1058
1091
  case formStore.beneficialOwnerFormKey:
1059
1092
  return route.query.id === '0';
1093
+ default:
1094
+ return dataStore.isPension && route.query.id === '0' && formStore.applicationData.processCode === 24;
1060
1095
  }
1061
1096
  };
1062
1097
  const otpCondition = computed(() => {
@@ -1065,6 +1100,7 @@ export default {
1065
1100
  if (whichForm.value === formStore.beneficiaryFormKey && member.value.age !== null && Number(member.value.age) < 18) return false;
1066
1101
  if (dataStore.isLifetrip && whichForm.value === formStore.insuredFormKey && member.value.isInsuredUnderage) return false;
1067
1102
  if (!member.value.phoneNumber || (member.value.phoneNumber && member.value.phoneNumber.length !== useMask().phone.length)) return false;
1103
+ if (route.query.tab === 'slaveInsuredForm' && route.query.id === '0') return true;
1068
1104
  return getOtpConditionByMember();
1069
1105
  });
1070
1106
 
@@ -1084,6 +1120,10 @@ export default {
1084
1120
  };
1085
1121
 
1086
1122
  const searchPositions = async () => {
1123
+ if (searchQuery.value.length < 4) {
1124
+ dataStore.showToaster('error', dataStore.t('rules.searchQueryLen', { len: 4 }));
1125
+ return;
1126
+ }
1087
1127
  if (!isDisabled.value) {
1088
1128
  isPanelLoading.value = true;
1089
1129
  positionsList.value = await dataStore.getWorkPosition(searchQuery.value);
@@ -1122,6 +1162,7 @@ export default {
1122
1162
  isPositionPanelOpen.value = false;
1123
1163
  }
1124
1164
  if (type === 'workPosition') {
1165
+ dataStore.rightPanel.title = dataStore.t('form.jobPosition');
1125
1166
  isPositionPanelOpen.value = true;
1126
1167
  isOtpPanelOpen.value = false;
1127
1168
  isDocumentOpen.value = false;
@@ -1251,12 +1292,35 @@ export default {
1251
1292
  }
1252
1293
  };
1253
1294
 
1254
- const attachFile = (event: InputEvent, code?: string) => {
1295
+ const uploadAdditionalFiles = async (processInstanceId: string | number) => {
1296
+ const formData = new FormData();
1297
+ const information: any = [];
1298
+ const uuidV4 = uuid.v4();
1299
+ if (additionalDocuments.value) {
1300
+ Object.values(additionalDocuments.value).map((value: any) => {
1301
+ formData.append('file', value);
1302
+ const ext = value.name.substring(value.name.lastIndexOf('.'));
1303
+ const selectedDocument = dataStore.dicFileTypeList.find((i: Value) => i.code === value.code);
1304
+ information.push({
1305
+ identifier: `${uuidV4}${ext}`,
1306
+ iin: member.value.iin ? member.value.iin.replaceAll('-', '') : null,
1307
+ processInstanceId: processInstanceId,
1308
+ fileTypeCode: selectedDocument ? selectedDocument.code : null,
1309
+ fileTypeId: selectedDocument ? selectedDocument.id : null,
1310
+ fileName: value.name,
1311
+ });
1312
+ });
1313
+ formData.append('fileData', JSON.stringify(information));
1314
+ await dataStore.uploadFiles(formData, false);
1315
+ }
1316
+ };
1317
+
1318
+ const attachFile = (event: InputEvent) => {
1255
1319
  if (event.target) {
1256
- fileData.value = code ? { file: (event.target as HTMLInputElement).files } : { file: (event.target as HTMLInputElement).files };
1320
+ fileData.value = { file: (event.target as HTMLInputElement).files };
1257
1321
  } else {
1258
1322
  if (event.dataTransfer) {
1259
- fileData.value = code ? { file: (event.dataTransfer as DataTransfer).files } : { file: (event.dataTransfer as DataTransfer).files };
1323
+ fileData.value = { file: (event.dataTransfer as DataTransfer).files };
1260
1324
  }
1261
1325
  }
1262
1326
  };
@@ -1325,7 +1389,7 @@ export default {
1325
1389
  if (parsedDocument.middleName) member.value.middleName = parsedDocument.middleName;
1326
1390
  if (parsedDocument.fullName) member.value.longName = parsedDocument.fullName;
1327
1391
  if (parsedDocument.documentName && parsedDocument.documentName.startsWith('Kazakhstan - Id Card')) {
1328
- const documentType = dataStore.documentTypes.find((i: Value) => i.ids === Enums.Insis.DocTypes['1UDL']);
1392
+ const documentType = dataStore.documentTypes.find((i: Value) => i.ids === CoreEnums.Insis.DocTypes['1UDL']);
1329
1393
  if (documentType) member.value.documentType = documentType;
1330
1394
  }
1331
1395
  if (!!parsedDocument.documentIssuer) {
@@ -1429,7 +1493,9 @@ export default {
1429
1493
 
1430
1494
  const selectGbdDocument = (document: Api.GBD.Document) => {
1431
1495
  if (document) {
1432
- const documentType = dataStore.documentTypes.find((i: Value) => i.ids === Object.keys(Enums.GBD.DocTypes)[Object.values(Enums.GBD.DocTypes).indexOf(document.type.code)]);
1496
+ const documentType = dataStore.documentTypes.find(
1497
+ (i: Value) => i.ids === Object.keys(CoreEnums.GBD.DocTypes)[Object.values(CoreEnums.GBD.DocTypes).indexOf(document.type.code)],
1498
+ );
1433
1499
  if (documentType) member.value.documentType = documentType;
1434
1500
  const documentNumber = document.number;
1435
1501
  if (documentNumber) member.value.documentNumber = documentNumber;
@@ -1446,21 +1512,46 @@ export default {
1446
1512
  isSearchOpen.value = false;
1447
1513
  };
1448
1514
 
1515
+ const getContragentClick = async (contragent: ContragentType) => {
1516
+ isButtonLoading.value = true;
1517
+ await dataStore.serializeContragentData(member.value, contragent);
1518
+ fioChooseDialog.value = false;
1519
+ isButtonLoading.value = false;
1520
+ dataStore.rightPanel.open = false;
1521
+ isSearchOpen.value = false;
1522
+ };
1523
+
1449
1524
  const getContragent = async () => {
1450
- if (member.value.hasAgreement !== true) {
1451
- dataStore.showToaster('error', dataStore.t('toaster.needAgreement'), 3000);
1452
- dataStore.rightPanel.open = false;
1453
- isSearchOpen.value = false;
1454
- return;
1455
- }
1456
- if (!member.value.iin || member.value.iin.length !== useMask().iin.length) {
1457
- dataStore.showToaster('error', dataStore.t('toaster.errorFormField', { text: 'ИИН' }), 5000);
1458
- dataStore.rightPanel.open = false;
1459
- isSearchOpen.value = false;
1460
- return;
1525
+ if (isNonResident.value) {
1526
+ if (!member.value.lastName || !member.value.firstName) {
1527
+ dataStore.showToaster('error', 'Заполните поля Имя и Фамилия', 3000);
1528
+ dataStore.rightPanel.open = false;
1529
+ isSearchOpen.value = false;
1530
+ return;
1531
+ }
1532
+ } else {
1533
+ if (member.value.hasAgreement !== true) {
1534
+ dataStore.showToaster('error', dataStore.t('toaster.needAgreement'), 3000);
1535
+ dataStore.rightPanel.open = false;
1536
+ isSearchOpen.value = false;
1537
+ return;
1538
+ }
1539
+ if (!member.value.iin || member.value.iin.length !== useMask().iin.length) {
1540
+ dataStore.showToaster('error', dataStore.t('toaster.errorFormField', { text: 'ИИН' }), 5000);
1541
+ dataStore.rightPanel.open = false;
1542
+ isSearchOpen.value = false;
1543
+ return;
1544
+ }
1461
1545
  }
1462
1546
  isButtonLoading.value = true;
1463
- await dataStore.getContragent(member.value, false);
1547
+ if (isNonResident.value) {
1548
+ const response = await dataStore.getContragent(member.value, false);
1549
+ if (response) contragents.value = response.items;
1550
+ else dataStore.showToaster('error', 'Не найдено совпадений', 3000);
1551
+ fioChooseDialog.value = true;
1552
+ } else {
1553
+ await dataStore.getContragent(member.value, false);
1554
+ }
1464
1555
  isButtonLoading.value = false;
1465
1556
  dataStore.rightPanel.open = false;
1466
1557
  isSearchOpen.value = false;
@@ -1496,10 +1587,11 @@ export default {
1496
1587
  }
1497
1588
  const isInsured = formStore.isPolicyholderInsured;
1498
1589
  const remoteIsInsured = ref<boolean | null>(null);
1590
+ const isNewApplication = route.params.taskId === '0';
1499
1591
  if (whichForm.value == formStore.policyholderFormKey || (dataStore.isPension && whichForm.value == formStore.insuredFormKey)) {
1500
1592
  if (route.params.taskId === '0') {
1501
1593
  try {
1502
- const taskId = await dataStore.startApplication(member.value, dataStore.isPension ? (String(route.query.type) === 'joint' ? 4 : 19) : undefined);
1594
+ const taskId = await dataStore.startApplication(member.value, dataStore.isPension ? (String(route.query.type) === 'joint' ? 25 : 19) : undefined);
1503
1595
  if (typeof taskId === 'string') {
1504
1596
  await dataStore.getApplicationData(taskId, false, false, false, false);
1505
1597
  remoteIsInsured.value = formStore.applicationData.clientApp.isInsured;
@@ -1523,6 +1615,13 @@ export default {
1523
1615
  if (fileData.value && fileData.value.file) {
1524
1616
  await uploadFile(formStore.applicationData.processInstanceId);
1525
1617
  }
1618
+ if (additionalDocuments.value && additionalDocuments.value.length) {
1619
+ if (
1620
+ (!formStore.applicationData.isEnpfSum && formStore.applicationData?.pensionApp.transferContracts && formStore.applicationData?.pensionApp.transferContracts.length) ||
1621
+ (formStore.applicationData?.pensionApp.compulsoryProfMonthCount && formStore.applicationData?.pensionApp.compulsoryProfMonthCount >= 60)
1622
+ )
1623
+ await uploadAdditionalFiles(formStore.applicationData.processInstanceId);
1624
+ }
1526
1625
  }
1527
1626
  const memberFromApplicaiton = memberStore.getMemberFromApplication(whichForm.value, whichIndex.value ? Number(whichIndex.value) : undefined);
1528
1627
  if (typeof member.value.id !== 'number' || (typeof member.value.id === 'number' && member.value.id > 0 === false)) {
@@ -1546,30 +1645,37 @@ export default {
1546
1645
  }
1547
1646
  }
1548
1647
  }
1549
- if (whichForm.value === formStore.insuredFormKey) {
1648
+ if (whichForm.value === formStore.insuredFormKey || memberFromApplicaiton.processInstanceId === formStore.applicationData.slave?.processInstanceId) {
1550
1649
  wasInsuredAction.value = true;
1551
1650
  if (dataStore.isPension) {
1552
- formStore.applicationData.pensionApp = {
1651
+ let data = {
1553
1652
  ...formStore.applicationData.pensionApp,
1554
- account: member.value.bankInfo.iik,
1555
- bankBik: member.value.bankInfo.bik,
1556
- bankBin: member.value.bankInfo.bankName.ids,
1557
- bankId: member.value.bankInfo.bankName.id,
1558
- bankName: member.value.bankInfo.bankName.nameRu,
1559
- guaranteedPeriod: 0,
1560
- amount: 0,
1561
- compulsoryContractAmount: 0,
1562
- voluntaryContractAmount: 0,
1563
- ownFundsRaisAmount: 0,
1564
- compulsoryProfContractAmount: 0,
1653
+ slave: formStore.applicationData.slave?.pensionApp ?? undefined,
1565
1654
  };
1566
- const data = {
1567
- ...formStore.applicationData.pensionApp,
1568
- transferContractCompany: formStore.applicationData.pensionApp.transferContractCompany?.nameRu ?? null,
1655
+ const bankinfo = {
1656
+ account: member.value.bankInfo.iik ?? '',
1657
+ bankBik: member.value.bankInfo.bik ?? '',
1658
+ bankBin: member.value.bankInfo.bin ? String(member.value.bankInfo.bin).replaceAll('-', '') : '',
1659
+ bankId: Number(member.value.bankInfo.bankName.id) ?? 0,
1660
+ bankName: member.value.bankInfo.bankName.nameRu ?? '',
1569
1661
  };
1662
+ if (route.query.tab === 'slaveInsuredForm') {
1663
+ data.slave = { ...data.slave, ...bankinfo };
1664
+ } else {
1665
+ data = { ...data, ...bankinfo };
1666
+ }
1667
+ const pensionKeysWithSpace = ['compulsoryContractAmount', 'compulsoryProfContractAmount', 'voluntaryContractAmount', 'ownFundsRaisAmount'];
1668
+ pensionKeysWithSpace.forEach(key => {
1669
+ if (/\s/g.test(data[key]) === true) data[key] = formatSpacedNumber(data[key]);
1670
+ });
1671
+ if (data.slave)
1672
+ pensionKeysWithSpace.forEach(key => {
1673
+ if (/\s/g.test(data.slave[key]) === true) data.slave[key] = dataStore.getNumberWithSpaces(data.slave[key]);
1674
+ });
1570
1675
  const isApplicationSaved = await dataStore.setApplication(data);
1676
+ if (!isNewApplication) dataStore.showToaster('info', dataStore.t('toaster.needToRecalculate'), 5000);
1571
1677
  if (isApplicationSaved === false) return;
1572
- dataStore.showToaster('info', dataStore.t('toaster.needToRecalculate'), 5000);
1678
+ await dataStore.saveMember(member.value, 'Client', memberFromApplicaiton);
1573
1679
  }
1574
1680
  }
1575
1681
  await router.replace({
@@ -1608,6 +1714,7 @@ export default {
1608
1714
  }
1609
1715
  }
1610
1716
  if (member.value.hasAgreement !== true) {
1717
+ if (isNonResident.value) return true;
1611
1718
  dataStore.showToaster('error', dataStore.t('toaster.needAgreement'));
1612
1719
  return false;
1613
1720
  }
@@ -1622,8 +1729,12 @@ export default {
1622
1729
  isSubmittingForm.value = true;
1623
1730
  const docType = member.value.documentType.ids;
1624
1731
  if (
1732
+ !isNonResident.value &&
1625
1733
  member.value.gotFromInsis === true &&
1626
- (docType === Enums.Insis.DocTypes['1UDL'] || docType === Enums.Insis.DocTypes.SBI || docType === Enums.Insis.DocTypes.PS || docType === Enums.Insis.DocTypes.VNZ)
1734
+ (docType === CoreEnums.Insis.DocTypes['1UDL'] ||
1735
+ docType === CoreEnums.Insis.DocTypes.SBI ||
1736
+ docType === CoreEnums.Insis.DocTypes.PS ||
1737
+ docType === CoreEnums.Insis.DocTypes.VNZ)
1627
1738
  ) {
1628
1739
  dataStore.isLoading = true;
1629
1740
  const docTypeCodes = {
@@ -1653,11 +1764,11 @@ export default {
1653
1764
  isSubmittingForm.value = false;
1654
1765
  return;
1655
1766
  }
1656
- if (formStore.applicationData.pensionApp) {
1657
- formStore.applicationData.pensionApp.account = member.value.bankInfo.iik;
1658
- formStore.applicationData.pensionApp.bankBik = member.value.bankInfo.bik;
1659
- formStore.applicationData.pensionApp.bankBin = member.value.bankInfo.bin;
1660
- formStore.applicationData.pensionApp.bankId = member.value.bankInfo.bankName.id;
1767
+ if (formStore.pensionApp && whichForm.value === 'insuredForm') {
1768
+ formStore.pensionApp.account = member.value.bankInfo.iik;
1769
+ formStore.pensionApp.bankBik = member.value.bankInfo.bik;
1770
+ formStore.pensionApp.bankBin = member.value.bankInfo.bin;
1771
+ formStore.pensionApp.bankId = Number(member.value.bankInfo.bankName.id);
1661
1772
  }
1662
1773
  }
1663
1774
  const hasMemberSaved = await saveMember();
@@ -1665,6 +1776,23 @@ export default {
1665
1776
  dataStore.isLoading = false;
1666
1777
  dataStore.showToaster('error', errorMessage, 5000);
1667
1778
  }
1779
+ } else if (isNonResident.value) {
1780
+ if (member.value.bankInfo.iik.length === useMask().iik.length) {
1781
+ const isValidIik = await dataStore.checkAccountNumber(member.value.bankInfo.iik);
1782
+ if (isValidIik === false) {
1783
+ dataStore.showToaster('error', dataStore.t('error.notValidIik'));
1784
+ member.value.bankInfo.iik = '';
1785
+ isSubmittingForm.value = false;
1786
+ return;
1787
+ }
1788
+ if (formStore.pensionApp && whichForm.value === 'insuredForm') {
1789
+ formStore.pensionApp.account = member.value.bankInfo.iik;
1790
+ formStore.pensionApp.bankBik = member.value.bankInfo.bik;
1791
+ formStore.pensionApp.bankBin = member.value.bankInfo.bin;
1792
+ formStore.pensionApp.bankId = Number(member.value.bankInfo.bankName.id);
1793
+ }
1794
+ }
1795
+ const hasMemberSaved = await saveMember();
1668
1796
  } else {
1669
1797
  member.value.gotFromInsis = true;
1670
1798
  const hasMemberSaved = await saveMember();
@@ -1818,14 +1946,21 @@ export default {
1818
1946
  }
1819
1947
  if (!member.value.id) {
1820
1948
  await router.replace({ query: { ...route.query, id: 0 } });
1949
+ if (dataStore.isPension) {
1950
+ switch (whichForm.value) {
1951
+ case formStore.insuredFormKey:
1952
+ setSignOfResidency();
1953
+ break;
1954
+ }
1955
+ }
1821
1956
  } else {
1822
1957
  if (route.query.id !== String(member.value.id)) await router.replace({ query: { ...route.query, id: member.value.id } });
1823
1958
  if (dataStore.isLifetrip) {
1824
1959
  const documentByPriority = (() => {
1825
1960
  if (whichForm.value !== formStore.policyholderFormKey || formStore.isPolicyholderInsured === true) {
1826
- return member.value.documentsList.find(i => i.type === Enums.Insis.DocTypes.PS);
1961
+ return member.value.documentsList.find(i => i.type === CoreEnums.Insis.DocTypes.PS);
1827
1962
  }
1828
- return member.value.documentsList.find(i => i.type === Enums.Insis.DocTypes['1UDL']);
1963
+ return member.value.documentsList.find(i => i.type === CoreEnums.Insis.DocTypes['1UDL']);
1829
1964
  })();
1830
1965
  const userDocument = documentByPriority ? documentByPriority : member.value.documentsList[0];
1831
1966
  const documentType = dataStore.documentTypes.find((i: Value) => i.ids === userDocument.type);
@@ -1836,12 +1971,10 @@ export default {
1836
1971
  member.value.documentDate = reformatDate(userDocument.issueDate);
1837
1972
  member.value.documentExpire = reformatDate(userDocument.expireDate);
1838
1973
  }
1839
-
1840
1974
  // const filteredDocuments: DocumentItem[] = dataStore.getFilesByIIN(member.value.iin!.replace(/-/g, '')) as DocumentItem[];
1841
1975
  // if (filteredDocuments && filteredDocuments.length) memberDocument.value = filteredDocuments[0];
1842
1976
  }
1843
1977
  await setDefaultValues();
1844
- if (Number(formStore.applicationData.processCode) === 4) dataStore.members.insuredApp.isMultiple = true;
1845
1978
  if (hasWorkPositionDict && member.value.positionCode === null) member.value.jobPosition = null;
1846
1979
  };
1847
1980
  onMounted(async () => {
@@ -1890,8 +2023,17 @@ export default {
1890
2023
  },
1891
2024
  );
1892
2025
 
2026
+ watch(
2027
+ () => member.value.registrationProvince,
2028
+ (val, oldVal) => {
2029
+ if (val.nameRu !== null && val.nameRu !== oldVal.nameRu && val.ids !== member.value.registrationCity.code) {
2030
+ member.value.registrationCity = new Value();
2031
+ }
2032
+ },
2033
+ );
2034
+
1893
2035
  const onIinInput = () => {
1894
- if (!!member.value.iin && member.value.iin.length === useMask().iin.length && memberSetting.value.isMultiple === true) {
2036
+ if (!!member.value.iin && member.value.iin.length === useMask().iin.length && memberSetting.value?.isMultiple === true) {
1895
2037
  const alreadyInStatement = formStore[whichForm.value as MultipleMember].findIndex((i: Member) => i.iin === member.value.iin);
1896
2038
  if (alreadyInStatement !== -1 && alreadyInStatement !== Number(whichIndex.value)) {
1897
2039
  dataStore.showToaster('error', dataStore.t('toaster.hasAlreadyMember'), 3000);
@@ -1932,13 +2074,14 @@ export default {
1932
2074
  watch(
1933
2075
  () => member.value.age,
1934
2076
  val => {
1935
- if (val && Number(val) >= 18) {
1936
- if (member.value.hasAgreement !== true) {
2077
+ if (val) {
2078
+ if (Number(val) >= 18 && member.value.hasAgreement !== true) {
1937
2079
  member.value.hasAgreement = false;
2080
+ } else {
2081
+ member.value.hasAgreement = true;
1938
2082
  }
1939
- } else {
1940
- member.value.hasAgreement = true;
1941
2083
  }
2084
+
1942
2085
  member.value.isInsuredUnderage = Number(val) >= 18 ? false : true;
1943
2086
  },
1944
2087
  { immediate: true },
@@ -1954,15 +2097,35 @@ export default {
1954
2097
  );
1955
2098
  }
1956
2099
  if (dataStore.isPension) {
1957
- watch(
1958
- () => member.value.bankInfo.bankName,
1959
- val => {
1960
- if (val) {
1961
- member.value.bankInfo.bik = val.code as string;
1962
- member.value.bankInfo.bin = reformatIin(val.ids as string);
1963
- }
1964
- },
1965
- );
2100
+ if (member.value.bankInfo) {
2101
+ watch(
2102
+ () => member.value.bankInfo.iik,
2103
+ async val => {
2104
+ if (val && val.length === 20) {
2105
+ if (
2106
+ route.query.tab === 'slaveInsuredForm'
2107
+ ? formStore.insuredForm.some(i => i.bankInfo.iik === val)
2108
+ : formStore.applicationData.processCode === 25 && val === formStore.slaveInsuredForm.bankInfo.iik
2109
+ ) {
2110
+ dataStore.showToaster('error', `ИИК: "${val}" уже имеется в заявке`);
2111
+ member.value.bankInfo = new BankInfoClass();
2112
+ return;
2113
+ }
2114
+ isButtonLoading.value = true;
2115
+ const bank = await dataStore.getBankByAccountNumber(val);
2116
+ if (bank) {
2117
+ member.value.bankInfo.bik = String(bank.code);
2118
+ member.value.bankInfo.bin = member.value.bankInfo.bankName.ids = reformatIin(String(bank.ids));
2119
+ member.value.bankInfo.bankName.nameRu = String(bank.nameRu);
2120
+ member.value.bankInfo.bankName.id = Number(bank.id);
2121
+ } else member.value.bankInfo = new BankInfoClass();
2122
+ isButtonLoading.value = false;
2123
+ } else if (!val) {
2124
+ member.value.bankInfo = new BankInfoClass();
2125
+ }
2126
+ },
2127
+ );
2128
+ }
1966
2129
  watch(
1967
2130
  () => member.value.isDisability,
1968
2131
  val => {
@@ -1999,11 +2162,13 @@ export default {
1999
2162
  familyDialog,
2000
2163
  deletionDialog,
2001
2164
  documentChooseDialog,
2165
+ fioChooseDialog,
2002
2166
  selectedIndex,
2003
2167
  selectedFamilyMember,
2004
2168
  sameAddress,
2005
2169
  isRelative,
2006
2170
  imageDataList,
2171
+ contragents,
2007
2172
  // Computed
2008
2173
  whichForm,
2009
2174
  whichIndex,
@@ -2013,7 +2178,6 @@ export default {
2013
2178
  isDisabled,
2014
2179
  isTask,
2015
2180
  isIinPhoneDisabled,
2016
- isFromGBD,
2017
2181
  showSaveButton,
2018
2182
  hasGBDFL,
2019
2183
  hasInsis,
@@ -2025,10 +2189,13 @@ export default {
2025
2189
  hasInsurancePay,
2026
2190
  hasSignOfIPDL,
2027
2191
  hasSameAddressToggle,
2192
+ hasIssuerOther,
2028
2193
  hasMemberSearch,
2029
2194
  hasWorkPositionDict,
2030
2195
  gbdDocuments,
2031
2196
  hasGBDFLDocSelection,
2197
+ isNonResident,
2198
+ isDataFromGov,
2032
2199
 
2033
2200
  // Rules
2034
2201
  ageRule,
@@ -2062,6 +2229,7 @@ export default {
2062
2229
  searchPositions,
2063
2230
  selectGbdDocument,
2064
2231
  pickPosition,
2232
+ getContragentClick,
2065
2233
  };
2066
2234
  },
2067
2235
  };