hl-core 0.0.10-beta.50 → 0.0.10-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.
package/api/base.api.ts CHANGED
@@ -285,6 +285,13 @@ export class ApiClass {
285
285
  });
286
286
  }
287
287
 
288
+ async getProcessDividendPeriods(processCode: string | number) {
289
+ return await this.axiosCall<Value[]>({
290
+ method: Methods.GET,
291
+ url: `/Arm/api/Dictionary/ProcessDividendPeriod/${processCode}`,
292
+ });
293
+ }
294
+
288
295
  async getContragentById(id: number) {
289
296
  return await this.axiosCall<Types.GetContragentResponse>({
290
297
  method: Methods.GET,
@@ -705,10 +712,10 @@ export class ApiClass {
705
712
  });
706
713
  }
707
714
 
708
- async getContractIdByNumber(insuranceTypeEnum: number, policyNo: string) {
715
+ async getGlobalIdByNumber(insuranceTypeEnum: number, policyNo: string) {
709
716
  return await this.axiosCall<number>({
710
717
  method: Methods.GET,
711
- url: `/Ekk/api/PolicyInsis/GetContractIDbyNumber`,
718
+ url: `/Ekk/api/PolicyInsis/GetGlobalIDbyNumber`,
712
719
  params: {
713
720
  insuranceTypeEnum,
714
721
  policyNo,
@@ -1132,6 +1139,17 @@ export class ApiClass {
1132
1139
  data: data,
1133
1140
  });
1134
1141
  },
1142
+ getDividendSchedule: async (processInstanceId: string | number) => {
1143
+ return await this.axiosCall<{
1144
+ scheduleDividend: Value[] | null;
1145
+ scheduleDividend2: Value[] | null;
1146
+ }>({
1147
+ method: Methods.GET,
1148
+ baseURL: getStrValuePerEnv('efoBaseApi'),
1149
+ url: `${this.pensionannuityNew.base}/GetDividendSchedule`,
1150
+ params: { processInstanceId: processInstanceId },
1151
+ });
1152
+ },
1135
1153
  };
1136
1154
 
1137
1155
  externalServices = {
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <v-list lines="two" v-if="formStore.birthInfos && formStore.birthInfos.length" class="w-full !py-0">
2
+ <v-list lines="two" v-if="(formStore.birthInfos && formStore.birthInfos.length) || $dataStore.isGons" class="w-full !py-0">
3
3
  <v-list-item
4
4
  @click="$emit('reset')"
5
5
  :append-icon="selected && Object.keys(selected).length === 0 ? `mdi-radiobox-marked ${$styles.greenText}` : 'mdi-radiobox-blank text-[#636363]'"
@@ -10,7 +10,11 @@
10
10
  v-for="familyMember of formStore.birthInfos"
11
11
  :key="familyMember.childIIN"
12
12
  @click="$emit('selectFamilyMember', familyMember)"
13
- :append-icon="familyMember && selected && selected.childIIN === familyMember.childIIN ? `mdi-radiobox-marked ${$styles.greenText}` : 'mdi-radiobox-blank text-[#636363]'"
13
+ :append-icon="
14
+ familyMember && selected && typeof selected === 'object' && selected.childIIN === familyMember.childIIN
15
+ ? `mdi-radiobox-marked ${$styles.greenText}`
16
+ : 'mdi-radiobox-blank text-[#636363]'
17
+ "
14
18
  >
15
19
  <v-list-item-title :class="[$styles.greenText, $styles.textTitle]">{{
16
20
  `${familyMember.childSurName} ${familyMember.childName} ${familyMember.childPatronymic ? familyMember.childPatronymic : ''}`
@@ -20,6 +24,13 @@
20
24
  >{{ ` ${$reformatIin(familyMember.childIIN!)}` }}</v-list-item-subtitle
21
25
  >
22
26
  </v-list-item>
27
+ <v-list-item
28
+ v-if="$dataStore.isGons"
29
+ @click="$emit('addChild')"
30
+ :append-icon="selected && selected === $dataStore.t('form.addBeneficiary') ? `mdi-radiobox-marked ${$styles.greenText}` : 'mdi-radiobox-blank text-[#636363]'"
31
+ >
32
+ <v-list-item-title :class="[$styles.greenText, $styles.textTitle]">{{ $dataStore.t('form.addBeneficiary') }}</v-list-item-title>
33
+ </v-list-item>
23
34
  </v-list>
24
35
  <base-list-empty class="w-full" v-else />
25
36
  </template>
@@ -30,10 +41,10 @@ import type { Api } from '../../types';
30
41
  export default defineComponent({
31
42
  props: {
32
43
  selected: {
33
- type: Object as PropType<Api.GKB.BirthInfo>,
44
+ type: [Object, String] as PropType<Api.GKB.BirthInfo | string>,
34
45
  },
35
46
  },
36
- emits: ['selectFamilyMember', 'reset'],
47
+ emits: ['selectFamilyMember', 'reset', 'addChild'],
37
48
  setup() {
38
49
  const formStore = useFormStore();
39
50
  return {
@@ -125,6 +125,15 @@
125
125
  :loading="$dataStore.isLoading"
126
126
  @input="uploadAdditionalFile($event, '50', member.iin)"
127
127
  />
128
+ <base-file-input
129
+ v-if="
130
+ formStore.signedDocumentList.filter(i => i.fileTypeCode === '29' && i.iin === String(member.iin).replaceAll('-', '')).length !==
131
+ formStore.requiredDocuments.filter(i => i.code === '29' && i.iin === String(member.iin).replaceAll('-', '')).length
132
+ "
133
+ :label="$dataStore.t('pension.KSJagreement')"
134
+ :loading="$dataStore.isLoading"
135
+ @input.prevent="uploadAdditionalFile($event, '29', member.iin)"
136
+ />
128
137
  </base-form-section>
129
138
  </div>
130
139
  </section>
@@ -300,7 +309,7 @@ export default defineComponent({
300
309
  const documentType = ref<DigitalDocNames | null>(null);
301
310
  const otpCode = ref<string>('');
302
311
  const currentIin = ref<string>('');
303
- const deleteFilesId = ['1', '2', '4', '46'];
312
+ const deleteFilesId = ['1', '2', '3', '4', '46'];
304
313
  const documentItems: Array<{ title: DigitalDocNames; value: DigitalDocTypes }> = [
305
314
  { title: 'Удостоверение личности', value: 'IdentityCard' },
306
315
  { title: 'Паспорт', value: 'Passport' },
@@ -377,7 +386,7 @@ export default defineComponent({
377
386
  const insuredFiltered = computed(() => formStore.insuredForm.filter(i => i.iin !== formStore.policyholderForm.iin) as Base.Document.Digital[]);
378
387
  const beneficiaryFiltered = computed(() => formStore.beneficiaryForm.filter(i => i.iin !== formStore.policyholderForm.iin) as Base.Document.Digital[]);
379
388
  const slaveInsuredForm = computed(() => formStore.slaveInsuredForm as Base.Document.Digital);
380
- const documentListFiltered = computed(() => formStore.signedDocumentList.filter(i => !['1', '2', '4'].includes(String(i.fileTypeCode))));
389
+ const documentListFiltered = computed(() => formStore.signedDocumentList.filter(i => !['1', '2', '3', '4'].includes(String(i.fileTypeCode))));
381
390
  const jointMembers = ref<Member[]>([formStore.insuredForm[0]]);
382
391
 
383
392
  const openPanel = async (document: DocumentItem) => {
@@ -499,7 +508,13 @@ export default defineComponent({
499
508
  dataStore.rightPanel.open = false;
500
509
  dataStore.panelAction = null;
501
510
  await dataStore.getSignedDocList(formStore.applicationData.processInstanceId);
502
- if (hasDigitalDocuments.value && (currentDocument.value.fileTypeCode === '1' || currentDocument.value.fileTypeCode === '2' || currentDocument.value.fileTypeCode === '4')) {
511
+ if (
512
+ hasDigitalDocuments.value &&
513
+ (currentDocument.value.fileTypeCode === '1' ||
514
+ currentDocument.value.fileTypeCode === '2' ||
515
+ currentDocument.value.fileTypeCode === '3' ||
516
+ currentDocument.value.fileTypeCode === '4')
517
+ ) {
503
518
  getDigitalDocs();
504
519
  }
505
520
  }
@@ -545,7 +560,8 @@ export default defineComponent({
545
560
  let commonDocs: IDocument[] = [];
546
561
  for (let member of members) {
547
562
  const matchingDoc = formStore.signedDocumentList.find(
548
- doc => doc.iin === String(member.iin).replaceAll('-', '') && (doc.fileTypeCode === '1' || doc.fileTypeCode === '2' || doc.fileTypeCode === '4'),
563
+ doc =>
564
+ doc.iin === String(member.iin).replaceAll('-', '') && (doc.fileTypeCode === '1' || doc.fileTypeCode === '2' || doc.fileTypeCode === '3' || doc.fileTypeCode === '4'),
549
565
  );
550
566
  if (matchingDoc) commonDocs.push(matchingDoc);
551
567
  }
@@ -64,6 +64,16 @@
64
64
  :title="$dataStore.t('isInsuredUnderage')"
65
65
  :has-border="false"
66
66
  />
67
+ <base-panel-input
68
+ v-if="whichForm === formStore.beneficiaryFormKey && $dataStore.isGons"
69
+ v-model="member.chooseChild"
70
+ :value="member.chooseChild"
71
+ :label="$dataStore.t('form.chooseChild')"
72
+ :readonly="isDisabled"
73
+ :clearable="!isDisabled"
74
+ append-inner-icon="mdi mdi-chevron-right"
75
+ @append="searchMember($dataStore.t('form.chooseChild'))"
76
+ />
67
77
  <base-form-input
68
78
  v-model="member.phoneNumber"
69
79
  :label="$dataStore.t('form.phoneNumber')"
@@ -166,8 +176,8 @@
166
176
  <base-panel-input
167
177
  v-model="member.gender"
168
178
  :value="member.gender?.nameRu"
169
- :readonly="isDisabled || isDataFromGov"
170
- :clearable="!isDisabled && !isDataFromGov"
179
+ :readonly="isDisabled || isDataFromGov || !isChooseChild"
180
+ :clearable="(!isDisabled && !isDataFromGov) || !!isChooseChild"
171
181
  :label="$dataStore.t('form.gender')"
172
182
  :rules="$rules.objectRequired"
173
183
  append-inner-icon="mdi mdi-chevron-right"
@@ -188,12 +198,12 @@
188
198
  v-if="hasRelationDegree"
189
199
  v-model="member.relationDegree"
190
200
  :value="member.relationDegree?.nameRu"
191
- :readonly="isDisabled"
192
- :clearable="!isDisabled"
201
+ :readonly="isDisabled || !isChooseChild"
202
+ :clearable="!isDisabled || !!isChooseChild"
193
203
  :label="$dataStore.t('form.relations')"
194
204
  :rules="$rules.objectRequired"
195
205
  append-inner-icon="mdi mdi-chevron-right"
196
- @append="openPanel($dataStore.t('form.relations'), [], 'relationDegree', $dataStore.getRelationTypes)"
206
+ @append="openPanel($dataStore.t('form.relations'), filteredRelationsData, 'relationDegree')"
197
207
  />
198
208
  <base-form-input
199
209
  v-if="whichForm === formStore.beneficiaryFormKey"
@@ -769,7 +779,7 @@
769
779
  />
770
780
  <base-dialog v-model="familyDialog" :subtitle="$dataStore.t('dialog.familyMember')" :icon="{ mdi: 'hand-pointing-up' }" actions="familyDialog">
771
781
  <template #actions>
772
- <base-family-dialog :selected="selectedFamilyMember" @selectFamilyMember="selectFamilyMember" @reset="closeFamilyDialog(true)" />
782
+ <base-family-dialog :selected="selectedFamilyMember" @selectFamilyMember="selectFamilyMember" @reset="closeFamilyDialog(true)" @addChild="addChild" />
773
783
  </template>
774
784
  </base-dialog>
775
785
  <base-dialog v-model="documentChooseDialog" :subtitle="$dataStore.t('labels.chooseDoc')" :icon="{ mdi: 'file-document-outline' }" actions="documentChooseDialog">
@@ -831,7 +841,7 @@ export default {
831
841
  const getMember = (whichForm: keyof typeof StoreMembers | 'slaveInsuredForm', whichIndex?: string) =>
832
842
  memberStore.getMemberFromStore(whichForm, Number((whichIndex ? whichIndex : '0') as string))!;
833
843
  const member = ref(getMember(whichForm.value, whichIndex.value));
834
- const selectedFamilyMember = ref<Api.GKB.BirthInfo>({});
844
+ const selectedFamilyMember = ref<Api.GKB.BirthInfo | string>({});
835
845
  const isPanelOpen = ref<boolean>(false);
836
846
  const memberDocument = ref<DocumentItem>();
837
847
  const isButtonLoading = ref<boolean>(false);
@@ -862,13 +872,17 @@ export default {
862
872
  const isRelative = ref<boolean>(false);
863
873
  const additionalDocuments = ref<any[]>([]);
864
874
  const contragents = ref<ContragentType[]>([]);
865
-
875
+ const filteredRelationsData = ref<Value[]>(dataStore.relations);
866
876
  const currentPanelDeep = ref<string>();
867
877
  const currentPanelSubDeep = ref<string>();
868
-
869
878
  const memberSetting = computed(() => dataStore.members[memberStore.getMemberApplicationCode(whichForm.value)!]);
870
879
  const hasOtp = computed(() => member.value.otpCode && member.value.otpCode.length === useMask().otp.length);
871
880
  const isDisabled = computed(() => !memberStore.isStatementEditible(whichForm.value));
881
+ const isChooseChild = computed(() => {
882
+ if (dataStore.isGons) return member.value.chooseChild === dataStore.t('form.addBeneficiary');
883
+ return true;
884
+ });
885
+
872
886
  const isTask = computed(() => route.params.taskId === '0' || dataStore.isTask());
873
887
  const isIinPhoneDisabled = computed(() => member.value.hasAgreement);
874
888
  const gbdDocuments = computed(() => {
@@ -1104,10 +1118,10 @@ export default {
1104
1118
  return getOtpConditionByMember();
1105
1119
  });
1106
1120
 
1107
- const searchMember = async () => {
1121
+ const searchMember = async (title: string = hasDocumentReader.value ? 'Получение данных со скана документа' : 'Поиск контрагента') => {
1108
1122
  if (!isDisabled.value) {
1109
1123
  dataStore.panelAction = null;
1110
- dataStore.rightPanel.title = hasDocumentReader.value ? 'Получение данных со скана документа' : 'Поиск контрагента';
1124
+ dataStore.rightPanel.title = title;
1111
1125
  dataStore.rightPanel.open = true;
1112
1126
  isSearchOpen.value = true;
1113
1127
  isDocumentOpen.value = false;
@@ -1431,6 +1445,9 @@ export default {
1431
1445
  if (formStore.birthInfos.length !== 0) {
1432
1446
  familyDialog.value = true;
1433
1447
  }
1448
+ if (formStore.birthInfos.length === 0 && dataStore.isGons) {
1449
+ familyDialog.value = true;
1450
+ }
1434
1451
  } else {
1435
1452
  familyDialog.value = true;
1436
1453
  }
@@ -1446,10 +1463,23 @@ export default {
1446
1463
  isButtonLoading.value = false;
1447
1464
  dataStore.rightPanel.open = false;
1448
1465
  isSearchOpen.value = false;
1466
+ if (dataStore.isGons) {
1467
+ member.value.chooseChild = '';
1468
+ }
1469
+ };
1470
+
1471
+ const addChild = () => {
1472
+ member.value.resetMember();
1473
+ familyDialog.value = false;
1474
+ selectedFamilyMember.value = dataStore.t('form.addBeneficiary');
1475
+ isButtonLoading.value = false;
1476
+ dataStore.rightPanel.open = false;
1477
+ isSearchOpen.value = false;
1478
+ member.value.chooseChild = dataStore.t('form.addBeneficiary');
1449
1479
  };
1450
1480
 
1451
1481
  const selectFamilyMember = (familyMember: Api.GKB.BirthInfo) => {
1452
- if (selectedFamilyMember.value && selectedFamilyMember.value.childIIN === familyMember.childIIN) {
1482
+ if (selectedFamilyMember.value && typeof selectedFamilyMember.value === 'object' && selectedFamilyMember.value.childIIN === familyMember.childIIN) {
1453
1483
  selectedFamilyMember.value = {};
1454
1484
  } else {
1455
1485
  selectedFamilyMember.value = familyMember;
@@ -1458,6 +1488,19 @@ export default {
1458
1488
  member.value.lastName = selectedFamilyMember.value.childSurName!;
1459
1489
  member.value.middleName = selectedFamilyMember.value.childPatronymic ?? '';
1460
1490
  member.value.birthDate = reformatDate(selectedFamilyMember.value.childBirthDate!);
1491
+ member.value.gender = dataStore.gender.find(i => {
1492
+ if (typeof selectedFamilyMember.value === 'object') {
1493
+ return i.id === selectedFamilyMember.value.childGender;
1494
+ }
1495
+ })!;
1496
+ member.value.relationDegree = dataStore.relations.find(i => {
1497
+ if (typeof selectedFamilyMember.value === 'object') {
1498
+ return selectedFamilyMember.value.childGender === 1 ? i.nameRu === 'Сын' : i.nameRu === 'Дочь';
1499
+ }
1500
+ })!;
1501
+ if (dataStore.isGons) {
1502
+ member.value.chooseChild = `${selectedFamilyMember.value.childSurName} ${selectedFamilyMember.value.childName} ${selectedFamilyMember.value.childPatronymic ? selectedFamilyMember.value.childPatronymic : ''}`;
1503
+ }
1461
1504
  }
1462
1505
  familyDialog.value = false;
1463
1506
  isButtonLoading.value = false;
@@ -2029,6 +2072,22 @@ export default {
2029
2072
  },
2030
2073
  );
2031
2074
 
2075
+ if (dataStore.isGons) {
2076
+ watch(
2077
+ () => member.value.chooseChild,
2078
+ val => {
2079
+ if (val === dataStore.t('form.addBeneficiary')) {
2080
+ const idsToFind = ['14', '15', '21', '20', '24', '25', '27'];
2081
+ const filteredData = dataStore.relations.filter(item => idsToFind.includes(item.ids as string));
2082
+ filteredRelationsData.value = filteredData;
2083
+ } else {
2084
+ filteredRelationsData.value = dataStore.relations;
2085
+ }
2086
+ },
2087
+ { immediate: true },
2088
+ );
2089
+ }
2090
+
2032
2091
  watch(
2033
2092
  () => member.value.registrationProvince,
2034
2093
  (val, oldVal) => {
@@ -2175,6 +2234,8 @@ export default {
2175
2234
  isRelative,
2176
2235
  imageDataList,
2177
2236
  contragents,
2237
+ filteredRelationsData,
2238
+
2178
2239
  // Computed
2179
2240
  whichForm,
2180
2241
  whichIndex,
@@ -2202,6 +2263,7 @@ export default {
2202
2263
  hasGBDFLDocSelection,
2203
2264
  isNonResident,
2204
2265
  isDataFromGov,
2266
+ isChooseChild,
2205
2267
 
2206
2268
  // Rules
2207
2269
  ageRule,
@@ -2210,6 +2272,7 @@ export default {
2210
2272
  birthDateRule,
2211
2273
 
2212
2274
  // Functions
2275
+ addChild,
2213
2276
  searchMember,
2214
2277
  openPanel,
2215
2278
  openCustomPanel,
@@ -466,14 +466,15 @@
466
466
  :readonly="isDisabled"
467
467
  :clearable="!isDisabled"
468
468
  :max-date="formatDate(transferMaxDate) ?? undefined"
469
- :rules="$dataStore.rules.required.concat($dataStore.rules.birthDate)"
469
+ :rules="$dataStore.rules.required.concat(checkTransferContractDate)"
470
470
  append-inner-icon="mdi mdi-calendar-blank-outline"
471
471
  />
472
472
  <span v-if="transferMaxDate && !isDisabled" class="px-3 font-light text-sm bg-white py-0 mt-[-5px]" style="color: #a0b3d8 !important"
473
473
  >до {{ transferMaxDate }} включительно</span
474
474
  >
475
475
  </div>
476
- <base-form-input v-model="contract.transferContractNumber" :label="$dataStore.t('pension.globalId')" :readonly="isDisabled" :clearable="!isDisabled" />
476
+ <!--
477
+ <base-form-input v-model="contract.transferContractNumber" :label="$dataStore.t('pension.globalId')" :readonly="isDisabled" :clearable="!isDisabled"
477
478
  <base-form-input
478
479
  v-model="contract.transferContractRegNumber"
479
480
  :label="$dataStore.t('pension.transferRegNumber')"
@@ -481,6 +482,7 @@
481
482
  :readonly="isDisabled"
482
483
  :clearable="!isDisabled"
483
484
  />
485
+ -->
484
486
  <base-form-input
485
487
  v-model="contract.transferContractFirstPaymentDate"
486
488
  :maska="$maska.date"
@@ -500,7 +502,22 @@
500
502
  @onClear="onClearPension('transferContractAmount', index)"
501
503
  />
502
504
  <base-form-toggle v-model="contract.transferContractIsOppv" :disabled="isDisabled" :has-border="false" :title="$dataStore.t('pension.isOPPVTransfer')" />
503
- <base-btn v-if="!isDisabled" :text="$dataStore.t('buttons.delete')" :disabled="isDisabled" size="sm" :btn="$styles.whiteBtn" @click="removeTransferContract(index)" />
505
+ <base-form-input
506
+ v-if="contract.transferContractIsOppv"
507
+ v-model="contract.transferContractMonthCount"
508
+ :disabled="$dataStore.isLoading"
509
+ :rules="$rules.required.concat($rules.notZero, $rules.numbers)"
510
+ :label="$dataStore.t('pension.compulsoryProfMonthCount')"
511
+ />
512
+ <base-btn
513
+ v-if="!isDisabled"
514
+ class="mt-3"
515
+ :text="$dataStore.t('buttons.delete')"
516
+ :disabled="isDisabled"
517
+ size="sm"
518
+ :btn="$styles.redBtn"
519
+ @click="removeTransferContract(index)"
520
+ />
504
521
  </section>
505
522
  </base-form-section>
506
523
  <base-form-section :title="$dataStore.t('pension.paymentTerms')">
@@ -519,7 +536,7 @@
519
536
  <base-form-input v-model="dateOfBegin" :maska="$maska.date" readonly :label="$dataStore.t('pension.paymentsDate')" append-inner-icon="mdi mdi-calendar-blank-outline" />
520
537
  <base-rounded-select
521
538
  v-model="pensionForm.guaranteedPeriod"
522
- class="pension-guaranteed-period"
539
+ class="pension-round-toggle"
523
540
  :readonly="isDisabled"
524
541
  :clearable="!isDisabled"
525
542
  :rules="$rules.notZero"
@@ -527,6 +544,18 @@
527
544
  :items="guaranteedPeriodList"
528
545
  :hide-details="true"
529
546
  />
547
+ <base-rounded-select
548
+ v-if="dividendPeriods"
549
+ v-model="pensionForm.dividendId"
550
+ class="pension-round-toggle"
551
+ :readonly="isDisabled"
552
+ :rules="$rules.notZero"
553
+ :label="$dataStore.t('pension.dividendPeriod')"
554
+ item-title="nameRu"
555
+ item-value="id"
556
+ :items="dividendPeriods"
557
+ :hide-details="true"
558
+ />
530
559
  <base-form-input v-model="pensionForm.frequencyPayments" disabled :label="$dataStore.t('pension.frequencyPayments')" />
531
560
  <base-form-input v-model="pensionForm.periodPayments" disabled :label="$dataStore.t('pension.paymentPeriod')" />
532
561
  <base-form-input v-model="pensionForm.insuranceProgramType" disabled :label="$dataStore.t('pension.insuranceProgramType')" />
@@ -803,6 +832,40 @@
803
832
  </base-animation>
804
833
  <base-btn class="min-h-[60px]" :text="$dataStore.t('buttons.calcPremium')" type="submit" @click.prevent="underwriterCalculate('premium')" :loading="isCalculating" />
805
834
  </div>
835
+ <base-fade-transition>
836
+ <base-form-section :title="$dataStore.t('pension.dividendsGraph')" v-if="dividendSchedules.scheduleDividend" class="grid-table">
837
+ <div class="flex justify-between rounded-t-[8px] border-b-[1px]" :class="[$styles.blueBg, $styles.whiteText]">
838
+ <span class="h-full">#</span>
839
+ <span class="h-full">{{ $dataStore.t('pension.dividendDate') }}</span>
840
+ <span class="h-full grow">{{ $dataStore.t('pension.dividendAmount') }}</span>
841
+ </div>
842
+ <v-virtual-scroll :items="dividendSchedules.scheduleDividend" height="300">
843
+ <template v-slot:default="{ item, index }">
844
+ <div class="flex justify-between border-b-[1px]" :class="[$styles.whiteBg, $styles.textSimple, $styles.rounded]">
845
+ <span class="h-full">{{ index + 1 }}</span>
846
+ <span class="h-full">{{ reformatDate(item.date) }}</span>
847
+ <span class="h-full grow">{{ $dataStore.getNumberWithSpaces(item.amount) }}</span>
848
+ </div>
849
+ </template>
850
+ </v-virtual-scroll>
851
+ </base-form-section>
852
+ <base-form-section :title="$dataStore.t('pension.dividendsGraph') + ' 2'" v-if="dividendSchedules.scheduleDividend2" class="grid-table">
853
+ <div class="flex justify-between rounded-t-[8px] border-b-[1px]" :class="[$styles.blueBg, $styles.whiteText]">
854
+ <span class="h-full">#</span>
855
+ <span class="h-full">{{ $dataStore.t('pension.dividendDate') }}</span>
856
+ <span class="h-full grow">{{ $dataStore.t('pension.dividendAmount') }}</span>
857
+ </div>
858
+ <v-virtual-scroll :items="dividendSchedules.scheduleDividend2" height="300">
859
+ <template v-slot:default="{ item, index }">
860
+ <div class="flex justify-between border-b-[1px]" :class="[$styles.whiteBg, $styles.textSimple, $styles.rounded]">
861
+ <span class="h-full">{{ index + 1 }}</span>
862
+ <span class="h-full">{{ reformatDate(item.date) }}</span>
863
+ <span class="h-full grow">{{ $dataStore.getNumberWithSpaces(item.amount) }}</span>
864
+ </div>
865
+ </template>
866
+ </v-virtual-scroll>
867
+ </base-form-section>
868
+ </base-fade-transition>
806
869
  <Teleport v-if="isPanelOpen" to="#right-panel-actions">
807
870
  <div :class="[$styles.scrollPage]" class="flex flex-col items-center">
808
871
  <base-rounded-input v-model.trim="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
@@ -923,12 +986,37 @@ export default defineComponent({
923
986
  const additionalTerms = ref<AddCover[]>([]);
924
987
 
925
988
  const maxDate = ref<string | null>();
926
- const transferMaxDate = ref();
927
989
  const dateOfBegin = ref();
928
990
  const contractDate = ref<string | null>();
929
991
  const transferContractDate = ref<string | null>();
930
992
  const transferContractFirstPaymentDate = ref<string | null>();
931
993
  const guaranteedPeriodList = Array.from(Array(35), (_, i) => i + 1);
994
+ const dividendPeriods = ref<Value[] | null>(null);
995
+
996
+ const dividendSchedules = ref(<
997
+ {
998
+ scheduleDividend: any[] | null;
999
+ scheduleDividend2: any[] | null;
1000
+ }
1001
+ >{
1002
+ scheduleDividend: null,
1003
+ scheduleDividend2: null,
1004
+ });
1005
+ const transferMaxDate = computed({
1006
+ get() {
1007
+ if (contractDate.value) {
1008
+ var maxDate = structuredClone(formatDate(contractDate.value))!;
1009
+ maxDate.setFullYear(maxDate.getFullYear() - 2);
1010
+ maxDate.setDate(maxDate.getDate() + 1);
1011
+ return reformatDate(String(maxDate))!;
1012
+ } else {
1013
+ return '';
1014
+ }
1015
+ },
1016
+ set(newValue) {
1017
+ return newValue;
1018
+ },
1019
+ });
932
1020
  const isSlavePensionForm = computed(() => route.query.which === 'slave');
933
1021
  const pensionForm = computedWithControl(
934
1022
  () => formStore.pensionApp,
@@ -960,6 +1048,18 @@ export default defineComponent({
960
1048
  const firstAmount = ref<boolean>(true);
961
1049
  const isHalykBank = formStore.lfb.policyholder.clientData.iin.replace(/-/g, '') === '940140000385';
962
1050
 
1051
+ const checkTransferContractDate = (val: any) => {
1052
+ if (val) {
1053
+ if (new Date(formatDate(transferMaxDate.value)!.valueOf() - formatDate(val)!.valueOf()).getUTCFullYear() - 1970 < 0) {
1054
+ return dataStore.t('rules.invalidtransferContractDate');
1055
+ } else {
1056
+ return true;
1057
+ }
1058
+ } else {
1059
+ return true;
1060
+ }
1061
+ };
1062
+
963
1063
  const isShownAdditionalTerms = computed(() => {
964
1064
  if (whichProduct.value === 'gons') {
965
1065
  return false;
@@ -1836,6 +1936,7 @@ export default defineComponent({
1836
1936
 
1837
1937
  const addTransferContract = () => {
1838
1938
  transferContracts.value.push(new TransferContract());
1939
+ transferContracts.value[transferContracts.value.length - 1].transferContractDate = transferMaxDate.value;
1839
1940
  };
1840
1941
 
1841
1942
  const removeTransferContract = (index: number) => {
@@ -1992,6 +2093,7 @@ export default defineComponent({
1992
2093
  }
1993
2094
  await dataStore.getApplicationData(String(route.params.taskId), false, false, false, true);
1994
2095
  dateOfBegin.value = reformatDate(formStore.applicationData.pensionApp.dateOfBegin);
2096
+ dividendSchedules.value = await dataStore.getDividendSchedule();
1995
2097
  } else {
1996
2098
  if (whichSum.value === 'requestedSumInsured') {
1997
2099
  productConditionsForm.insurancePremiumPerMonth = null;
@@ -2208,6 +2310,10 @@ export default defineComponent({
2208
2310
  transferContractDate.value = reformatDate(pensionForm.value.transferContractDate);
2209
2311
  transferContractFirstPaymentDate.value = reformatDate(pensionForm.value.transferContractFirstPaymentDate ?? '');
2210
2312
  maxDate.value = await dataStore.getVariableData(formStore.applicationData.processCode ?? 19);
2313
+ dividendPeriods.value = await dataStore.getProcessDividendPeriods();
2314
+ if (pensionForm.value.dividendId) {
2315
+ dividendSchedules.value = await dataStore.getDividendSchedule();
2316
+ }
2211
2317
  if (!transferContracts.value.length && pensionForm.value.transferContracts && pensionForm.value.transferContracts.length) {
2212
2318
  pensionForm.value.transferContracts.forEach((contract: TransferContract) => {
2213
2319
  transferContracts.value.push({
@@ -2372,15 +2478,12 @@ export default defineComponent({
2372
2478
  if (val !== null && val !== undefined && val.length === 10 && oldVal != undefined && !isSlavePensionForm.value) {
2373
2479
  const formattedContractDate = formatDate(val);
2374
2480
  if (formattedContractDate) {
2375
- const transferMax = formattedContractDate;
2376
- transferMax.setFullYear(transferMax.getFullYear() - 2);
2377
- transferMax.setDate(transferMax.getDate() + 1);
2378
- transferMaxDate.value = reformatDate(String(transferMax));
2379
2481
  formattedContractDate.setDate(formattedContractDate.getDate() + 20);
2380
2482
  dateOfBegin.value = reformatDate(String(formattedContractDate));
2381
2483
  }
2382
2484
  }
2383
2485
  },
2486
+ { immediate: true },
2384
2487
  );
2385
2488
  }
2386
2489
 
@@ -2499,6 +2602,8 @@ export default defineComponent({
2499
2602
  hasInsStartDate,
2500
2603
  hasInsEndDate,
2501
2604
  isSlavePensionForm,
2605
+ dividendPeriods,
2606
+ dividendSchedules,
2502
2607
 
2503
2608
  // Rules
2504
2609
  fixInsSumRule,
@@ -2537,13 +2642,32 @@ export default defineComponent({
2537
2642
  getContragent,
2538
2643
  addTransferContract,
2539
2644
  removeTransferContract,
2645
+ checkTransferContractDate,
2540
2646
  };
2541
2647
  },
2542
2648
  });
2543
2649
  </script>
2544
2650
 
2545
2651
  <style>
2546
- .pension-guaranteed-period .v-field {
2652
+ .pension-round-toggle .v-field {
2547
2653
  border: none !important;
2548
2654
  }
2655
+ .grid-table > div > span {
2656
+ padding-left: 24px;
2657
+ border-right: 1px solid #fff;
2658
+ display: flex;
2659
+ align-items: center;
2660
+ padding-top: 12px;
2661
+ padding-bottom: 12px;
2662
+ min-width: 15%;
2663
+ }
2664
+ .v-virtual-scroll__item > div > span {
2665
+ padding-left: 24px;
2666
+ border-right: 1px solid #fff;
2667
+ display: flex;
2668
+ align-items: center;
2669
+ padding-top: 12px;
2670
+ padding-bottom: 12px;
2671
+ min-width: 15%;
2672
+ }
2549
2673
  </style>
@@ -41,7 +41,7 @@
41
41
  <div v-if="isScansDocuments" :class="[$styles.flexColNav]">
42
42
  <div v-if="isNewSign">
43
43
  <div class="flex flex-col gap-2">
44
- <base-btn v-for="file in signingFiles" :text="`Скачать ${file.fileName}`" :loading="$dataStore.isButtonsLoading" @click="getDocNew(file)" />
44
+ <base-btn v-for="file in getFilesDownloadButtons" :text="`Скачать ${file.fileName}`" :loading="$dataStore.isButtonsLoading" @click="getDocNew(file)" />
45
45
  <base-form-section class="mt-4 flex flex-col !gap-2" :title="$dataStore.t('clients.attachScansSignDocs')">
46
46
  <base-file-input v-for="file in signingFiles" :label="`Вложить ${file.fileName}`" @input.prevent="onFileChangeScansNew($event, file)" @onClear="onClearFileNew(file)" />
47
47
  </base-form-section>
@@ -60,6 +60,13 @@
60
60
  </div>
61
61
  <base-btn :text="$dataStore.t('buttons.sign')" :loading="$dataStore.isButtonsLoading || loading" @click="isNewSign ? sendFilesNew() : sendFiles()" />
62
62
  <base-btn :text="$dataStore.t('buttons.cancel')" :btn="$styles.whiteBtn" @click="isScansDocuments = false" />
63
+ <base-btn
64
+ v-if="isOnlineEnpf === false && $dataStore.isPension && formStore.applicationData.statusCode === 'AttachAppContractForm'"
65
+ class="mt-[2rem]"
66
+ :text="$dataStore.t('buttons.send')"
67
+ :loading="loading"
68
+ @click="$dataStore.panelAction = constants.actions.signed"
69
+ />
63
70
  </div>
64
71
  <div v-if="isQr" :class="[$styles.flexColNav]">
65
72
  <base-form-section :title="''">
@@ -302,6 +309,13 @@ export default defineComponent({
302
309
  const scansFiles = ref<any[]>([]);
303
310
  const isAllPaperSigned = computed(() => formStore.signatories.every((person: any) => person.fileDatas.every((file: any) => file.isSigned === true && file.signedType === 2)));
304
311
  const processCode = formStore.applicationData.processCode;
312
+ const getFilesDownloadButtons = computed(() => {
313
+ if (isOnlineEnpf.value === false && dataStore.isPension && formStore.applicationData.statusCode === 'ContractSignedFrom') {
314
+ return signingFiles.value.filter(i => i.fileType === 6);
315
+ } else {
316
+ return signingFiles.value;
317
+ }
318
+ });
305
319
 
306
320
  const openSmsPanel = (signInfo: Types.SignUrlType) => {
307
321
  if (signInfo) {
@@ -1017,6 +1031,7 @@ export default defineComponent({
1017
1031
  inSigningOrder,
1018
1032
  isNewSign,
1019
1033
  hasEpayPay,
1034
+ getFilesDownloadButtons,
1020
1035
  };
1021
1036
  },
1022
1037
  });
@@ -497,6 +497,7 @@ export class Member extends Person {
497
497
  bankInfo: BankInfoClass;
498
498
  transferContractCompany: Value;
499
499
  digitalDocument: IDocument | null;
500
+ chooseChild: string | null;
500
501
  identityDocument: {
501
502
  documentType: Value;
502
503
  documentNumber: string | null;
@@ -571,6 +572,7 @@ export class Member extends Person {
571
572
  confirmDocTypeKz = null,
572
573
  confirmDocTypeRod = null,
573
574
  isNotary = false,
575
+ chooseChild = null,
574
576
  ) {
575
577
  super(id, type, iin, longName, lastName, firstName, middleName, birthDate, gender, genderName, birthPlace, age);
576
578
  this.documentsList = [];
@@ -642,6 +644,7 @@ export class Member extends Person {
642
644
  this.bankInfo = new BankInfoClass();
643
645
  this.transferContractCompany = new Value();
644
646
  this.digitalDocument = null;
647
+ this.chooseChild = chooseChild;
645
648
  this.identityDocument = {
646
649
  documentType: new Value(),
647
650
  documentNumber: null,
@@ -66,6 +66,7 @@ export const constants = Object.freeze({
66
66
  Statuses.WaitingInsurancePremiumForm,
67
67
  ],
68
68
  rejectApplicationStatuses: [
69
+ Statuses.EditForm,
69
70
  Statuses.StartForm,
70
71
  Statuses.DsoUsnsForm,
71
72
  Statuses.AccountantForm,
@@ -840,6 +840,7 @@ export class RoleController {
840
840
  isUpk = () => this.isRole(constants.roles.UPK);
841
841
  isUrp = () => this.isRole(constants.roles.URP);
842
842
  isUsns = () => this.isRole(constants.roles.USNS);
843
+ isUsnsHead = () => this.isRole(constants.roles.UsnsHead);
843
844
  isAccountant = () => this.isRole(constants.roles.Accountant);
844
845
  isDrn = () => this.isRole(constants.roles.DRNSJ);
845
846
  isSupport = () => this.isRole(constants.roles.Support);
@@ -888,6 +889,7 @@ export class RoleController {
888
889
  toDSO:
889
890
  this.isDsuio() ||
890
891
  this.isActuary() ||
892
+ this.isUsnsHead() ||
891
893
  this.isHeadOfDso() ||
892
894
  this.isAccountant() ||
893
895
  this.isUSNSACCINS() ||
@@ -931,6 +933,7 @@ export class RoleController {
931
933
  this.isURAP() ||
932
934
  this.isTravelAgent() ||
933
935
  this.isHR() ||
936
+ this.isUsnsHead() ||
934
937
  baseAccessRoles,
935
938
  };
936
939
  };
package/locales/ru.json CHANGED
@@ -150,7 +150,9 @@
150
150
  "errorOsns": "По данному БИН на дату заключения заявления не найден договор ОСНС. Просим проверить БИН Страхователя.",
151
151
  "needDigDoc": "Нужно получить цифровой документ {text}",
152
152
  "needToRecalc": "Дата оплаты не совпадает с датой договора, нажмите «Перерасчет» и отправьте клиенту новый QR для подписания.",
153
- "notDigDoc": "Выданный документ не найден"
153
+ "notDigDoc": "Выданный документ не найден",
154
+ "siblingRelationDoc": "Необходимо вложить документы, подтверждающие родственные связи между Страхователем и Выгодоприобретателем.\nВ случае, если степень родства Выгодоприобретателя выбрано:\n Полнородный брат/сестра или Неполнородный брат/сестра - Необходимо вложить 2 документа: Свидетельство о рождении Выгодоприобретателя и Свидетельство о рождении Страхователя",
155
+ "grandchildRelationDoc": "Необходимо вложить документы, подтверждающие родственные связи между Страхователем и Выгодоприобретателем.\nВ случае, если степень родства Выгодоприобретателя выбрано:\n Внук/Внучка - Необходимо вложить 2 документа: Свидетельство о рождении Выгодоприобретателя и Свидетельство о рождении родителя (который является ребенком страхователя) Выгодоприобретателя"
154
156
  },
155
157
  "notSignedContract": "Неподписанный Договор",
156
158
  "Contract": "Договор страхования",
@@ -251,7 +253,7 @@
251
253
  "recalc": "Перерасчет",
252
254
  "conclude": "Заключить",
253
255
  "agree": "Согласен",
254
- "disagree": "Не согласен",
256
+ "disagree": "Не согласен"
255
257
  },
256
258
  "dialog": {
257
259
  "title": "Подтверждение",
@@ -438,7 +440,7 @@
438
440
  "fixInsSum": "Фиксированная сумма",
439
441
  "amountRefunded": "Сумма к возврату",
440
442
  "amountPaid": "Сумма к доплате",
441
- "franchise": "Франшиза",
443
+ "franchise": "Франшиза"
442
444
  },
443
445
  "calculatorForm": {
444
446
  "selectedCountries": "Выбранные страны",
@@ -590,7 +592,7 @@
590
592
  "KSJagreement": "Договор с другой КСЖ",
591
593
  "ENPFnote": "Выписка из ЕНПФ",
592
594
  "getDataENPF": "Получить данные с ЕНПФ",
593
- "compulsoryProfMonthCount": "Количество месяцев уплаты ОППВ (не менее 60 месяцев)",
595
+ "compulsoryProfMonthCount": "Количество месяцев уплаты ОППВ",
594
596
  "insuredIIN": "ИИН «Страхователя»",
595
597
  "ifHasRelationBeneficiary": "Включите, если у Страхователя есть Родственные связи с Выгодоприобретателем",
596
598
  "complianceFinMonitoring": "Приложение 6/ПОДФТ",
@@ -609,7 +611,11 @@
609
611
  "fileError": "Ошибка прикрепления файла",
610
612
  "parentContractNextPay": "Возврат с учетом очередной выплаты",
611
613
  "parentContractNextPayDate": "Очередная выплата по графику",
612
- "oppvPaymentCertificate": "Справка о количество взносов за счет ОППВ"
614
+ "oppvPaymentCertificate": "Справка о количество взносов за счет ОППВ",
615
+ "dividendPeriod": "Периодичность выплаты дивидендов",
616
+ "dividendsGraph": "График страховых дивидендов",
617
+ "dividendDate": "Дата выплаты",
618
+ "dividendAmount": "Размер периодичной страхового дивиденда (тенге)"
613
619
  },
614
620
  "agent": {
615
621
  "currency": "Валюта",
@@ -1036,7 +1042,10 @@
1036
1042
  "deathInsAnyReason": "Смерть Застрахованного по любой причине",
1037
1043
  "mark": "Признак",
1038
1044
  "signerData": "Данные Подписанта",
1039
- "individualOwnerData": "Данные владельца ИП"
1045
+ "individualOwnerData": "Данные владельца ИП",
1046
+ "chooseChild": "Выберите ребёнка",
1047
+ "addChild": "Добавить ребёнка",
1048
+ "addBeneficiary": "Добавить выгодоприобретателя"
1040
1049
  },
1041
1050
  "bankDetailsForm": {
1042
1051
  "title": "Банковские реквизиты",
@@ -1212,5 +1221,4 @@
1212
1221
  "coverageFrom": "Период действия с",
1213
1222
  "coverageTo": "Период действия до",
1214
1223
  "recoveredFrom": "Восстановлен с"
1215
-
1216
1224
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hl-core",
3
- "version": "0.0.10-beta.50",
3
+ "version": "0.0.10-beta.51",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "main": "nuxt.config.ts",
@@ -390,19 +390,19 @@ export const useDataStore = defineStore('data', {
390
390
  try {
391
391
  const queryData = isNonResident
392
392
  ? {
393
- firstName: member.firstName ?? '',
394
- lastName: member.lastName ?? '',
395
- middleName: member.middleName ?? '',
396
- iin: '',
397
- birthDate: member.birthDate ? formatDate(member.birthDate)?.toISOString() ?? '' : '',
398
- }
393
+ firstName: member.firstName ?? '',
394
+ lastName: member.lastName ?? '',
395
+ middleName: member.middleName ?? '',
396
+ iin: '',
397
+ birthDate: member.birthDate ? formatDate(member.birthDate)?.toISOString() ?? '' : '',
398
+ }
399
399
  : {
400
- firstName: '',
401
- lastName: '',
402
- middleName: '',
403
- iin: member.iin ? member.iin.replace(/-/g, '') : '',
404
- birthDate: '',
405
- };
400
+ firstName: '',
401
+ lastName: '',
402
+ middleName: '',
403
+ iin: member.iin ? member.iin.replace(/-/g, '') : '',
404
+ birthDate: '',
405
+ };
406
406
  const contragentResponse = await this.api.getContragent(queryData);
407
407
  if (contragentResponse.totalItems > 0) {
408
408
  if (contragentResponse.items.length === 1) {
@@ -931,7 +931,9 @@ export const useDataStore = defineStore('data', {
931
931
  isTerror: member.isTerror,
932
932
  isIpdlCompliance: null,
933
933
  isTerrorCompliance: null,
934
+ fromService: this.isGons && whichMember === 'Beneficiary' ? (member.chooseChild === 'Добавить выгодоприобретателя' ? false : true) : true,
934
935
  };
936
+
935
937
  if (this.isPension && memberFromApplicaiton && memberFromApplicaiton.processInstanceId === this.formStore.applicationData.slave?.processInstanceId) {
936
938
  data.processInstanceId = this.formStore.applicationData.slave.processInstanceId;
937
939
  }
@@ -1654,11 +1656,11 @@ export const useDataStore = defineStore('data', {
1654
1656
  return n === null
1655
1657
  ? null
1656
1658
  : n
1657
- .toLocaleString('ru', {
1658
- maximumFractionDigits: 2,
1659
- minimumFractionDigits: 2,
1660
- })
1661
- .replace(/,/g, '.');
1659
+ .toLocaleString('ru', {
1660
+ maximumFractionDigits: 2,
1661
+ minimumFractionDigits: 2,
1662
+ })
1663
+ .replace(/,/g, '.');
1662
1664
  },
1663
1665
  async getTaskList(
1664
1666
  search: string = '',
@@ -1694,8 +1696,8 @@ export const useDataStore = defineStore('data', {
1694
1696
  groupCode: groupCode,
1695
1697
  processCodes: this.isEFO
1696
1698
  ? Object.values(constants.products).filter(
1697
- i => i !== constants.products.pensionannuity && i !== constants.products.pensionannuityrefund && i !== constants.products.pensionannuityjoint,
1698
- )
1699
+ i => i !== constants.products.pensionannuity && i !== constants.products.pensionannuityrefund && i !== constants.products.pensionannuityjoint,
1700
+ )
1699
1701
  : [constants.products.baiterek],
1700
1702
  };
1701
1703
  if (byOneProcess !== null) {
@@ -1706,9 +1708,9 @@ export const useDataStore = defineStore('data', {
1706
1708
  processInstanceId === null
1707
1709
  ? query
1708
1710
  : {
1709
- ...query,
1710
- processInstanceId: processInstanceId,
1711
- },
1711
+ ...query,
1712
+ processInstanceId: processInstanceId,
1713
+ },
1712
1714
  );
1713
1715
  if (needToReturn) {
1714
1716
  this.isLoading = false;
@@ -2105,6 +2107,21 @@ export const useDataStore = defineStore('data', {
2105
2107
  }
2106
2108
  this.isLoading = false;
2107
2109
  },
2110
+ async getDividendSchedule() {
2111
+ this.isLoading = true;
2112
+ try {
2113
+ const response = await this.api.pensionannuityNew.getDividendSchedule(this.formStore.applicationData.processInstanceId);
2114
+ return response;
2115
+ } catch (err) {
2116
+ ErrorHandler(err);
2117
+ return {
2118
+ "scheduleDividend": null,
2119
+ "scheduleDividend2": null
2120
+ };
2121
+ } finally {
2122
+ this.isLoading = false;
2123
+ }
2124
+ },
2108
2125
  async calcParentContractSums(closeContractCompanyCode: string, closeContractCompanyName: string, isContractClosed: boolean) {
2109
2126
  this.isLoading = true;
2110
2127
  try {
@@ -2396,6 +2413,9 @@ export const useDataStore = defineStore('data', {
2396
2413
  const relationDegree = this.relations.find((i: Value) => i.ids == each.relationId);
2397
2414
  this.formStore.beneficiaryForm[index].relationDegree = relationDegree ? relationDegree : new Value();
2398
2415
  this.formStore.beneficiaryForm[index].percentageOfPayoutAmount = each.percentage;
2416
+ if (this.isGons) {
2417
+ this.formStore.beneficiaryForm[index].chooseChild = each.fromService === false ? 'Добавить выгодоприобретателя' : each.longName;
2418
+ }
2399
2419
  if (this.isLiferenta || this.isBolashak) {
2400
2420
  const insurancePay = this.insurancePay.find((i: Value) => i.id == each.beneficiaryInsurancePayId);
2401
2421
  this.formStore.beneficiaryForm[index].insurancePay = insurancePay ? insurancePay : new Value();
@@ -3257,6 +3277,27 @@ export const useDataStore = defineStore('data', {
3257
3277
  return ErrorHandler(err);
3258
3278
  }
3259
3279
  }
3280
+ if (this.isGons) {
3281
+ const { relationDegree } = this.formStore.beneficiaryForm[0];
3282
+ const siblingRelationIds = ['14', '15', '24', '25'];
3283
+ const grandchildRelationIds = ['20', '21'];
3284
+ let hasSiblingRelationId = siblingRelationIds.includes(String(relationDegree?.ids));
3285
+ let hasGrandchildRelationId = grandchildRelationIds.includes(String(relationDegree?.ids));
3286
+ const hasRelationDoc = this.formStore.signedDocumentList.filter(i => i.fileTypeCode === '46' || i.fileTypeCode === '53').length >= 2;
3287
+
3288
+ if (hasSiblingRelationId && !hasRelationDoc) {
3289
+ this.isLoading = false;
3290
+ hasSiblingRelationId = false;
3291
+ this.showToaster('error', this.t('toaster.siblingRelationDoc'), 3000);
3292
+ return false;
3293
+ }
3294
+ if (hasGrandchildRelationId && !hasRelationDoc) {
3295
+ this.isLoading = false;
3296
+ hasGrandchildRelationId = false;
3297
+ this.showToaster('error', this.t('toaster.grandchildRelationDoc'), 3000);
3298
+ return false;
3299
+ }
3300
+ }
3260
3301
  return true;
3261
3302
  },
3262
3303
  validateAnketa(whichSurvey: 'surveyByHealthBase' | 'surveyByHealthBasePolicyholder' | 'surveyByCriticalBase' | 'surveyByCriticalBasePolicyholder') {
@@ -3306,62 +3347,62 @@ export const useDataStore = defineStore('data', {
3306
3347
  await Promise.allSettled([
3307
3348
  this.getQuestionList('health', this.formStore.applicationData.processInstanceId, this.formStore.applicationData.insuredApp[0].id, 'surveyByHealthBase'),
3308
3349
  this.isClientAnketaCondition &&
3309
- this.getQuestionList(
3310
- 'health',
3311
- this.formStore.applicationData.processInstanceId,
3312
- this.formStore.applicationData.clientApp.id,
3313
- 'surveyByHealthBasePolicyholder',
3314
- 'policyholder',
3315
- ),
3350
+ this.getQuestionList(
3351
+ 'health',
3352
+ this.formStore.applicationData.processInstanceId,
3353
+ this.formStore.applicationData.clientApp.id,
3354
+ 'surveyByHealthBasePolicyholder',
3355
+ 'policyholder',
3356
+ ),
3316
3357
  ,
3317
3358
  ]);
3318
3359
  this.isClientAnketaCondition
3319
3360
  ? await Promise.allSettled([
3320
- ...this.formStore.surveyByHealthBase!.body.map(async question => {
3321
- await this.definedAnswers(question.first.id, 'surveyByHealthBase');
3322
- }),
3323
- ...this.formStore.surveyByHealthBasePolicyholder!.body.map(async question => {
3324
- await this.definedAnswers(question.first.id, 'surveyByHealthBasePolicyholder');
3325
- }),
3326
- ])
3361
+ ...this.formStore.surveyByHealthBase!.body.map(async question => {
3362
+ await this.definedAnswers(question.first.id, 'surveyByHealthBase');
3363
+ }),
3364
+ ...this.formStore.surveyByHealthBasePolicyholder!.body.map(async question => {
3365
+ await this.definedAnswers(question.first.id, 'surveyByHealthBasePolicyholder');
3366
+ }),
3367
+ ])
3327
3368
  : await Promise.allSettled(
3328
- this.formStore.surveyByHealthBase!.body.map(async question => {
3329
- await this.definedAnswers(question.first.id, 'surveyByHealthBase');
3330
- }),
3331
- );
3369
+ this.formStore.surveyByHealthBase!.body.map(async question => {
3370
+ await this.definedAnswers(question.first.id, 'surveyByHealthBase');
3371
+ }),
3372
+ );
3332
3373
  } else {
3333
3374
  await Promise.allSettled([
3334
3375
  this.getQuestionList('health', this.formStore.applicationData.processInstanceId, this.formStore.applicationData.insuredApp[0].id, 'surveyByHealthBase'),
3335
3376
  this.getQuestionList('critical', this.formStore.applicationData.processInstanceId, this.formStore.applicationData.insuredApp[0].id, 'surveyByCriticalBase'),
3336
3377
  this.isClientAnketaCondition &&
3337
- this.getQuestionList(
3338
- 'health',
3339
- this.formStore.applicationData.processInstanceId,
3340
- this.formStore.applicationData.clientApp.id,
3341
- 'surveyByHealthBasePolicyholder',
3342
- 'policyholder',
3343
- ),
3378
+ this.getQuestionList(
3379
+ 'health',
3380
+ this.formStore.applicationData.processInstanceId,
3381
+ this.formStore.applicationData.clientApp.id,
3382
+ 'surveyByHealthBasePolicyholder',
3383
+ 'policyholder',
3384
+ ),
3344
3385
  ]);
3345
3386
  this.isClientAnketaCondition
3346
3387
  ? await Promise.allSettled([
3347
- ...this.formStore.surveyByHealthBase!.body.map(async question => {
3348
- await this.definedAnswers(question.first.id, 'surveyByHealthBase');
3349
- }),
3350
- ...this.formStore.surveyByCriticalBase!.body.map(async question => {
3351
- await this.definedAnswers(question.first.id, 'surveyByCriticalBase');
3352
- }),
3353
- ...this.formStore.surveyByHealthBasePolicyholder!.body.map(async question => {
3354
- await this.definedAnswers(question.first.id, 'surveyByHealthBasePolicyholder');
3355
- }),
3356
- ])
3388
+ ...this.formStore.surveyByHealthBase!.body.map(async question => {
3389
+ await this.definedAnswers(question.first.id, 'surveyByHealthBase');
3390
+ }),
3391
+ ...this.formStore.surveyByCriticalBase!.body.map(async question => {
3392
+ await this.definedAnswers(question.first.id, 'surveyByCriticalBase');
3393
+ }),
3394
+ ...this.formStore.surveyByHealthBasePolicyholder!.body.map(async question => {
3395
+ await this.definedAnswers(question.first.id, 'surveyByHealthBasePolicyholder');
3396
+ }),
3397
+ ])
3357
3398
  : await Promise.allSettled([
3358
- ...this.formStore.surveyByHealthBase!.body.map(async question => {
3359
- await this.definedAnswers(question.first.id, 'surveyByHealthBase');
3360
- }),
3361
- ...this.formStore.surveyByCriticalBase!.body.map(async question => {
3362
- await this.definedAnswers(question.first.id, 'surveyByCriticalBase');
3363
- }),
3364
- ]);
3399
+ ...this.formStore.surveyByHealthBase!.body.map(async question => {
3400
+ await this.definedAnswers(question.first.id, 'surveyByHealthBase');
3401
+ }),
3402
+ ...this.formStore.surveyByCriticalBase!.body.map(async question => {
3403
+ await this.definedAnswers(question.first.id, 'surveyByCriticalBase');
3404
+ }),
3405
+ ]);
3365
3406
  }
3366
3407
  if (this.validateAnketa('surveyByHealthBase')) {
3367
3408
  let hasCriticalAndItsValid = null;
@@ -3640,8 +3681,8 @@ export const useDataStore = defineStore('data', {
3640
3681
  const validDocument = this.isLifetrip
3641
3682
  ? filteredDocuments.find(i => i.type.code === CoreEnums.GBD.DocTypes.PS)
3642
3683
  : filteredDocuments.find(i => i.type.code === CoreEnums.GBD.DocTypes['1UDL']) ??
3643
- filteredDocuments.find(i => i.type.code === CoreEnums.GBD.DocTypes.VNZ) ??
3644
- filteredDocuments.find(i => i.type.code === CoreEnums.GBD.DocTypes.PS);
3684
+ filteredDocuments.find(i => i.type.code === CoreEnums.GBD.DocTypes.VNZ) ??
3685
+ filteredDocuments.find(i => i.type.code === CoreEnums.GBD.DocTypes.PS);
3645
3686
  if (validDocument) {
3646
3687
  const documentType = this.documentTypes.find(
3647
3688
  (i: Value) => i.ids === Object.keys(CoreEnums.GBD.DocTypes)[Object.values(CoreEnums.GBD.DocTypes).indexOf(validDocument.type.code)],
@@ -3710,11 +3751,9 @@ export const useDataStore = defineStore('data', {
3710
3751
  try {
3711
3752
  (Object.keys(local) as Array<keyof GroupMember>).forEach(key => {
3712
3753
  if (key === 'actualAddress' || key === 'legalAddress') {
3713
- const address = `${checkForNull(local[key].country.nameRu)}, ${checkForNull(local[key].state.nameRu)},${
3714
- local[key].region.nameRu ? ` ${local[key].region.nameRu},` : ''
3715
- } ${checkForNull(local[key].regionType.nameRu)} ${checkForNull(local[key].city.nameRu)},${local[key].square ? ` квартал ${local[key].square},` : ''}${
3716
- local[key].microdistrict ? ` мкр ${local[key].microdistrict},` : ''
3717
- } ул. ${checkForNull(local[key].street)}, д. ${checkForNull(local[key].houseNumber)}`;
3754
+ const address = `${checkForNull(local[key].country.nameRu)}, ${checkForNull(local[key].state.nameRu)},${local[key].region.nameRu ? ` ${local[key].region.nameRu},` : ''
3755
+ } ${checkForNull(local[key].regionType.nameRu)} ${checkForNull(local[key].city.nameRu)},${local[key].square ? ` квартал ${local[key].square},` : ''}${local[key].microdistrict ? ` мкр ${local[key].microdistrict},` : ''
3756
+ } ул. ${checkForNull(local[key].street)}, д. ${checkForNull(local[key].houseNumber)}`;
3718
3757
  local[key].longName = address;
3719
3758
  local[key].longNameKz = address;
3720
3759
  }
@@ -4161,6 +4200,16 @@ export const useDataStore = defineStore('data', {
4161
4200
  return null;
4162
4201
  }
4163
4202
  },
4203
+ async getProcessDividendPeriods() {
4204
+ try {
4205
+ if (!this.processCode) return null;
4206
+ const response = await this.api.getProcessDividendPeriods(this.processCode);
4207
+ return response;
4208
+ } catch (err) {
4209
+ ErrorHandler(err);
4210
+ return null;
4211
+ }
4212
+ },
4164
4213
  async checkIIN(iin: string) {
4165
4214
  try {
4166
4215
  const response = await this.api.checkIIN(iin);
package/types/enum.ts CHANGED
@@ -125,6 +125,7 @@ export enum Roles {
125
125
  URAP = 'URAP',
126
126
  TravelAgent = 'TravelAgent',
127
127
  HR = 'HR',
128
+ UsnsHead = 'UsnsHead',
128
129
  }
129
130
 
130
131
  export enum Statuses {
@@ -151,6 +152,7 @@ export enum Statuses {
151
152
  JuristForm = 'JuristForm',
152
153
  AccountantForm = 'AccountantForm',
153
154
  HeadManagerForm = 'HeadManagerForm',
155
+ DeferredContract = 'DeferredContract',
154
156
  }
155
157
 
156
158
  export enum MemberCodes {
package/types/index.ts CHANGED
@@ -905,6 +905,7 @@ export namespace Api {
905
905
  zagsCode?: string;
906
906
  zagsNameKZ?: string;
907
907
  zagsNameRU?: string;
908
+ childGender?: number;
908
909
  };
909
910
  }
910
911