hl-core 0.0.9-beta.52 → 0.0.9-beta.54

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
@@ -959,13 +959,6 @@ export class ApiClass {
959
959
  });
960
960
  }
961
961
 
962
- async getDocument(id: string) {
963
- return await this.axiosCall<any>({
964
- method: Methods.POST,
965
- url: `/${this.productUrl}/api/Application/GetDocument/${id}`,
966
- });
967
- }
968
-
969
962
  async uploadXml(data: any) {
970
963
  return await this.axiosCall<void>({
971
964
  url: `/File/api/Document/UploadXml`,
@@ -1050,4 +1043,18 @@ export class ApiClass {
1050
1043
  data: data,
1051
1044
  });
1052
1045
  }
1046
+
1047
+ async getDocumentsByEdsXmlId(edsXmlId: string) {
1048
+ return await this.axiosCall<any>({
1049
+ method: Methods.GET,
1050
+ url: `/File/api/Sign/GetDocumentsByEdsXmlId/${edsXmlId}`,
1051
+ })
1052
+ }
1053
+
1054
+ async checkSign(id: string) {
1055
+ return await this.axiosCall<SignedState>({
1056
+ method: Methods.POST,
1057
+ url: `/${this.productUrl}/api/Application/CheckSign/${id}`,
1058
+ });
1059
+ }
1053
1060
  }
@@ -8,6 +8,7 @@
8
8
  <v-expansion-panel-text class="border-t-[1px] no-padding">
9
9
  <v-form ref="vForm" class="flex flex-col divide-y">
10
10
  <base-panel-input
11
+ v-if="isSaleChanellShown"
11
12
  class="pl-1 pt-1"
12
13
  v-model="formStore.SaleChanellPolicy"
13
14
  :value="formStore.SaleChanellPolicy?.nameRu"
@@ -19,6 +20,7 @@
19
20
  @append="openPanel('SaleChanellPolicy', $dataStore.t('form.salesChanell'))"
20
21
  />
21
22
  <base-panel-input
23
+ v-if="isRegionShown"
22
24
  class="pl-1 pt-1"
23
25
  v-model="formStore.RegionPolicy"
24
26
  :value="formStore.RegionPolicy?.nameRu"
@@ -30,6 +32,7 @@
30
32
  @append="openPanel('RegionPolicy', $dataStore.t('form.Region'))"
31
33
  />
32
34
  <base-panel-input
35
+ v-if="isManagerShown"
33
36
  class="pl-1 pt-1"
34
37
  v-model="formStore.ManagerPolicy"
35
38
  :value="formStore.ManagerPolicy?.nameRu"
@@ -41,6 +44,7 @@
41
44
  @append="openPanel('ManagerPolicy', $dataStore.t('form.manager'))"
42
45
  />
43
46
  <base-panel-input
47
+ v-if="isAgentShown"
44
48
  class="pl-1 pt-1"
45
49
  v-model="formStore.AgentData"
46
50
  :value="formStore.AgentData?.fullName"
@@ -134,22 +138,37 @@ export default defineComponent({
134
138
  (route.params.taskId !== '0' && (!dataStore.isProcessEditable(formStore.applicationData.statusCode) || !dataStore.isTask())),
135
139
  );
136
140
  const isSaleChanellReadonly = computed(() => {
137
- if (dataStore.isGons) return isReadonly.value || !dataStore.isServiceManager();
141
+ if (dataStore.isGons) return isReadonly.value && dataStore.isServiceManager();
138
142
  return isReadonly.value;
139
143
  });
140
144
  const isRegionReadonly = computed(() => {
141
- if (dataStore.isGons) return isReadonly.value || !dataStore.isServiceManager();
145
+ if (dataStore.isGons) return isReadonly.value && (dataStore.isServiceManager() || dataStore.isAgent());
142
146
  return isReadonly.value;
143
147
  });
144
148
  const isManagerReadonly = computed(() => {
145
- if (dataStore.isGons) return isReadonly.value || !dataStore.isServiceManager();
149
+ if (dataStore.isGons) return isReadonly.value && dataStore.isServiceManager();
146
150
  return isReadonly.value;
147
151
  });
148
152
  const isAgentReadonly = computed(() => {
149
- if (dataStore.isGons || dataStore.isPension) return isReadonly.value || !dataStore.isAgent();
153
+ if (dataStore.isGons || dataStore.isPension) return isReadonly.value && dataStore.isServiceManager();
150
154
  return isReadonly.value;
151
155
  });
152
-
156
+ const isSaleChanellShown = computed(() => {
157
+ if (dataStore.isGons) return dataStore.isServiceManager();
158
+ return true;
159
+ });
160
+ const isRegionShown = computed(() => {
161
+ if (dataStore.isGons) return dataStore.isServiceManager() || dataStore.isAgent();
162
+ return true;
163
+ });
164
+ const isManagerShown = computed(() => {
165
+ if (dataStore.isGons) return dataStore.isServiceManager();
166
+ return true;
167
+ });
168
+ const isAgentShown = computed(() => {
169
+ if (dataStore.isGons || dataStore.isPension) return dataStore.isServiceManager();
170
+ return true;
171
+ });
153
172
  const openPanel = async (currentDict: ManagerAttachmentFiels, title: string) => {
154
173
  searchQuery.value = '';
155
174
  if (dataStore.isTask() && !props.disabled) {
@@ -204,7 +223,9 @@ export default defineComponent({
204
223
  () => formStore.RegionPolicy,
205
224
  (val, oldVal) => {
206
225
  if (val.ids !== oldVal.ids) {
207
- formStore.ManagerPolicy = new Value();
226
+ if (!dataStore.isGons) {
227
+ formStore.ManagerPolicy = new Value();
228
+ }
208
229
  }
209
230
  },
210
231
  );
@@ -244,7 +265,10 @@ export default defineComponent({
244
265
  isRegionReadonly,
245
266
  isManagerReadonly,
246
267
  isAgentReadonly,
247
-
268
+ isSaleChanellShown,
269
+ isRegionShown,
270
+ isManagerShown,
271
+ isAgentShown,
248
272
  // Functions
249
273
  openPanel,
250
274
  searchAgent,
@@ -1,5 +1,11 @@
1
1
  <template>
2
2
  <section :class="[$styles.scrollPage]">
3
+ <base-form-section v-if="isUnderwriterDocuments" title="Загрузить документы для Андеррайтинга" class="mx-[10px] mt-[14px]">
4
+ <base-file-input :readonly="isDisabled || documentLoading" @input.prevent="onUnderFiles($event)" @onClear="onClearUnderFiles()" />
5
+ <base-animation>
6
+ <base-btn v-if="underDocumentsList && underDocumentsList.length" :loading="documentLoading" text="Загрузить" size="sm" class="mt-3" @click="uploadUnderFiles" />
7
+ </base-animation>
8
+ </base-form-section>
3
9
  <section class="w-full px-[10px] pt-[14px] flex flex-col gap-2" v-if="formStore.signedDocumentList && formStore.signedDocumentList.length">
4
10
  <base-content-block
5
11
  v-if="$dataStore.isInitiator() && !$dataStore.isPension && $dataStore.controls.hasChooseSign && formStore.applicationData.statusCode === 'ContractSignedFrom'"
@@ -25,10 +31,7 @@
25
31
  </div>
26
32
  </base-content-block>
27
33
  </section>
28
- <div
29
- v-if="(!formStore.signedDocumentList || !formStore.signedDocumentList.length)"
30
- class="h-[calc(90vh-70px)] flex flex-col items-center justify-center gap-6"
31
- >
34
+ <div v-if="!formStore.signedDocumentList || !formStore.signedDocumentList.length" class="h-[calc(90vh-70px)] flex flex-col items-center justify-center gap-6">
32
35
  <svg xmlns="http://www.w3.org/2000/svg" width="125" height="131" viewBox="0 0 125 131" fill="none" class="cursor-help">
33
36
  <path
34
37
  fill-rule="evenodd"
@@ -52,26 +55,26 @@
52
55
  <base-content-block :class="[$styles.textSimple]">
53
56
  <h5 class="text-center font-medium mb-4">{{ $dataStore.t('labels.statements') }}</h5>
54
57
  <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
55
- <span class="ml-2">Заявления на {{ processCode == 1 ? 'страхование' : 'возврат' }}</span>
58
+ <span class="ml-2">Заявления на {{ processCode == 19 ? 'страхование' : 'возврат' }}</span>
56
59
  <i
57
60
  class="transition-all cursor-pointer mdi mdi-paperclip pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
58
61
  :class="[$styles.greenTextHover]"
59
- @click="$dataStore.generatePDFDocument(processCode == 1 ? 'PA_Statement' : 'PA_RefundStatement', '37')"
62
+ @click="$dataStore.generatePDFDocument(processCode == 19 ? 'PA_Statement' : 'PA_RefundStatement', '37')"
60
63
  ></i>
61
64
  </div>
62
65
  </base-content-block>
63
66
  <base-content-block :class="[$styles.textSimple]">
64
67
  <h5 class="text-center font-medium mb-4">{{ $dataStore.t('labels.contract') }}</h5>
65
68
  <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
66
- <span class="ml-2">Договор {{ processCode == 1 ? 'страхования' : 'возврата' }}</span>
69
+ <span class="ml-2">Договор {{ processCode == 19 ? 'страхования' : 'возврата' }}</span>
67
70
  <i
68
71
  class="transition-all cursor-pointer mdi mdi-paperclip pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
69
72
  :class="[$styles.greenTextHover]"
70
- @click="$dataStore.generatePDFDocument(processCode == 1 ? 'PA_Contract' : 'PA_RefundAgreement', '38')"
73
+ @click="$dataStore.generatePDFDocument(processCode == 19 ? 'PA_Contract' : 'PA_RefundAgreement', '38')"
71
74
  ></i>
72
75
  </div>
73
76
  </base-content-block>
74
- <base-content-block :class="[$styles.textSimple]" v-if="formStore.applicationData.statusCode !== 'StartForm' && processCode == 1">
77
+ <base-content-block :class="[$styles.textSimple]" v-if="formStore.applicationData.statusCode !== 'StartForm' && processCode == 19">
75
78
  <h5 class="text-center font-medium mb-4">{{ $dataStore.t('pension.complianceFinMonitoring') }}</h5>
76
79
  <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
77
80
  <span class="ml-2">{{ $dataStore.t('pension.complianceFinMonitoring') }}</span>
@@ -82,7 +85,7 @@
82
85
  ></i>
83
86
  </div>
84
87
  </base-content-block>
85
- <base-content-block :class="[$styles.textSimple]" v-if="formStore.applicationData.statusCode === 'PreparationDossierForm' && processCode == 1">
88
+ <base-content-block :class="[$styles.textSimple]" v-if="formStore.applicationData.statusCode === 'PreparationDossierForm' && processCode == 19">
86
89
  <h5 class="text-center font-medium mb-4">{{ $dataStore.t('pension.dossierPA') }}</h5>
87
90
  <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
88
91
  <span class="ml-2">{{ $dataStore.t('pension.dossierPA') }}</span>
@@ -99,13 +102,9 @@
99
102
  <div :class="[$styles.flexColNav]">
100
103
  <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')" />
101
104
  <base-btn :disabled="documentLoading" :loading="documentLoading" text="Скачать" @click="getFile('download')" />
102
- <base-btn
103
- v-if="$dataStore.isPension && $dataStore.isProcessEditable(formStore.applicationData.statusCode)"
104
- :disabled="documentLoading"
105
- :loading="documentLoading"
106
- text="Удалить"
107
- @click="deletionDialog = true"
108
- />
105
+ <base-animation>
106
+ <base-btn v-if="canDeleteFiles" :disabled="documentLoading" :loading="documentLoading" text="Удалить" @click="deletionDialog = true" />
107
+ </base-animation>
109
108
  </div>
110
109
  </base-fade-transition>
111
110
  </Teleport>
@@ -123,6 +122,7 @@
123
122
 
124
123
  <script lang="ts">
125
124
  import { DocumentItem } from '../../composables/classes';
125
+ import { uuid } from 'vue-uuid';
126
126
 
127
127
  export default defineComponent({
128
128
  setup() {
@@ -149,6 +149,18 @@ export default defineComponent({
149
149
  action: '',
150
150
  text: '',
151
151
  });
152
+ const underDocumentsList = ref<
153
+ {
154
+ file: File;
155
+ fileName: string;
156
+ identifier: string;
157
+ fileTypeId: string;
158
+ fileTypeCode: string;
159
+ fileTypeName: string;
160
+ processInstanceId: string;
161
+ }[]
162
+ >([]);
163
+
152
164
  const object_list = computed(() => Object.values(formStore.signedDocumentList));
153
165
  const unSignedList = computed(() => document_list.value.filter((doc: DocumentItem) => doc.signed === false || doc.signed === null));
154
166
  const document_list = computed(() =>
@@ -161,6 +173,21 @@ export default defineComponent({
161
173
  const showContract = computed(
162
174
  () => formStore.applicationData && (formStore.applicationData.statusCode === 'Completed' || formStore.applicationData.statusCode === 'PreparationDossierForm'),
163
175
  );
176
+ const isUnderwriterDocuments = computed(
177
+ () =>
178
+ (dataStore.isAULETTI || dataStore.isAulettiParent) &&
179
+ dataStore.isInitiator() &&
180
+ formStore.applicationData &&
181
+ (formStore.applicationData.statusCode === 'StartForm' || formStore.applicationData.statusCode === 'EditForm'),
182
+ );
183
+ const canDeleteFiles = computed(() => {
184
+ const baseCondition = dataStore.isTask() && dataStore.isInitiator() && dataStore.isProcessEditable(formStore.applicationData.statusCode);
185
+ if (dataStore.isAULETTI || dataStore.isAulettiParent) {
186
+ return baseCondition && (currentDocument.value ? currentDocument.value.fileTypeCode === '46' : false);
187
+ }
188
+ if (dataStore.isPension) return baseCondition;
189
+ return false;
190
+ });
164
191
 
165
192
  const openPanel = async (document: DocumentItem) => {
166
193
  dataStore.rightPanel.title = document.fileTypeName!;
@@ -188,6 +215,48 @@ export default defineComponent({
188
215
  }
189
216
  };
190
217
 
218
+ const onUnderFiles = async (event: InputEvent) => {
219
+ if (event.target || event.dataTransfer) {
220
+ const files = event.target ? (event.target as HTMLInputElement).files : (event.dataTransfer as DataTransfer).files;
221
+ if (files !== null) {
222
+ const underDocumentType = dataStore.dicFileTypeList.find(i => i.code === '46');
223
+ Object.values(files).map(file => {
224
+ const uuidV4 = uuid.v4();
225
+ underDocumentsList.value.push({
226
+ file: file,
227
+ identifier: `${uuidV4}${file.name.substring(file.name.lastIndexOf('.'))}`,
228
+ processInstanceId: String(formStore.applicationData.processInstanceId),
229
+ fileTypeId: underDocumentType ? String(underDocumentType.id) : '',
230
+ fileTypeCode: underDocumentType ? String(underDocumentType.code) : '',
231
+ fileTypeName: underDocumentType ? String(underDocumentType.nameRu) : '',
232
+ fileName: file.name ? file.name : underDocumentType ? String(underDocumentType.nameRu) : '',
233
+ });
234
+ });
235
+ }
236
+ }
237
+ };
238
+
239
+ const onClearUnderFiles = () => {
240
+ underDocumentsList.value = [];
241
+ };
242
+
243
+ const uploadUnderFiles = async () => {
244
+ if (underDocumentsList.value) {
245
+ documentLoading.value = true;
246
+ await Promise.allSettled(
247
+ Object.values(underDocumentsList.value).map(async value => {
248
+ const formData = new FormData();
249
+ formData.append('file', value.file);
250
+ formData.append('fileData', JSON.stringify([{ ...value, file: undefined }]));
251
+ await dataStore.uploadFiles(formData, false);
252
+ }),
253
+ );
254
+ onClearUnderFiles();
255
+ await dataStore.getSignedDocList(formStore.applicationData.processInstanceId);
256
+ documentLoading.value = false;
257
+ }
258
+ };
259
+
191
260
  watch(
192
261
  () => document_list.value,
193
262
  () => {
@@ -246,16 +315,22 @@ export default defineComponent({
246
315
  signedContract,
247
316
  deletionDialog,
248
317
  processCode,
318
+ underDocumentsList,
249
319
 
250
320
  // Computed
251
321
  isDisabled,
252
322
  showContract,
323
+ canDeleteFiles,
324
+ isUnderwriterDocuments,
253
325
 
254
326
  // Functions
255
- openPanel,
256
327
  getFile,
257
- onFileChange,
328
+ openPanel,
258
329
  deleteFile,
330
+ onFileChange,
331
+ onUnderFiles,
332
+ uploadUnderFiles,
333
+ onClearUnderFiles,
259
334
  };
260
335
  },
261
336
  });
@@ -460,7 +460,7 @@
460
460
  v-model="member.documentIssuers"
461
461
  :value="member.documentIssuers?.nameRu"
462
462
  :label="$dataStore.t('form.documentIssuers')"
463
- :readonly="isDisabled || !!member.parsedDocument?.documentIssuer"
463
+ :readonly="isDisabled"
464
464
  :clearable="!isDisabled"
465
465
  :rules="$rules.objectRequired"
466
466
  append-inner-icon="mdi mdi-chevron-right"
@@ -1359,7 +1359,7 @@ export default {
1359
1359
  if (whichForm.value == formStore.policyholderFormKey || (dataStore.isPension && whichForm.value == formStore.insuredFormKey)) {
1360
1360
  if (route.params.taskId === '0') {
1361
1361
  try {
1362
- const taskId = await dataStore.startApplication(member.value, dataStore.isPension ? (String(route.query.type) === 'joint' ? 4 : 1) : undefined);
1362
+ const taskId = await dataStore.startApplication(member.value, dataStore.isPension ? (String(route.query.type) === 'joint' ? 4 : 19) : undefined);
1363
1363
  if (typeof taskId === 'string') {
1364
1364
  await dataStore.getApplicationData(taskId, false, false, false, false);
1365
1365
  remoteIsInsured.value = formStore.applicationData.clientApp.isInsured;
@@ -9,7 +9,7 @@
9
9
  icon="mdi-alert text-[#FCB016]"
10
10
  ></base-message-block>
11
11
  <base-form-section
12
- v-if="isUnderwriterRole && $dataStore.hasClientAnketa && $dataStore.isClientAnketaCondition && whichProduct !== 'pensionannuity'"
12
+ v-if="isUnderwriterRole && $dataStore.hasClientAnketa && $dataStore.isClientAnketaCondition && whichProduct !== 'pensionannuitynew'"
13
13
  :title="$dataStore.t('policyholderForm')"
14
14
  >
15
15
  <base-form-input
@@ -36,7 +36,7 @@
36
36
  <base-form-input v-model="formStore.policyholderForm.gender.nameRu" class="mb-4" :label="$dataStore.t('form.gender')" :readonly="true" />
37
37
  </base-form-section>
38
38
  <base-form-section
39
- v-if="isUnderwriterRole && $dataStore.members.insuredApp.has === true && whichProduct !== 'lifebusiness' && whichProduct !== 'gns' && whichProduct !== 'pensionannuity'"
39
+ v-if="isUnderwriterRole && $dataStore.members.insuredApp.has === true && whichProduct !== 'lifebusiness' && whichProduct !== 'gns' && whichProduct !== 'pensionannuitynew'"
40
40
  :title="$dataStore.t('insuredForm')"
41
41
  >
42
42
  <div v-for="(insured, index) of formStore.insuredForm" :key="index">
@@ -49,7 +49,7 @@
49
49
  </div>
50
50
  </base-form-section>
51
51
  <base-form-section
52
- v-if="isUnderwriterRole && whichProduct !== 'lifebusiness' && whichProduct !== 'gns' && whichProduct !== 'pensionannuity'"
52
+ v-if="isUnderwriterRole && whichProduct !== 'lifebusiness' && whichProduct !== 'gns' && whichProduct !== 'pensionannuitynew'"
53
53
  :title="$dataStore.t('recalculationInfo')"
54
54
  >
55
55
  <base-form-input
@@ -281,7 +281,7 @@
281
281
  @append="openPanel($dataStore.t('productConditionsForm.processGfot'), $dataStore.processGfot, 'processGfot', $dataStore.getProcessGfot)"
282
282
  />
283
283
  </base-form-section>
284
- <section v-if="whichProduct === 'pensionannuity'">
284
+ <section v-if="whichProduct === 'pensionannuitynew'">
285
285
  <base-form-section :title="$dataStore.t('pension.compulsoryAmount&Prof')">
286
286
  <base-form-input
287
287
  v-model="pensionCalculationParams.compulsoryContractAmount"
@@ -383,6 +383,7 @@
383
383
  class="pension-guaranteed-period"
384
384
  :readonly="isDisabled"
385
385
  :clearable="!isDisabled"
386
+ :rules="$rules.notZero"
386
387
  :label="$dataStore.t('pension.guaranteedPeriod')"
387
388
  :items="guaranteedPeriodList"
388
389
  :hide-details="true"
@@ -971,7 +972,7 @@ export default defineComponent({
971
972
  return isDisabled.value;
972
973
  });
973
974
  const hasDefault = computed(() => {
974
- if (whichProduct.value === 'lifetrip' || whichProduct.value === 'pensionannuity') {
975
+ if (whichProduct.value === 'lifetrip' || whichProduct.value === 'pensionannuitynew') {
975
976
  return false;
976
977
  }
977
978
  return true;
@@ -1078,7 +1079,7 @@ export default defineComponent({
1078
1079
  if (whichProduct.value === 'lifetrip') {
1079
1080
  // @ts-ignore
1080
1081
  calculatorForm[currentPanel.value] = item.nameRu === null ? new Value() : item;
1081
- } else if (whichProduct.value === 'pensionannuity') {
1082
+ } else if (whichProduct.value === 'pensionannuitynew') {
1082
1083
  // @ts-ignore
1083
1084
  pensionForm[currentPanel.value] = item.nameRu === null ? new Value() : item;
1084
1085
  } else {
@@ -1429,7 +1430,7 @@ export default defineComponent({
1429
1430
  } else {
1430
1431
  await dataStore.calculatePrice();
1431
1432
  }
1432
- } else if (whichProduct.value === 'pensionannuity') {
1433
+ } else if (whichProduct.value === 'pensionannuitynew') {
1433
1434
  if (
1434
1435
  pensionCalculationParams.value &&
1435
1436
  pensionCalculationParams.value.compulsoryProfContractAmount &&
@@ -1578,7 +1579,7 @@ export default defineComponent({
1578
1579
  if (dataStore.isCalculator) {
1579
1580
  clearFields();
1580
1581
  }
1581
- if (whichProduct.value !== 'lifetrip' && whichProduct.value !== 'pensionannuity') {
1582
+ if (whichProduct.value !== 'lifetrip' && whichProduct.value !== 'pensionannuitynew') {
1582
1583
  if (
1583
1584
  (dataStore.isCalculator || route.params.taskId === '0') &&
1584
1585
  productConditionsForm.requestedSumInsured === null &&
@@ -1633,7 +1634,7 @@ export default defineComponent({
1633
1634
  }, 0),
1634
1635
  );
1635
1636
  }
1636
- if (whichProduct.value === 'pensionannuity') {
1637
+ if (whichProduct.value === 'pensionannuitynew') {
1637
1638
  contractDate.value = reformatDate(formStore.applicationData.pensionApp.contractDate);
1638
1639
  dateOfBegin.value = reformatDate(formStore.applicationData.pensionApp.dateOfBegin);
1639
1640
  transferContractDate.value = reformatDate(formStore.applicationData.pensionApp.transferContractDate);
@@ -34,7 +34,13 @@
34
34
  <base-btn :text="$dataStore.t('buttons.sendElectronically')" :disabled="isElectronicDisabled" :loading="loading" @click="handleSignAction('electronic')" />
35
35
  <base-btn :text="$dataStore.t('buttons.generatePrintedForms')" :disabled="isScansDisabled" :loading="loading" @click="handleSignAction('scans')" />
36
36
  <base-btn :text="$dataStore.t('buttons.sendEgovMob')" :disabled="isQrDisabled" :loading="loading" @click="handleSignAction('qr')" />
37
- <base-btn v-if="$dataStore.isPension" :text="$dataStore.t('buttons.signWithSignature')" :loading="loading" @click="handleSignAction('signature')" />
37
+ <base-btn
38
+ v-if="$dataStore.isPension"
39
+ :text="$dataStore.t('buttons.signWithSignature')"
40
+ :disabled="isSignatureDisabled"
41
+ :loading="loading"
42
+ @click="handleSignAction('signature')"
43
+ />
38
44
  <base-btn
39
45
  v-if="$dataStore.isPension"
40
46
  :text="$dataStore.t('buttons.signWithSignatureXML')"
@@ -48,17 +54,19 @@
48
54
  </div>
49
55
  <div v-if="isScansDocuments" :class="[$styles.flexColNav]">
50
56
  <div v-if="$dataStore.isPension">
51
- <div v-if="processCode == 1">
52
- <div v-if="formStore.applicationData.statusCode === 'ContractSignedByAuthorizedPerson' || formStore.applicationData.statusCode === 'ContractSignedFrom'">
57
+ <div v-if="processCode == 19">
58
+ <div v-if="formStore.applicationData.statusCode === 'HeadManagerForm' || formStore.applicationData.statusCode === 'ContractSignedFrom'">
53
59
  <base-btn :text="$dataStore.t('buttons.downloadContract')" :loading="$dataStore.isButtonsLoading" @click="$dataStore.generatePDFDocument('PA_Contract', '38')" />
54
60
  <base-form-section class="mt-4 flex flex-col !gap-2" :title="$dataStore.t('clients.attachScansSignDocs')">
55
61
  <base-file-input :label="$dataStore.t('labels.attachContract')" @input.prevent="onFileChangeScans($event, 'pa_contract')" @onClear="onClearFile('pa_contract')" />
56
62
  </base-form-section>
57
63
  </div>
58
- <div v-else>
64
+ <div v-else class="flex flex-col gap-2">
59
65
  <base-btn :text="$dataStore.t('buttons.downloadStatement')" :loading="$dataStore.isButtonsLoading" @click="$dataStore.generatePDFDocument('PA_Statement', '37')" />
66
+ <base-btn :text="$dataStore.t('buttons.downloadAgreement')" :loading="$dataStore.isButtonsLoading" @click="$dataStore.generatePDFDocument('Agreement', '19')" />
60
67
  <base-form-section class="mt-4 flex flex-col !gap-2" :title="$dataStore.t('clients.attachScansSignDocs')">
61
68
  <base-file-input :label="$dataStore.t('labels.attachStatement')" @input.prevent="onFileChangeScans($event, 'pa_statement')" @onClear="onClearFile('pa_statement')" />
69
+ <base-file-input :label="$dataStore.t('labels.attachAgreement')" @input.prevent="onFileChangeScans($event, 'agreement')" @onClear="onClearFile('agreement')" />
62
70
  </base-form-section>
63
71
  </div>
64
72
  </div>
@@ -88,7 +96,7 @@
88
96
  </base-form-section>
89
97
  </div>
90
98
  </div>
91
- <div v-else>
99
+ <div :class="[$styles.flexColNav]" v-else>
92
100
  <base-btn :text="$dataStore.t('buttons.downloadStatement')" @click="downloadTemplate(constants.documentTypes.statement, 'docx')" />
93
101
  <base-btn :text="$dataStore.t('buttons.downloadContract')" @click="downloadTemplate(constants.documentTypes.contract, 'doc')" />
94
102
  <base-btn :text="$dataStore.t('buttons.downloadApplication')" @click="downloadTemplate(constants.documentTypes.application1, 'vnd.ms-excel')" />
@@ -277,7 +285,7 @@ export default defineComponent({
277
285
  (pensionForm.compulsoryProfContractAmount && pensionForm.compulsoryProfContractAmount !== 0) ||
278
286
  (pensionForm.voluntaryContractAmount && pensionForm.voluntaryContractAmount !== 0)),
279
287
  );
280
- const consentGiven = computed(() => !!formStore.signedDocumentList.find(i => i.fileTypeCode === '43')?.signed && needsAgreement.value);
288
+ const consentGiven = computed(() => !!formStore.signedDocumentList.find(i => i.fileTypeCode === '43')?.signed);
281
289
  const affiliationDocument = computed(() => formStore.signedDocumentList.find((file: DocumentItem) => file.fileTypeName === 'Решение АС'));
282
290
  const affiliationData = ref<{
283
291
  processInstanceId: string | number;
@@ -324,7 +332,7 @@ export default defineComponent({
324
332
 
325
333
  const onFileChangeScans = async (
326
334
  event: InputEvent,
327
- type: 'statement' | 'pa_statement' | 'pa_refundstatement' | 'contract' | 'pa_contract' | 'pa_refundagreement' | 'app' | 'attorney',
335
+ type: 'statement' | 'pa_statement' | 'pa_refundstatement' | 'contract' | 'pa_contract' | 'pa_refundagreement' | 'app' | 'attorney' | 'agreement',
328
336
  ) => {
329
337
  if (event.target) {
330
338
  const files = (event.target as HTMLInputElement).files;
@@ -344,13 +352,15 @@ export default defineComponent({
344
352
  }
345
353
  };
346
354
 
347
- const onClearFile = async (type: 'statement' | 'pa_statement' | 'pa_refundstatement' | 'contract' | 'pa_contract' | 'pa_refundagreement' | 'app' | 'attorney') => {
355
+ const onClearFile = async (
356
+ type: 'statement' | 'pa_statement' | 'pa_refundstatement' | 'contract' | 'pa_contract' | 'pa_refundagreement' | 'app' | 'attorney' | 'agreement',
357
+ ) => {
348
358
  const doc = await selectedDocument(type);
349
359
  const result = scansFiles.value.filter(i => JSON.parse(i.fileData)[0].fileTypeCode !== doc.code);
350
360
  scansFiles.value = result;
351
361
  };
352
362
 
353
- const selectedDocument = (type: 'statement' | 'pa_statement' | 'pa_refundstatement' | 'contract' | 'pa_contract' | 'pa_refundagreement' | 'app' | 'attorney') => {
363
+ const selectedDocument = (type: 'statement' | 'pa_statement' | 'pa_refundstatement' | 'contract' | 'pa_contract' | 'pa_refundagreement' | 'app' | 'attorney' | 'agreement') => {
354
364
  let selectedDocument: any;
355
365
  if (type === 'statement') {
356
366
  selectedDocument = dataStore.dicFileTypeList.find((i: Value) => i.code === '32');
@@ -376,11 +386,20 @@ export default defineComponent({
376
386
  if (type === 'attorney') {
377
387
  selectedDocument = dataStore.dicFileTypeList.find((i: Value) => i.code === '34');
378
388
  }
389
+ if (type === 'agreement') {
390
+ selectedDocument = dataStore.dicFileTypeList.find((i: Value) => i.code === '19');
391
+ }
379
392
  return selectedDocument;
380
393
  };
381
394
 
382
395
  const sendFiles = async () => {
383
- if (dataStore.isPension ? scansFiles.value.length !== 1 : scansFiles.value.length !== 4) {
396
+ if (
397
+ dataStore.isPension
398
+ ? formStore.applicationData.statusCode === 'ContractSignedFrom'
399
+ ? scansFiles.value.length !== 1
400
+ : scansFiles.value.length !== 2
401
+ : scansFiles.value.length !== 4
402
+ ) {
384
403
  dataStore.showToaster('warning', dataStore.t('toaster.notAllDocumentsAttached'));
385
404
  return;
386
405
  }
@@ -542,44 +561,39 @@ export default defineComponent({
542
561
  return true;
543
562
  });
544
563
  const isElectronicDisabled = computed(() => {
545
- if (dataStore.isGons) {
564
+ if (dataStore.isGons || dataStore.isLifeBusiness || dataStore.isGns || dataStore.isPension) {
546
565
  return true;
547
566
  }
548
- if (formStore.applicationData.statusCode === 'ContractSignedByAuthorizedPerson') {
549
- return true;
550
- }
551
- if (needsAgreement.value) {
552
- if (!consentGiven.value && dataStore.isPension) {
553
- return true;
554
- }
555
- }
556
567
  return false;
557
568
  });
558
569
  const isScansDisabled = computed(() => {
559
570
  if (dataStore.isGons) {
560
571
  return true;
561
572
  }
562
- if (needsAgreement.value) {
563
- if (!consentGiven.value && dataStore.isPension && formStore.applicationData.statusCode !== 'ContractSignedFrom') {
564
- return true;
565
- }
573
+ if (!consentGiven.value && dataStore.isPension) {
574
+ return true;
566
575
  }
567
576
  return false;
568
577
  });
569
578
  const isQrDisabled = computed(() => {
570
- if (needsAgreement.value) {
571
- if (!consentGiven.value && dataStore.isPension) {
572
- return true;
573
- }
574
- }
575
- if (dataStore.isLifeBusiness || dataStore.isGns) {
576
- return false;
579
+ if (dataStore.isPension) {
580
+ return !!needsAgreement.value && !consentGiven.value;
577
581
  }
578
582
  return true;
579
583
  });
580
584
  const isQrXmlDisabled = computed(() => {
581
- if (consentGiven.value && needsAgreement.value) {
582
- return false;
585
+ if (dataStore.isPension) {
586
+ if (consentGiven.value && needsAgreement.value) {
587
+ return false;
588
+ }
589
+ }
590
+ return true;
591
+ });
592
+ const isSignatureDisabled = computed(() => {
593
+ if (dataStore.isPension) {
594
+ if (!consentGiven.value) {
595
+ return false;
596
+ }
583
597
  }
584
598
  return true;
585
599
  });
@@ -654,7 +668,7 @@ export default defineComponent({
654
668
  };
655
669
 
656
670
  const startConnection = async (uuid: string, groupId?: string) => {
657
- connection.value = new HubConnectionBuilder().withUrl(`https://test-sign.halyklife.kz/qrhub/${uuid}`).withAutomaticReconnect().build();
671
+ connection.value = new HubConnectionBuilder().withUrl(`${getStrValuePerEnv('qrHubUrl')}/${uuid}`).withAutomaticReconnect().build();
658
672
  try {
659
673
  await connection.value.start();
660
674
  console.log('SignalR connection started.');
@@ -671,7 +685,7 @@ export default defineComponent({
671
685
  await stopConnection();
672
686
  } else {
673
687
  console.log('message from SignalR', message);
674
- if (message.signed) {
688
+ if (message.signed === true) {
675
689
  isQrLoading.value = false;
676
690
  qrUrl.value = '';
677
691
  isQr.value = false;
@@ -690,6 +704,10 @@ export default defineComponent({
690
704
  dataStore.showToaster('success', dataStore.t('pension.consentGiven'), 3000);
691
705
  }
692
706
  await stopConnection();
707
+ } else {
708
+ if (message.error) {
709
+ dataStore.showToaster('error', message.error, 3000);
710
+ }
693
711
  }
694
712
  }
695
713
  });
@@ -831,6 +849,7 @@ export default defineComponent({
831
849
  isScansDisabled,
832
850
  isQrDisabled,
833
851
  isQrXmlDisabled,
852
+ isSignatureDisabled,
834
853
  choosePayActions,
835
854
  consentGiven,
836
855
  needsAgreement,
@@ -1590,6 +1590,11 @@ export class PhysGroupClass extends BaseGroupClass {
1590
1590
  placeOfBirth: Value;
1591
1591
  workDetails: { workplace: string; position: string; jobDuties: string };
1592
1592
  hasContactPerson: boolean;
1593
+ authorityDetails: {
1594
+ basis: Value;
1595
+ documentNumber: string | null;
1596
+ date: string | null;
1597
+ };
1593
1598
  constructor() {
1594
1599
  super();
1595
1600
  this.lastName = '';
@@ -1600,16 +1605,17 @@ export class PhysGroupClass extends BaseGroupClass {
1600
1605
  this.placeOfBirth = new Value();
1601
1606
  this.workDetails = { workplace: '', position: '', jobDuties: '' };
1602
1607
  this.hasContactPerson = false;
1608
+ this.authorityDetails = {
1609
+ basis: new Value(),
1610
+ documentNumber: null,
1611
+ date: null,
1612
+ };
1603
1613
  }
1604
1614
  }
1605
1615
 
1606
1616
  export class GroupMember extends PhysGroupClass {
1607
1617
  isLeader: boolean;
1608
- authorityDetails: {
1609
- basis: Value;
1610
- documentNumber: string | null;
1611
- date: string | null;
1612
- };
1618
+
1613
1619
  typeOfEconomicActivity: Value;
1614
1620
  activityTypes: { activityTypeName: string; empoloyeeCount: number }[];
1615
1621
  beneficalOwnerQuest: { order: number; text: string; answer: boolean | null }[];
@@ -1619,11 +1625,6 @@ export class GroupMember extends PhysGroupClass {
1619
1625
  super();
1620
1626
  // Client
1621
1627
  this.isLeader = false;
1622
- this.authorityDetails = {
1623
- basis: new Value(),
1624
- documentNumber: null,
1625
- date: null,
1626
- };
1627
1628
  this.typeOfEconomicActivity = new Value();
1628
1629
  this.activityTypes = [];
1629
1630
  this.beneficalOwnerQuest = [
@@ -17,6 +17,7 @@ export const constants = Object.freeze({
17
17
  amuletlife: 15,
18
18
  gns: 16,
19
19
  prepensionannuity: 18,
20
+ pensionannuitynew: 19,
20
21
  },
21
22
  amlProducts: {
22
23
  checkcontragent: 1,
@@ -25,37 +26,44 @@ export const constants = Object.freeze({
25
26
  extractedProducts: ['dso', 'uu'],
26
27
  editableStatuses: [Statuses.StartForm, Statuses.EditBeneficiaryForm, Statuses.EditForm, Statuses.InputDataForm],
27
28
  documentsLinkVisibleStatuses: [
28
- Statuses.DocumentsSignedFrom,
29
- Statuses.DocumentsSignedClientFrom,
29
+ Statuses.Completed,
30
30
  Statuses.UnderwriterForm,
31
+ Statuses.DocumentsSignedFrom,
31
32
  Statuses.AffilationResolutionForm,
32
- Statuses.Completed,
33
+ Statuses.DocumentsSignedClientFrom,
33
34
  Statuses.InsurancePremiumOnlinePaid,
34
35
  ],
35
36
  returnStatementStatuses: [
36
- Statuses.DocumentsSignedFrom,
37
- Statuses.DocumentsSignedClientFrom,
38
- Statuses.ContractSignedFrom,
39
- Statuses.WaitingInsurancePremiumForm,
40
- Statuses.UnderwriterForm,
41
37
  Statuses.ApproveForm,
42
38
  Statuses.ActuaryForm,
43
- Statuses.ControllerDpForm,
44
39
  Statuses.DsoUsnsForm,
45
40
  Statuses.AccountantForm,
41
+ Statuses.UnderwriterForm,
42
+ Statuses.ControllerDpForm,
43
+ Statuses.ContractSignedFrom,
44
+ Statuses.DocumentsSignedFrom,
45
+ Statuses.DocumentsSignedClientFrom,
46
+ Statuses.WaitingInsurancePremiumForm,
46
47
  ],
47
48
  cancelApplicationStatuses: [
48
- Statuses.StartForm,
49
49
  Statuses.EditForm,
50
+ Statuses.StartForm,
51
+ Statuses.ContractSignedFrom,
50
52
  Statuses.EditBeneficiaryForm,
51
- Statuses.WaitingInsurancePremiumForm,
52
53
  Statuses.DocumentsSignedFrom,
54
+ Statuses.AttachAppContractForm,
55
+ Statuses.PreparationDossierForm,
53
56
  Statuses.DocumentsSignedClientFrom,
57
+ Statuses.WaitingInsurancePremiumForm,
58
+ ],
59
+ rejectApplicationStatuses: [
60
+ Statuses.StartForm,
61
+ Statuses.DsoUsnsForm,
62
+ Statuses.AccountantForm,
63
+ Statuses.HeadManagerForm,
54
64
  Statuses.ContractSignedFrom,
55
65
  Statuses.AttachAppContractForm,
56
- Statuses.PreparationDossierForm,
57
66
  ],
58
- rejectApplicationStatuses: [Statuses.StartForm, Statuses.AttachAppContractForm, Statuses.DsoUsnsForm, Statuses.AccountantForm, Statuses.ContractSignedByAuthorizedPerson, Statuses.ContractSignedFrom],
59
67
  gbdErrors: ['INVALID', 'TIMEOUT', 'ERROR', 'NOT_FOUND'],
60
68
  roles: Roles,
61
69
  actions: Actions,
@@ -341,6 +341,7 @@ export const getLastDayOfMonth = (year: number, month: number) => {
341
341
  };
342
342
 
343
343
  type WhichValuePerEnv =
344
+ | 'qrHubUrl'
344
345
  | 'qrGenUrl'
345
346
  | 'qrXmlGenUrl'
346
347
  | 'gatewayApiUrl'
@@ -358,6 +359,11 @@ export const getStrValuePerEnv = (which: WhichValuePerEnv) => {
358
359
  [key in EnvModes]: string;
359
360
  };
360
361
  } = {
362
+ qrHubUrl: {
363
+ production: 'https://prod-sign.halyklife.kz/qrhub',
364
+ development: 'https://test-sign.halyklife.kz/qrhub',
365
+ test: 'https://test-sign.halyklife.kz/qrhub',
366
+ },
361
367
  qrGenUrl: {
362
368
  production: 'https://prod-sign.halyklife.kz/EgovQrCms',
363
369
  development: 'https://test-sign.halyklife.kz/EgovQrCms',
package/locales/ru.json CHANGED
@@ -218,6 +218,7 @@
218
218
  "fromKGD": "КГД",
219
219
  "generatePrintedForms": "Сформировать печатные формы",
220
220
  "downloadStatement": "Скачать заявление",
221
+ "downloadAgreement": "Скачать согласие",
221
222
  "downloadApplication": "Скачать приложение №1",
222
223
  "downloadPowerOfAttorney": "Скачать доверенность",
223
224
  "downloadPARefundStatement": "Скачать заявление на страхование возврат в ЕНПФ ПА",
@@ -445,7 +446,8 @@
445
446
  "dateCreated": "Дата начала",
446
447
  "factEndDate": "Дата завершения",
447
448
  "decision": "Статус",
448
- "userFullName": "Исполнитель"
449
+ "userFullName": "Исполнитель",
450
+ "stage":"Этап"
449
451
  },
450
452
  "aml": {
451
453
  "contractSignDate": "Дата заключение контракта",
@@ -805,6 +807,7 @@
805
807
  "inDetails": "Подробно",
806
808
  "attachContract": "Вложить договор",
807
809
  "attachStatement": "Вложить заявление",
810
+ "attachAgreement": "Вложить согласие",
808
811
  "attachApplication": "Вложить приложение №1",
809
812
  "attachPowerOfAttorney": "Вложить доверенность",
810
813
  "noDocuments": "Нет документов для просмотра",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hl-core",
3
- "version": "0.0.9-beta.52",
3
+ "version": "0.0.9-beta.54",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "main": "nuxt.config.ts",
@@ -28,8 +28,8 @@
28
28
  "dev": "nuxt dev",
29
29
  "generate": "nuxt generate",
30
30
  "preview": "nuxt preview",
31
- "tk:all": "cd .. && cd amuletlife && yarn typecheck && cd .. && cd baiterek && yarn typecheck && cd .. && cd bolashak && yarn typecheck && cd .. && cd calc && yarn typecheck && cd .. && cd daskamkorlyk && yarn typecheck && cd .. && cd efo && yarn typecheck && cd .. && cd gons && yarn typecheck && cd .. && cd halykkazyna && yarn typecheck && cd .. && cd lifebusiness && yarn typecheck && cd .. && cd gns && yarn typecheck && cd .. && cd liferenta && yarn typecheck && cd .. && cd lifetrip && yarn typecheck && cd .. && cd pensionannuity && yarn typecheck && cd .. && cd prepensionannuity && yarn typecheck && cd .. && cd core",
32
- "i:all": "cd .. && cd amuletlife && yarn && cd .. && cd baiterek && yarn && cd .. && cd bolashak && yarn && cd .. && cd calc && yarn && cd .. && cd daskamkorlyk && yarn && cd .. && cd efo && yarn && cd .. && cd gons && yarn && cd .. && cd halykkazyna && yarn && cd .. && cd lifebusiness && yarn && cd .. && cd gns && yarn && cd .. && cd liferenta && yarn && cd .. && cd lifetrip && yarn && cd .. && cd pensionannuity && yarn && cd .. && cd prepensionannuity && yarn && cd .. && cd core",
31
+ "tk:all": "cd .. && cd amuletlife && yarn typecheck && cd .. && cd baiterek && yarn typecheck && cd .. && cd bolashak && yarn typecheck && cd .. && cd calc && yarn typecheck && cd .. && cd daskamkorlyk && yarn typecheck && cd .. && cd efo && yarn typecheck && cd .. && cd gons && yarn typecheck && cd .. && cd halykkazyna && yarn typecheck && cd .. && cd lifebusiness && yarn typecheck && cd .. && cd gns && yarn typecheck && cd .. && cd liferenta && yarn typecheck && cd .. && cd lifetrip && yarn typecheck && cd .. && cd pensionannuitynew && yarn typecheck && cd .. && cd prepensionannuity && yarn typecheck && cd .. && cd core",
32
+ "i:all": "cd .. && cd amuletlife && yarn && cd .. && cd baiterek && yarn && cd .. && cd bolashak && yarn && cd .. && cd calc && yarn && cd .. && cd daskamkorlyk && yarn && cd .. && cd efo && yarn && cd .. && cd gons && yarn && cd .. && cd halykkazyna && yarn && cd .. && cd lifebusiness && yarn && cd .. && cd gns && yarn && cd .. && cd liferenta && yarn && cd .. && cd lifetrip && yarn && cd .. && cd pensionannuitynew && yarn && cd .. && cd prepensionannuity && yarn && cd .. && cd core",
33
33
  "update:core": "git checkout -b %npm_package_version% && git add . && git commit -m \"%npm_package_version%\" && git push && git checkout main",
34
34
  "update:aml": "cd ../../aml/aml && yarn && cd ../checkcontract && yarn && cd ../checkcontragent && yarn && cd.. && git checkout -b %npm_package_version% && git add . && git commit -m \"%npm_package_version%\" && git push && git checkout main && cd ../efo/core",
35
35
  "update:lka": "cd .. && cd lka && yarn && git checkout -b %npm_package_version% && git add . && git commit -m \"%npm_package_version%\" && git push && git checkout main && cd .. && cd core",
@@ -51,7 +51,7 @@ export const useDataStore = defineStore('data', {
51
51
  isGons: state => state.product === 'gons',
52
52
  isKazyna: state => state.product === 'halykkazyna',
53
53
  isDas: state => state.product === 'daskamkorlyk',
54
- isPension: state => state.product === 'pensionannuity',
54
+ isPension: state => state.product === 'pensionannuitynew',
55
55
  isAmulet: state => state.product === 'amuletlife',
56
56
  isGns: state => state.product === 'gns',
57
57
  isCalculator: state => state.product === 'calculator',
@@ -256,6 +256,12 @@ export const useDataStore = defineStore('data', {
256
256
  isAdjuster() {
257
257
  return this.isRole(constants.roles.Adjuster);
258
258
  },
259
+ isDsoDirector() {
260
+ return this.isRole(constants.roles.DsoDirector);
261
+ },
262
+ isAccountantDirector() {
263
+ return this.isRole(constants.roles.AccountantDirector);
264
+ },
259
265
  isProcessEditable(statusCode?: keyof typeof Statuses) {
260
266
  const getEditibleStatuses = () => {
261
267
  const defaultStatuses = constants.editableStatuses;
@@ -1618,8 +1624,8 @@ export const useDataStore = defineStore('data', {
1618
1624
  delete query.processCodes;
1619
1625
  query.processCode = byOneProcess;
1620
1626
  }
1621
- if (byOneProcess === 1) {
1622
- query.processCodes = [1, 2, 4];
1627
+ if (byOneProcess === 19) {
1628
+ query.processCodes = [19, 2, 4];
1623
1629
  delete query.processCode;
1624
1630
  }
1625
1631
  const taskList = await this.api.getTaskList(
@@ -2511,7 +2517,7 @@ export const useDataStore = defineStore('data', {
2511
2517
  return [
2512
2518
  {
2513
2519
  processInstanceId: String(this.formStore.applicationData.processInstanceId),
2514
- name: this.processCode == 1 ? 'PA_Statement' : 'PA_RefundStatement',
2520
+ name: this.processCode == 19 ? 'PA_Statement' : 'PA_RefundStatement',
2515
2521
  format: 'pdf',
2516
2522
  },
2517
2523
  {
@@ -2521,7 +2527,7 @@ export const useDataStore = defineStore('data', {
2521
2527
  },
2522
2528
  ];
2523
2529
  }
2524
- case 'ContractSignedByAuthorizedPerson':
2530
+ case 'HeadManagerForm':
2525
2531
  return [
2526
2532
  {
2527
2533
  processInstanceId: String(this.formStore.applicationData.processInstanceId),
@@ -2531,6 +2537,11 @@ export const useDataStore = defineStore('data', {
2531
2537
  ];
2532
2538
  default:
2533
2539
  return [
2540
+ {
2541
+ processInstanceId: String(this.formStore.applicationData.processInstanceId),
2542
+ name: 'Agreement',
2543
+ format: 'pdf',
2544
+ },
2534
2545
  {
2535
2546
  processInstanceId: String(this.formStore.applicationData.processInstanceId),
2536
2547
  name: 'Statement',
@@ -2548,19 +2559,20 @@ export const useDataStore = defineStore('data', {
2548
2559
  return signData;
2549
2560
  } else if (type === 'signature') {
2550
2561
  const ncaLayerClient = new NCALayerClient();
2562
+ const formTemplate = new FormData();
2563
+ formTemplate.append('format', 'pdf');
2564
+ formTemplate.append('processInstanceId', String(this.formStore.applicationData.processInstanceId));
2551
2565
  let activeTokens;
2552
2566
  try {
2553
2567
  await ncaLayerClient.connect();
2554
2568
  activeTokens = await ncaLayerClient.getActiveTokens();
2555
2569
  const storageType = activeTokens[0] || NCALayerClient.fileStorageType;
2556
- if (this.formStore.applicationData.statusCode === 'ContractSignedByAuthorizedPerson') {
2570
+ if (this.formStore.applicationData.statusCode === 'HeadManagerForm') {
2557
2571
  const document = await this.generatePDFDocument('PAEnpf_Agreement', '40', 'pdf');
2558
2572
  const base64EncodedSignature = await ncaLayerClient.basicsSignCMS(storageType, document, NCALayerClient.basicsCMSParams, NCALayerClient.basicsSignerSignAny);
2559
- const formData = new FormData();
2573
+ const formData = formTemplate;
2560
2574
  formData.append('base64EncodedSignature', base64EncodedSignature);
2561
- formData.append('processInstanceId', String(this.formStore.applicationData.processInstanceId));
2562
2575
  formData.append('name', 'PAEnpf_Agreement');
2563
- formData.append('format', 'pdf');
2564
2576
  try {
2565
2577
  await this.api.uploadDigitalCertifijcate(formData);
2566
2578
  await this.handleTask('accept', String(this.formStore.applicationTaskId));
@@ -2571,11 +2583,9 @@ export const useDataStore = defineStore('data', {
2571
2583
  } else if (this.formStore.applicationData.statusCode === 'ContractSignedFrom') {
2572
2584
  const document = await this.generatePDFDocument('PA_Contract', '38', 'pdf');
2573
2585
  const base64EncodedSignature = await ncaLayerClient.basicsSignCMS(storageType, document, NCALayerClient.basicsCMSParams, NCALayerClient.basicsSignerSignAny);
2574
- const formData = new FormData();
2586
+ const formData = formTemplate;
2575
2587
  formData.append('base64EncodedSignature', base64EncodedSignature);
2576
- formData.append('processInstanceId', String(this.formStore.applicationData.processInstanceId));
2577
2588
  formData.append('name', 'PA_Contract');
2578
- formData.append('format', 'pdf');
2579
2589
  try {
2580
2590
  await this.api.uploadDigitalCertifijcate(formData);
2581
2591
  await this.handleTask('accept', String(this.formStore.applicationTaskId));
@@ -2584,31 +2594,48 @@ export const useDataStore = defineStore('data', {
2584
2594
  return;
2585
2595
  }
2586
2596
  } else {
2587
- const agreementXml = await this.getDocument(this.formStore.applicationData.processInstanceId as string);
2588
- const wnd = window.open('about:blank', '', '_blank');
2589
- wnd?.document.write(agreementXml as any);
2590
- const signedAgreement = await ncaLayerClient.signXml(storageType, agreementXml, 'SIGNATURE', '');
2591
- const document = {
2592
- processInstanceId: String(this.formStore.applicationData.processInstanceId),
2593
- name: 'PAEnpf_Agreement',
2594
- format: 'xml',
2595
- };
2596
- const signData = await this.api.signXml([document]);
2597
- const data = new FormData();
2598
- data.append('processInstanceId', String(this.formStore.applicationData.processInstanceId));
2599
- data.append('xmlData', signedAgreement);
2600
- data.append('name', 'PAEnpf_Agreement');
2601
- data.append('format', 'xml');
2602
- data.append('EdsXmlId', signData.data);
2603
- await this.api.uploadXml(data);
2604
- await this.getSignedDocList(this.formStore.applicationData.processInstanceId);
2597
+ if (!!this.formStore.signedDocumentList.find(i => i.fileTypeCode === '43')?.signed) {
2598
+ const statement = await this.generatePDFDocument('PA_Statement', '37', 'pdf');
2599
+ const statementSignature = await ncaLayerClient.basicsSignCMS(storageType, statement, NCALayerClient.basicsCMSParams, NCALayerClient.basicsSignerSignAny);
2600
+ const statementData = formTemplate;
2601
+ statementData.append('base64EncodedSignature', statementSignature);
2602
+ statementData.append('name', 'PA_Statement');
2603
+ await this.api.uploadDigitalCertifijcate(statementData);
2604
+ const agreement = await this.generatePDFDocument('Agreement', '19', 'pdf');
2605
+ const agreementSignature = await ncaLayerClient.basicsSignCMS(storageType, agreement, NCALayerClient.basicsCMSParams, NCALayerClient.basicsSignerSignAny);
2606
+ const agreementData = formTemplate;
2607
+ agreementData.append('base64EncodedSignature', agreementSignature);
2608
+ agreementData.append('name', 'Agreement');
2609
+ await this.api.uploadDigitalCertifijcate(agreementData);
2610
+ await this.handleTask('accept', String(this.formStore.applicationTaskId));
2611
+ } else {
2612
+ const document = {
2613
+ processInstanceId: String(this.formStore.applicationData.processInstanceId),
2614
+ name: 'PAEnpf_Agreement',
2615
+ format: 'xml',
2616
+ };
2617
+ const signData = await this.api.signXml([document]);
2618
+ const agreementXml = await this.api.getDocumentsByEdsXmlId(signData.data);
2619
+ const wnd = window.open('about:blank', '', '_blank');
2620
+ wnd?.document.write(agreementXml.data.document.documentXml);
2621
+ const signedAgreement = await ncaLayerClient.signXml(storageType, agreementXml.data.document.documentXml, 'SIGNATURE', '');
2622
+ const data = new FormData();
2623
+ data.append('processInstanceId', String(this.formStore.applicationData.processInstanceId));
2624
+ data.append('xmlData', signedAgreement);
2625
+ data.append('name', 'PAEnpf_Agreement');
2626
+ data.append('format', 'xml');
2627
+ data.append('EdsXmlId', signData.data);
2628
+ await this.api.uploadXml(data);
2629
+ await this.getSignedDocList(this.formStore.applicationData.processInstanceId);
2630
+ this.showToaster('success', this.t('pension.consentGiven'), 3000);
2631
+ }
2605
2632
  }
2606
2633
  } catch (error) {
2607
2634
  this.showToaster('error', String(error));
2608
2635
  return;
2609
2636
  }
2610
2637
  } else {
2611
- if (this.processCode === 1 || this.processCode === 2 || this.processCode === 3) {
2638
+ if (this.processCode === 19 || this.processCode === 2 || this.processCode === 4) {
2612
2639
  const result = await this.api.signBts(data);
2613
2640
  if (result.code === 0) this.formStore.signUrls = result.data;
2614
2641
  } else {
@@ -2642,7 +2669,7 @@ export const useDataStore = defineStore('data', {
2642
2669
  link.setAttribute('download', 'Договор страхования.pdf');
2643
2670
  break;
2644
2671
  case constants.documentTypes.application1:
2645
- link.setAttribute('download', 'Приложение №1.xls');
2672
+ link.setAttribute('download', 'Приложение №1.pdf');
2646
2673
  break;
2647
2674
  case constants.documentTypes.questionnaireInsured:
2648
2675
  link.setAttribute('download', 'Анкета Застрахованного.docx');
@@ -3383,7 +3410,6 @@ export const useDataStore = defineStore('data', {
3383
3410
  },
3384
3411
  async startApplicationV2(data: PolicyholderClass) {
3385
3412
  const policyholder = JSON.parse(JSON.stringify(data)) as any;
3386
- if (!policyholder.clientData.iin) return false;
3387
3413
  this.preparePersonData(policyholder);
3388
3414
  keyDeleter(policyholder as PolicyholderClass, [
3389
3415
  'clientData.beneficalOwnerQuest',
@@ -3460,7 +3486,7 @@ export const useDataStore = defineStore('data', {
3460
3486
  this.formStore.lfb.policyholder.clientData.iin = reformatIin(clientData.iin);
3461
3487
  this.formStore.lfb.policyholder.clientData.authoritedPerson.iin = reformatIin(clientData.authoritedPerson.iin);
3462
3488
  this.formStore.lfb.clientId = clientId;
3463
- this.formStore.lfb.policyholder.clientData.authorityDetails.date = reformatDate(clientData.authorityDetails.date);
3489
+ this.formStore.lfb.policyholder.clientData.authoritedPerson.authorityDetails.date = reformatDate(clientData.authoritedPerson.authorityDetails.date);
3464
3490
  this.formStore.lfb.policyholder.clientData.authoritedPerson.birthDate = reformatDate(clientData.authoritedPerson.birthDate) ?? '';
3465
3491
  this.formStore.lfb.policyholder.clientData.authoritedPerson.identityDocument.issuedOn = reformatDate(clientData.authoritedPerson.identityDocument.issuedOn) ?? '';
3466
3492
  this.formStore.lfb.policyholder.clientData.authoritedPerson.identityDocument.validUntil = reformatDate(clientData.authoritedPerson.identityDocument.validUntil) ?? '';
@@ -3493,8 +3519,8 @@ export const useDataStore = defineStore('data', {
3493
3519
  if (accidentIncidents && accidentIncidents.length) {
3494
3520
  this.formStore.lfb.accidentIncidents = accidentIncidents;
3495
3521
  this.formStore.lfb.accidentIncidents.forEach(incident => {
3496
- incident.amount = incident.amount === 0 ? null : incident.amount;
3497
- incident.count = incident.count === 0 ? null : incident.count;
3522
+ incident.amount = incident.amount === 0 ? '' : incident.amount;
3523
+ incident.count = incident.count === 0 ? '' : incident.count;
3498
3524
  });
3499
3525
  }
3500
3526
 
@@ -3521,7 +3547,12 @@ export const useDataStore = defineStore('data', {
3521
3547
  },
3522
3548
  async saveAccidentIncidents(data: AccidentIncidents[]) {
3523
3549
  try {
3524
- const response = await this.api.saveAccidentIncidents(this.formStore.applicationData.processInstanceId, data);
3550
+ const dataCopy = JSON.parse(JSON.stringify(data));
3551
+ for (const incident of dataCopy) {
3552
+ incident.count = !!incident.count ? incident.count : 0;
3553
+ incident.amount = incident.amount ? incident.amount : 0;
3554
+ }
3555
+ const response = await this.api.saveAccidentIncidents(this.formStore.applicationData.processInstanceId, dataCopy);
3525
3556
  return response;
3526
3557
  } catch (err) {
3527
3558
  return ErrorHandler(err);
@@ -3610,6 +3641,7 @@ export const useDataStore = defineStore('data', {
3610
3641
  iin: reformatIin(client.iin),
3611
3642
  insSum: client.insuredPolicyData.insSum,
3612
3643
  premium: client.insuredPolicyData.premium,
3644
+ premiumWithLoad: client.insuredPolicyData.premiumWithLoad,
3613
3645
  hasAttachedFile: client.hasAttachedFile,
3614
3646
  };
3615
3647
  });
@@ -3744,14 +3776,6 @@ export const useDataStore = defineStore('data', {
3744
3776
  return ErrorHandler(err);
3745
3777
  }
3746
3778
  },
3747
- async getDocument(id: string) {
3748
- try {
3749
- const response = await this.api.getDocument(id);
3750
- return response;
3751
- } catch (err) {
3752
- return ErrorHandler(err);
3753
- }
3754
- },
3755
3779
  async generateShortLink(url: string) {
3756
3780
  try {
3757
3781
  const response = await this.api.generateShortLink({
@@ -3863,7 +3887,9 @@ export const useDataStore = defineStore('data', {
3863
3887
  this.isBranchDirector() ||
3864
3888
  this.isUSNSACCINS() ||
3865
3889
  this.isDsuio() ||
3866
- this.isAdjuster(),
3890
+ this.isAdjuster() ||
3891
+ this.isDsoDirector() ||
3892
+ this.isAccountantDirector(),
3867
3893
  };
3868
3894
  },
3869
3895
  },
package/types/enum.ts CHANGED
@@ -95,6 +95,8 @@ export enum Roles {
95
95
  USNSACCINS = 'USNSACCINS',
96
96
  Dsuio = 'Dsuio',
97
97
  Adjuster = 'Adjuster',
98
+ DsoDirector = 'DsoDirector',
99
+ AccountantDirector = 'AccountantDirector',
98
100
  }
99
101
 
100
102
  export enum Statuses {
@@ -119,7 +121,7 @@ export enum Statuses {
119
121
  ActuaryForm = 'ActuaryForm',
120
122
  DsoUsnsForm = 'DsoUsnsForm',
121
123
  AccountantForm = 'AccountantForm',
122
- ContractSignedByAuthorizedPerson = 'ContractSignedByAuthorizedPerson',
124
+ HeadManagerForm = 'HeadManagerForm',
123
125
  }
124
126
 
125
127
  export enum MemberCodes {
package/types/index.ts CHANGED
@@ -25,7 +25,7 @@ declare global {
25
25
  | 'daskamkorlyk'
26
26
  | 'amuletlife'
27
27
  | 'gns'
28
- | 'pensionannuity'
28
+ | 'pensionannuitynew'
29
29
  | 'dso'
30
30
  | 'uu'
31
31
  | 'auletti'
@@ -291,6 +291,7 @@ declare global {
291
291
  birthDate: string;
292
292
  insSum: number;
293
293
  premium?: number;
294
+ premiumWithLoad?: number;
294
295
  position?: string;
295
296
  lifeMultiply?: number;
296
297
  lifeAdditive?: number;
@@ -715,8 +716,8 @@ declare global {
715
716
  coverTypeId: string | null;
716
717
  coverTypeName: string | null;
717
718
  coverTypeCode: number | null;
718
- count: number | null;
719
- amount: number | null;
719
+ count: number | string;
720
+ amount: number | string;
720
721
  shortDescription: string | null;
721
722
  };
722
723
 
@@ -754,4 +755,11 @@ declare global {
754
755
  };
755
756
 
756
757
  type ResponseStructure<T> = { code: 0; message: 'OK'; data: T };
758
+
759
+ type SignedState = {
760
+ isOnline: boolean;
761
+ signValue: number;
762
+ signName: string;
763
+ code: string;
764
+ };
757
765
  }