@getjones/test-infra 4.5.27 → 4.5.28

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getjones/test-infra",
3
- "version": "4.5.27",
3
+ "version": "4.5.28",
4
4
  "description": "Providing internal and openapi interface",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -13,7 +13,7 @@
13
13
  "axios": "^1.8.1",
14
14
  "axios-file": "^1.0.17",
15
15
  "chai": "^4.3.4",
16
- "dotenv": "^8.2.0",
16
+ "dotenv": "16.5.0",
17
17
  "enum": "^3.0.4",
18
18
  "form-data": "^4.0.0",
19
19
  "mocha": "^8.3.2"
@@ -6,11 +6,12 @@ const httpResponseStatusCodes = require('../../../common/httpResponseStatusCodes
6
6
  const ocrStatuses = require('../../consts/ocrStatuses');
7
7
  const contractors = require('../../../saas/internal-api/contractors');
8
8
  const compliance = require('../../../saas/internal-api/compliance');
9
+ const aiAuditApi = require('../../../saas/internal-api/compliance/api/audit/aiAudit/aiAudit.api');
9
10
  const requests = require('../../../saas/internal-api/requests');
10
11
  const dbEmails = require('../../../saas/internal-api/dbEmails');
11
12
  const activationStatuses = require('../../../common/consts/activationStatuses');
12
13
  const recordTypes = require('../../../common/consts/recordTypes');
13
- const { policyNames } = require('../../../defaults/index').polices;
14
+ const policyNames = require('../../../defaults/index').polices;
14
15
 
15
16
  const makeRecordNotResponsive = async function(recordId, context) {
16
17
  const { data: record } = await contractors.services.getContractorById(recordId, context);
@@ -208,6 +209,23 @@ const waitForOcrStatus = async function(recordId, context, { expectedStatus = oc
208
209
  }
209
210
  };
210
211
 
212
+ const waitForAiAnalysisStatus = async (recordId, context, { expectedStatus = ocrStatuses.SUCCESS } = {}) => {
213
+ const timeout = expectedStatus === ocrStatuses.IN_PROGRESS ? 1 : 5;
214
+ let retries = 15;
215
+ let aiAnalysisResponse;
216
+ let isExpectedStatus;
217
+
218
+ do {
219
+ await timeUtils.waitFor(timeout).seconds;
220
+ aiAnalysisResponse = await aiAuditApi.getAiAnalysisStatus(recordId, context);
221
+ isExpectedStatus = aiAnalysisResponse.status === httpResponseStatusCodes.OK && aiAnalysisResponse.data.status === expectedStatus;
222
+ } while (!isExpectedStatus && retries--);
223
+
224
+ if (!isExpectedStatus) {
225
+ throw new Error(`Record Ai Analysis status not is as expected. Expected: ${expectedStatus}, Actual: ${aiAnalysisResponse?.data?.status}`);
226
+ }
227
+ };
228
+
211
229
  const deleteAllRequestsInProject = async function(accountId, projectId, context) {
212
230
  const activationStatus = [activationStatuses.ACTIVE, activationStatuses.ARCHIVED, activationStatuses.DRAFT];
213
231
  const { data: requestsInAccount } = await requests.services.getRequestsByAccountId(accountId, context, activationStatus);
@@ -258,6 +276,7 @@ module.exports = {
258
276
  getLatestHistoryEventId,
259
277
  updateLastInviteActionDate,
260
278
  waitForOcrStatus,
279
+ waitForAiAnalysisStatus,
261
280
  generateSubscriptionModelFromMail,
262
281
  deleteAllRequestsInProject,
263
282
  getLatestRecordHistoryEventIdByItemTitle,
@@ -32,6 +32,7 @@ const deleteRequestHandler = (url, apiKey, headers = {}, params = {}, data = {})
32
32
 
33
33
  const enrichApiKey = (headers, apiKey) => {
34
34
  headers['x-api-key'] = apiKey;
35
+ headers['Content-Type'] = 'application/json';
35
36
  };
36
37
 
37
38
  module.exports = {
@@ -2,6 +2,33 @@ const cloneObject = object => {
2
2
  return JSON.parse(JSON.stringify(object));
3
3
  };
4
4
 
5
+ function removeObjectKeys(obj, keysToRemove) {
6
+ if (Array.isArray(obj)) {
7
+ return obj.map(item => removeObjectKeys(item, keysToRemove));
8
+ }
9
+
10
+ if (typeof obj !== 'object' || obj === null) {
11
+ return obj;
12
+ }
13
+
14
+ const newObj = {};
15
+ for (const key of Object.keys(obj)) {
16
+ if (!keysToRemove.includes(key)) {
17
+ newObj[key] = removeObjectKeys(obj[key], keysToRemove);
18
+ }
19
+ }
20
+
21
+ return newObj;
22
+ }
23
+
24
+ const removeNullValuesFromObject = obj => {
25
+ return JSON.parse(
26
+ JSON.stringify(obj, (key, value) => (value === null ? undefined : value))
27
+ );
28
+ };
29
+
5
30
  module.exports = {
6
- cloneObject
31
+ cloneObject,
32
+ removeObjectKeys,
33
+ removeNullValuesFromObject
7
34
  };
@@ -0,0 +1,160 @@
1
+ module.exports = {
2
+ generalLiability: {
3
+ eachOccurrence: 'Each Occurrence',
4
+ generalAggregate: 'General Aggregate',
5
+ personalAdvertisingInjury: 'Personal & Advertising Injury',
6
+ medicalExpenses: 'Medical Expenses',
7
+ damageToRentedPremises: 'Damage to Rented Premises',
8
+ primaryNonContributoryProvision: 'Primary Non-Contributory Provision',
9
+ primaryNonContributoryEndorsement: 'Primary Non-Contributory Endorsement',
10
+ waiverOfSubrogation: 'Waiver of Subrogation',
11
+ waiverOfSubrogationEndorsement: 'Waiver of Subrogation Endorsement',
12
+ additionalInsuredEndorsement: 'Additional Insured Endorsement',
13
+ perProjectAggregateLimit: 'Per Project Aggregate Limit',
14
+ blanketAdditionalInsuredEndorsement: 'Blanket Additional Insured Endorsement',
15
+ crossLiability: 'Cross Liability',
16
+ noticeOfCancellation: 'Notice of Cancellation',
17
+ noticeOfCancellationEndorsement: 'Notice of Cancellation Endorsement',
18
+ occurrenceBasis: 'Occurrence Basis',
19
+ perLocationAggregate: 'Per Location Aggregate',
20
+ perLocationAggregateEndorsement: 'Per Location Aggregate Endorsement',
21
+ perProjectAggregate: 'Per Project Aggregate',
22
+ perProjectAggregateEndorsement: 'Per Project Aggregate Endorsement',
23
+ productsCompletedOperations: 'Products/Completed Operations Aggregate',
24
+ additionalInsuredEntityNamesExplicitly: 'Additional Insured Entity Names Explicitly Listed on Endorsement',
25
+ additionalInsuredOngoingOperations: 'Additional Insured Endorsement Covering Ongoing Operations (CG 2010 or equivalent)',
26
+ additionalInsuredCompletedOperations: 'Additional Insured Endorsement Covering Completed Operations (CG 2037 or equivalent)',
27
+ liabilityAmountPerLeaseRequirement: 'Liability Amount Per Lease Requirement',
28
+ contractualLiability: 'Contractual Liability',
29
+ productsCompletedOperationsPerOccurrence: 'Products/Completed Operations Per Occurrence',
30
+ bodilyInjuryPerOccurrence: 'Bodily Injury Per Occurrence',
31
+ propertyDamagePerOccurrence: 'Property Damage Per Occurrence',
32
+ additionalInsuredManagersOrLessors: 'Additional Insured Endorsement for Managers or Lessors of Premises'
33
+ },
34
+ umbrella: {
35
+ eachOccurrence: 'Each Occurrence',
36
+ additionalInsuredEndorsement: 'Additional Insured Endorsement',
37
+ followsForm: 'Follows Form',
38
+ followFormEndorsement: 'Follow-Form Endorsement',
39
+ occurrenceBasis: 'Occurrence Basis',
40
+ primaryNonContributoryEndorsement: 'Primary Non-Contributory Endorsement',
41
+ primaryNonContributoryProvision: 'Primary Non-Contributory Provision',
42
+ waiverOfSubrogation: 'Waiver of Subrogation',
43
+ waiverOfSubrogationEndorsement: 'Waiver of Subrogation Endorsement'
44
+ },
45
+ professionalLiability: {
46
+ eachOccurrence: 'Each Occurrence',
47
+ generalAggregate: 'General Aggregate'
48
+ },
49
+ environmentalLiability: {
50
+ eachOccurrence: 'Each Occurrence',
51
+ generalAggregate: 'General Aggregate'
52
+ },
53
+ liquorLiability: {
54
+ eachClaim: 'Each Claim',
55
+ generalAggregate: 'General Aggregate'
56
+ },
57
+ garageLiability: {
58
+ eachAccident: 'Each Accident',
59
+ aggregate: 'Aggregate'
60
+ },
61
+ garageKeepersLiability: {
62
+ eachOccurrence: 'Each Occurrence'
63
+ },
64
+ workersCompensation: {
65
+ eachAccident: 'Employer’s Liability Each Accident',
66
+ diseaseEachEmployee: 'Employer’s Liability Disease - Each Employee',
67
+ diseasePolicyLimit: 'Employer’s Liability Disease - Policy Limit',
68
+ statutoryLimitsRequired: 'Statutory Limits Required',
69
+ waiverOfSubrogation: 'Waiver of Subrogation',
70
+ waiverOfSubrogationEndorsement: 'Waiver of Subrogation Endorsement'
71
+ },
72
+ automobileLiability: {
73
+ combinedSingleLimit: 'Combined Single Limit',
74
+ including: 'Including',
75
+ anyAuto: 'Any Auto',
76
+ scheduled: 'Scheduled',
77
+ waiverOfSubrogation: 'Waiver of Subrogation',
78
+ waiverOfSubrogationEndorsement: 'Waiver of Subrogation Endorsement',
79
+ additionalOngoingOperations: 'Additional Insured Endorsement Covering Ongoing Operations',
80
+ additionalCompletedOperations: 'Additional Insured Endorsement Covering Completed Operations',
81
+ additionalInsuredEndorsement: 'Additional Insured Endorsement',
82
+ primaryNonContributoryProvision: 'Primary Non-Contributory Provision',
83
+ primaryNonContributoryEndorsement: 'Primary Non-Contributory Endorsement'
84
+ },
85
+ propertyInsurance: {
86
+ personalProperty: 'Personal Property',
87
+ realProperty: 'Real Property / Building Limit',
88
+ specialFormProperty: 'Special Form Property',
89
+ replacementCost: 'Replacement Cost',
90
+ earthquakeSprinklerLeakageCoverage: 'Earthquake Sprinkler Leakage Coverage',
91
+ businessPersonalPropertyLimit: 'Business Personal Property Limit',
92
+ inlandMarineToolsEquipment: 'Inland Marine / Tools & Equipment',
93
+ businessInterruptionIncomeInsurance: 'Business Interruption / Income Insurance',
94
+ businessInterruptionInsurance12Months: 'Business Interruption Insurance - 12 months',
95
+ businessInterruptionInsurance6Months: 'Business Interruption Insurance - 6 months',
96
+ boilerMachineryEquipmentBreakdownInsurance: 'Boiler & Machinery / Equipment Breakdown Insurance',
97
+ buildersRiskInsurance: 'Builder’s Risk Insurance',
98
+ plateGlassInsurance: 'Plate Glass Insurance',
99
+ earthquakeInsurance: 'Earthquake Insurance',
100
+ floodInsurance: 'Flood Insurance',
101
+ terrorismInsurance: 'Terrorism Insurance'
102
+ },
103
+ rentedLeasedEquipment: {
104
+ eachOccurrence: 'Each Occurrence'
105
+ },
106
+ fidelityCrime: {
107
+ clientProperty: 'Client Property'
108
+ },
109
+ employmentPracticesLiability: {
110
+ eachClaim: 'Each Claim',
111
+ generalAggregate: 'General Aggregate'
112
+ },
113
+ directorsAndOfficersLiability: {
114
+ eachClaim: 'Each Claim',
115
+ generalAggregate: 'General Aggregate'
116
+ },
117
+ cyberLiability: {
118
+ eachClaim: 'Each Claim',
119
+ aggregate: 'Aggregate'
120
+ },
121
+ businessInterruptionIncomeInsurance: {
122
+ Limit: 'Limit',
123
+ indemnityPeriod: 'Indemnity Period',
124
+ actualLossSustained: 'Actual Loss Sustained',
125
+ extraExpense: 'Extra Expense'
126
+ },
127
+ common: {
128
+ amBestRating: 'AM Best Rating',
129
+ amBestFinancialSizeCategory: 'AM Best Financial Size Category',
130
+ eachOccurrence: 'Each Occurrence',
131
+ occur: 'Occur',
132
+ aggregate: 'Aggregate',
133
+ generalAggregate: 'General Aggregate',
134
+ eachClaim: 'Each Claim',
135
+ fullPolicyCopy: 'Full Policy Copy',
136
+ text: 'text',
137
+ boolean: 'boolean'
138
+ },
139
+ audit: {
140
+ coverageExists: 'Coverage Exists',
141
+ policyNumber: 'Policy Number',
142
+ policyExpiry: 'Policy Expiry',
143
+ perOccur: 'Per Occur',
144
+ perPolicy: 'Per Policy',
145
+ perProject: 'Per Project',
146
+ perLocation: 'Per Location',
147
+ occur: 'Occur',
148
+ policyState: 'Policy State',
149
+ insuredAddress: 'Insured Address',
150
+ insuredName: 'Insured Name',
151
+ InsuredDBA: 'Insured DBA',
152
+ coiAuthentication: 'COI authentication',
153
+ cancellationTerms: 'Cancellation Terms',
154
+ certificateIssueDate: 'Certificate issue date',
155
+ signature: 'Signature',
156
+ amScore: 'AM Score',
157
+ other: 'Other',
158
+ multiple: 'multiple'
159
+ }
160
+ };
@@ -1,4 +1,6 @@
1
- const { policyNames, attributeNames } = require('./polices');
1
+ const policyNames = require('./polices');
2
+ const attributeNames = require('./attributes');
3
+
2
4
  const { cloneObject } = require('../../common/utils/objectUtils');
3
5
  const { getOneWeekAgoDate, getOneWeekAheadDate } = require('../../common/utils/timeUtils');
4
6
 
@@ -18,19 +20,20 @@ const {
18
20
  const {
19
21
  coverageExists,
20
22
  policyNumber,
21
- policyExpired,
22
- perOccurrence,
23
+ policyExpiry,
24
+ perOccur,
23
25
  perPolicy,
24
26
  perProject,
25
27
  perLocation,
26
- eachOccurrence,
27
28
  cancellationTerms,
28
29
  coiAuthentication,
29
30
  signature,
30
31
  amScore,
31
32
  insuredAddress,
32
33
  insuredName
33
- } = attributeNames;
34
+ } = attributeNames.audit;
35
+
36
+ const { eachOccurrence } = attributeNames.common;
34
37
 
35
38
  const policySelections = {
36
39
  YES: 'Yes',
@@ -48,8 +51,8 @@ const getCompliantAuditConfig = ({ glPolicyNumber = DEFAULT_POLICY_NUMBER } = {}
48
51
  [generalLiability]: {
49
52
  [coverageExists]: policySelections.YES,
50
53
  [policyNumber]: glPolicyNumber,
51
- [policyExpired]: `${DEFAULT_POLICY_DATE}`,
52
- [perOccurrence]: policySelections.YES,
54
+ [policyExpiry]: `${DEFAULT_POLICY_DATE}`,
55
+ [perOccur]: policySelections.YES,
53
56
  [perPolicy]: policySelections.YES,
54
57
  [perProject]: policySelections.YES,
55
58
  [perLocation]: policySelections.YES,
@@ -103,10 +106,10 @@ const getExpiredConfig = ({ glPolicyNumber } = {}) => {
103
106
  };
104
107
 
105
108
  const setAboutExpiredConfig = config =>
106
- config[generalLiability][policyExpired] = `${getOneWeekAheadDate()}`;
109
+ config[generalLiability][policyExpiry] = `${getOneWeekAheadDate()}`;
107
110
 
108
111
  const setExpiredConfig = config =>
109
- config[generalLiability][policyExpired] = `${getOneWeekAgoDate()}`;
112
+ config[generalLiability][policyExpiry] = `${getOneWeekAgoDate()}`;
110
113
 
111
114
  module.exports = {
112
115
  getCompliantAuditConfig,
@@ -4,7 +4,7 @@ const defaultExpiryDate = '2030-10-10T00:00:00.000Z';
4
4
  const defaultEffectiveDate = '2020-10-10T00:00:00.000Z';
5
5
 
6
6
  const policiesCoverageConfig = {
7
- [policies.policyNames.generalLiability]: {
7
+ [policies.generalLiability]: {
8
8
  key: 'generalLiability',
9
9
  policyEntities: [
10
10
  {
@@ -21,7 +21,7 @@ const policiesCoverageConfig = {
21
21
  ],
22
22
  provisions: []
23
23
  },
24
- [policies.policyNames.automobileLiability]: {
24
+ [policies.automobileLiability]: {
25
25
  key: 'automobileLiability',
26
26
  policyEntities: [
27
27
  {
@@ -38,7 +38,7 @@ const policiesCoverageConfig = {
38
38
  ],
39
39
  provisions: []
40
40
  },
41
- [policies.policyNames.excessLiability]: {
41
+ [policies.excessLiability]: {
42
42
  key: 'excessLiability',
43
43
  policyEntities: [
44
44
  {
@@ -50,7 +50,7 @@ const policiesCoverageConfig = {
50
50
  limits: [],
51
51
  provisions: []
52
52
  },
53
- [policies.policyNames.umbrella]: {
53
+ [policies.umbrella]: {
54
54
  key: 'umbrellaLiability',
55
55
  policyEntities: [
56
56
  {
@@ -67,7 +67,7 @@ const policiesCoverageConfig = {
67
67
  ],
68
68
  provisions: []
69
69
  },
70
- [policies.policyNames.workersCompensation]: {
70
+ [policies.workersCompensation]: {
71
71
  key: 'workersCompensation',
72
72
  policyEntities: [
73
73
  {
@@ -84,7 +84,7 @@ const policiesCoverageConfig = {
84
84
  ],
85
85
  provisions: []
86
86
  },
87
- [policies.policyNames.fidelityCrime]: {
87
+ [policies.fidelityCrime]: {
88
88
  key: 'fidelityCrime',
89
89
  policyEntities: [
90
90
  {
@@ -102,7 +102,7 @@ const policiesCoverageConfig = {
102
102
  provisions: [
103
103
  ]
104
104
  },
105
- [policies.policyNames.cyberLiability]: {
105
+ [policies.cyberLiability]: {
106
106
  key: 'cyberLiability',
107
107
  policyEntities: [
108
108
  {
@@ -1,4 +1,4 @@
1
- const policyNames = {
1
+ module.exports = {
2
2
  certificateOfInsurance: 'Certificate of Insurance',
3
3
  certificateIssueDate: 'Certificate issue date',
4
4
  generalLiability: 'General Liability',
@@ -24,53 +24,3 @@ const policyNames = {
24
24
  additionalInsured: 'Additional Insured',
25
25
  businessInterruptionIncomeInsurance: 'Business Interruption / Income Insurance'
26
26
  };
27
-
28
- const attributeNames = {
29
- insuredAddress: 'Insured Address',
30
- insuredName: 'Insured Name',
31
- amScore: 'AM Score',
32
- cancellationTerms: 'Cancellation Terms',
33
- coiAuthentication: 'COI authentication',
34
- signature: 'Signature',
35
- coverageExists: 'Coverage Exists',
36
- policyNumber: 'Policy Number',
37
- policyExpired: 'Policy Expiry',
38
- perOccurrence: 'Per Occur',
39
- perPolicy: 'Per Policy',
40
- perProject: 'Per Project',
41
- perLocation: 'Per Location',
42
- eachOccurrence: 'Each Occurrence',
43
- generalAggregate: 'General Aggregate',
44
- noticeOfCancelation: 'Notice of Cancellation',
45
- noticeOfCancelationEndorsement: 'Notice of Cancellation Endorsement',
46
- occurrenceBasis: 'Occurrence Basis',
47
- perProjectAggregate: 'Per Project Aggregate',
48
- occur: 'Occur',
49
- text: 'text',
50
- boolean: 'boolean',
51
- limit: 'limit',
52
- additionalInsuredEndorsement: 'Additional Insured Endorsement',
53
- primaryNonContributoryProvision: 'Primary Non-Contributory Provision',
54
- primaryNonContributoryEndorsement: 'Primary Non-Contributory Endorsement',
55
- indemnityPeriod: 'Indemnity Period',
56
- actualLossSustained: 'Actual Loss Sustained',
57
- extraExpense: 'Extra Expense',
58
- combinedSingleLimit: 'Combined Single Limit',
59
- followsForm: 'Follows Form',
60
- followFormEndorsement: 'Follow-Form Endorsement',
61
- waiverOfSubrogation: 'Waiver of Subrogation',
62
- waiverOfSubrogationEndorsement: 'Waiver of Subrogation Endorsement',
63
- amBestRating: 'AM Best Rating',
64
- amBestFinancialSizeCategory: 'AM Best Financial Size Category',
65
- additionalInsuredEndorsementCoveringOngoingOperations: 'Additional Insured Endorsement Covering Ongoing Operations',
66
- anyAuto: 'Any Auto',
67
- scheduled: 'Scheduled',
68
- multiple: 'multiple',
69
- other: 'Other',
70
- fullPolicyCopy: 'Full Policy Copy'
71
- };
72
-
73
- module.exports = {
74
- policyNames,
75
- attributeNames
76
- };
@@ -1,7 +1,9 @@
1
- const { policyNames, attributeNames } = require('../configs/polices');
1
+ const policyNames = require('../configs/polices');
2
+ const attributeNames = require('../configs/attributes');
3
+
2
4
  const { cloneObject } = require('../../common/utils/objectUtils');
3
5
 
4
- const { eachOccurrence } = attributeNames;
6
+ const { eachOccurrence } = attributeNames.common;
5
7
  const { generalLiability } = policyNames;
6
8
 
7
9
  const { REQUIREMENT_SHARING_LEVELS } = require('../../saas/internal-api/requirements/consts/consts');
@@ -1,6 +1,7 @@
1
1
  const audit = require('./configs/auditConfigs');
2
2
  const polices = require('./configs/polices');
3
+ const attributes = require('./configs/attributes');
3
4
  const requirement = require('./configs/requirement');
4
5
  const coverage = require('./configs/coverage');
5
6
 
6
- module.exports = { audit, polices, requirement, coverage };
7
+ module.exports = { audit, polices, attributes, requirement, coverage };
Binary file
@@ -131,12 +131,12 @@ const getRequestActivityCountByModel = async (accountDirectoryRequestTableFilter
131
131
  return activityCountResponse.data;
132
132
  };
133
133
 
134
- const getRecordDetailsByModel = async (accountDirectoryRequestTableFilterModel, context) => {
134
+ const getRecordDetailsByModel = async (accountDirectoryRequestTableFilterModel, expectError, context) => {
135
135
  validateType(accountDirectoryRequestTableFilterModel, accountDirectoryModels.AccountDirectoryRequestTableFilterModel);
136
136
 
137
137
  const recordDetailsResponse = await accountDirectoryAPI.getRecordDetails(accountDirectoryRequestTableFilterModel, context);
138
138
 
139
- if (recordDetailsResponse.status !== httpResponseStatusCodes.OK) {
139
+ if (recordDetailsResponse.status !== httpResponseStatusCodes.OK && !expectError) {
140
140
  throw Error(`Failed to get record details. Status code: ${recordDetailsResponse.status}`);
141
141
  }
142
142
 
@@ -155,7 +155,7 @@ const getRequestActivityCount = (accountId, context, { globalRecordId, recordId,
155
155
  return getRequestActivityCountByModel(accountDirectoryRequestTableFilterModel, context, { expectError });
156
156
  };
157
157
 
158
- const getRecordDetails = (accountId, context, { globalRecordId, recordId } = {}) => {
158
+ const getRecordDetails = (accountId, context, { globalRecordId, recordId } = {}, expectError) => {
159
159
  const accountDirectoryRequestTableFilterModel = new accountDirectoryModels.AccountDirectoryRequestTableFilterModel(
160
160
  {
161
161
  accountId,
@@ -163,7 +163,7 @@ const getRecordDetails = (accountId, context, { globalRecordId, recordId } = {})
163
163
  recordId
164
164
  });
165
165
 
166
- return getRecordDetailsByModel(accountDirectoryRequestTableFilterModel, context);
166
+ return getRecordDetailsByModel(accountDirectoryRequestTableFilterModel, expectError, context);
167
167
  };
168
168
 
169
169
  module.exports = {
@@ -4,6 +4,7 @@ const { backendUrl } = require('../../../../../env').getEnv();
4
4
  const Endpoints = {
5
5
  createApiKey: `${backendUrl}/saas/integration-tests/api-keys`,
6
6
  getStaticApiKeyByAccountId: accountId => `${backendUrl}/saas/integration-tests/accounts/${accountId}/static-api-keys`,
7
+ getOrCreateStaticApiKeyByAccountId: accountId => `${backendUrl}/saas/integration-tests/accounts/${accountId}/static-api-keys`,
7
8
  getApiKeyByKeyValue: `${backendUrl}/saas/integration-tests/api-keys`,
8
9
  removeStaticApiKey: accountId => `${backendUrl}/saas/integration-tests/accounts/${accountId}/static-api-keys`,
9
10
  dynamicApiKey: accountId => `${backendUrl}/saas/integration-tests/accounts/${accountId}/dynamic-api-key`
@@ -21,6 +22,10 @@ const getStaticApiKeyByAccountId = (accountId, context) => {
21
22
  return requests.getRequestHandler(Endpoints.getStaticApiKeyByAccountId(accountId), {}, context);
22
23
  };
23
24
 
25
+ const getOrCreateStaticApiKeyByAccountId = (accountId, apiKeyValue, context) => {
26
+ return requests.postRequestHandler(Endpoints.getOrCreateStaticApiKeyByAccountId(accountId), { apiKeyValue }, context);
27
+ };
28
+
24
29
  const getApiKeyDetails = (apiKeyValue, context) => {
25
30
  return requests.getRequestHandler(Endpoints.getApiKeyByKeyValue, { apiKeyValue }, context);
26
31
  };
@@ -41,6 +46,7 @@ module.exports = {
41
46
  createStaticApiKey,
42
47
  createGeneratorApiKey,
43
48
  getStaticApiKeyByAccountId,
49
+ getOrCreateStaticApiKeyByAccountId,
44
50
  getApiKeyDetails,
45
51
  makeDynamicApiKeyExpired,
46
52
  deleteStaticApiKey,
@@ -19,6 +19,10 @@ const getStaticApiKeyByAccountId = async (accountId, context) => {
19
19
  return accountsAPI.getStaticApiKeyByAccountId(accountId, context);
20
20
  };
21
21
 
22
+ const getOrCreateStaticApiKeyByAccountId = async (accountId, apiKeyValue, context) => {
23
+ return accountsAPI.getOrCreateStaticApiKeyByAccountId(accountId, apiKeyValue, context);
24
+ };
25
+
22
26
  const getApiKeyDetails = async (apiKeyValue, context) => {
23
27
  return accountsAPI.getApiKeyDetails(apiKeyValue, context);
24
28
  };
@@ -27,19 +31,8 @@ const deleteStaticApiKey = async (accountId, context) => {
27
31
  return accountsAPI.deleteStaticApiKey(accountId, context);
28
32
  };
29
33
 
30
- const getOrCreateStaticApiKey = async (accountId, apiKeyValue, context, { apiKeyType = 'ACCOUNT_STATIC', apiKeyName = null } = {}) => {
31
- let response = await getStaticApiKeyByAccountId(accountId, context);
32
-
33
- if (response.data.apiKeyValue) {
34
- return response.data;
35
- }
36
-
37
- response = await getApiKeyDetails(apiKeyValue, context);
38
-
39
- if (!response.data.apiKeyValue) {
40
- response = await createStaticApiKey(accountId, apiKeyValue, context, { apiKeyType, apiKeyName });
41
- }
42
-
34
+ const getOrCreateStaticApiKey = async (accountId, apiKeyValue, context) => {
35
+ const response = await getOrCreateStaticApiKeyByAccountId(accountId, apiKeyValue, context);
43
36
  return response.data;
44
37
  };
45
38
 
@@ -9,6 +9,8 @@ class UpdateAccountSettingsModel {
9
9
  isExcludedFromNetwork = false,
10
10
  isOcrEnabled = false,
11
11
  isAuditingAiEnabled = false,
12
+ isCoiSnapshotAiEnabled = false,
13
+ isComplianceSnapshotAiEnabled = false,
12
14
  isCoverageAudit = false,
13
15
  isAccountRequirementsEnabled = false,
14
16
  isAccountRequirementsAutoRenewalsEnabled = false,
@@ -28,6 +30,8 @@ class UpdateAccountSettingsModel {
28
30
  this.isExcludedFromNetwork = isExcludedFromNetwork;
29
31
  this.isOcrEnabled = isOcrEnabled;
30
32
  this.isAuditingAiEnabled = isAuditingAiEnabled;
33
+ this.isCoiSnapshotAiEnabled = isCoiSnapshotAiEnabled;
34
+ this.isComplianceSnapshotAiEnabled = isComplianceSnapshotAiEnabled;
31
35
  this.isCoverageAudit = isCoverageAudit;
32
36
  this.isAccountRequirementsEnabled = isAccountRequirementsEnabled;
33
37
  this.isAccountRequirementsAutoRenewalsEnabled = isAccountRequirementsAutoRenewalsEnabled;
@@ -1,4 +1,4 @@
1
- const { policyNames } = require('../../../../defaults/configs/polices');
1
+ const policyNames = require('../../../../defaults/configs/polices');
2
2
 
3
3
  class CreateAgreementByAuditorModel {
4
4
  constructor({ contractorId, fileName, fileType = 'contract', auditName = policyNames.agreement }) {
@@ -3,13 +3,16 @@ const requests = require('../../../../../../common/requests/cookieAuth/requests'
3
3
  const { nodeBackendUrl, backendUrl } = require('../../../../../../env').getEnv();
4
4
 
5
5
  const Endpoints = {
6
- getAiExtractionResult: uniqueCoiId => `${nodeBackendUrl}/compliance/ai/analysis-results/${uniqueCoiId}`,
6
+ getAiAnalysisResult: (uniqueCoiId, requirementsId) => `${nodeBackendUrl}/compliance/ai/analysis-results/${uniqueCoiId}/${requirementsId}`,
7
7
  getComparisonAlgorithmResultsIos: `${nodeBackendUrl}/compliance/comparison-algorithm-results`,
8
- getAiAnalysisStatus: recordId => `${backendUrl}/saas/record/${recordId}/coi/ai-analysis-status`
8
+ getAiAnalysisStatus: recordId => `${backendUrl}/saas/record/${recordId}/coi/ai-analysis-status`,
9
+ getAcord25ByAiAnalysis: uniqueCoiId => `${nodeBackendUrl}/compliance/ai/analysis/acord25/${uniqueCoiId}`,
10
+ getAuxiliaryDataByAiAnalysis: uniqueCoiId => `${nodeBackendUrl}/compliance/auxiliary-data/from/coi-analysis/${uniqueCoiId}`,
11
+ getOcrByRecordIdAiAnalysis: recordId => `${backendUrl}/jcsc/record/${recordId}/ocr`
9
12
  };
10
13
 
11
- const getAiExtractionResult = uniqueCoiId => {
12
- return internalRequests.getRequestHandler(Endpoints.getAiExtractionResult(uniqueCoiId));
14
+ const getAiAnalysisResult = (uniqueCoiId, requirementsId) => {
15
+ return internalRequests.getRequestHandler(Endpoints.getAiAnalysisResult(uniqueCoiId, requirementsId));
13
16
  };
14
17
 
15
18
  const getComparisonAlgorithmResultsIos = (data, context) => {
@@ -20,8 +23,23 @@ const getAiAnalysisStatus = (recordId, context) => {
20
23
  return requests.getRequestHandler(Endpoints.getAiAnalysisStatus(recordId), {}, context);
21
24
  };
22
25
 
26
+ const getAcord25ByAiAnalysis = uniqueCoiId => {
27
+ return internalRequests.getRequestHandler(Endpoints.getAcord25ByAiAnalysis(uniqueCoiId));
28
+ };
29
+
30
+ const getAuxiliaryDataByAiAnalysis = uniqueCoiId => {
31
+ return internalRequests.getRequestHandler(Endpoints.getAuxiliaryDataByAiAnalysis(uniqueCoiId));
32
+ };
33
+
34
+ const getOcrByRecordIdAiAnalysis = recordId => {
35
+ return internalRequests.getRequestHandler(Endpoints.getOcrByRecordIdAiAnalysis(recordId));
36
+ };
37
+
23
38
  module.exports = {
24
39
  getComparisonAlgorithmResultsIos,
25
- getAiExtractionResult,
26
- getAiAnalysisStatus
40
+ getAiAnalysisResult,
41
+ getAiAnalysisStatus,
42
+ getAcord25ByAiAnalysis,
43
+ getAuxiliaryDataByAiAnalysis,
44
+ getOcrByRecordIdAiAnalysis
27
45
  };
@@ -1,11 +1,11 @@
1
1
  const aiAuditApi = require('./aiAudit.api');
2
2
  const httpResponseStatusCodes = require('../../../../../../common/httpResponseStatusCodes.json');
3
3
 
4
- const getAiExtractionResult = async uniqueCoiId => {
5
- const response = await aiAuditApi.getAiExtractionResult(uniqueCoiId);
4
+ const getAiAnalysisResult = async (uniqueCoiId, requirementsId) => {
5
+ const response = await aiAuditApi.getAiAnalysisResult(uniqueCoiId, requirementsId);
6
6
 
7
7
  if (response.status !== httpResponseStatusCodes.OK) {
8
- throw Error(`Failed to get AI Extraction with code: ${response.status}`);
8
+ throw Error(`Failed to get AI analysis result with code: ${response.status}`);
9
9
  }
10
10
 
11
11
  return response.data;
@@ -31,8 +31,41 @@ const getAiAnalysisStatus = async (recordId, context) => {
31
31
  return response.data;
32
32
  };
33
33
 
34
+ const getAcord25ByAiAnalysis = async uniqueCoiId => {
35
+ const response = await aiAuditApi.getAcord25ByAiAnalysis(uniqueCoiId);
36
+
37
+ if (response.status !== httpResponseStatusCodes.OK) {
38
+ throw Error(`Failed to get Acord 25 using Ai with code: ${response.status}`);
39
+ }
40
+
41
+ return response.data;
42
+ };
43
+
44
+ const getAuxiliaryDataByAiAnalysis = async uniqueCoiId => {
45
+ const response = await aiAuditApi.getAuxiliaryDataByAiAnalysis(uniqueCoiId);
46
+
47
+ if (response.status !== httpResponseStatusCodes.OK) {
48
+ throw Error(`Failed to get aux data using Ai with code: ${response.status}`);
49
+ }
50
+
51
+ return response.data;
52
+ };
53
+
54
+ const getOcrByRecordIdAiAnalysis = async recordId => {
55
+ const response = await aiAuditApi.getOcrByRecordIdAiAnalysis(recordId);
56
+
57
+ if (response.status !== httpResponseStatusCodes.OK) {
58
+ throw Error(`Failed to get OCR using Ai with code: ${response.status}`);
59
+ }
60
+
61
+ return response.data;
62
+ };
63
+
34
64
  module.exports = {
35
- getAiExtractionResult,
65
+ getAiAnalysisResult,
36
66
  getComparisonAlgorithmResultsIos,
37
- getAiAnalysisStatus
67
+ getAiAnalysisStatus,
68
+ getAcord25ByAiAnalysis,
69
+ getAuxiliaryDataByAiAnalysis,
70
+ getOcrByRecordIdAiAnalysis
38
71
  };
@@ -1,5 +1,5 @@
1
1
  class DraftRequestReportModel {
2
- constructor(requestId, { emailAddress, selectedRequirementsId, additionalEmails, recordDateModified, overrideDateModified } = {}) {
2
+ constructor(requestId, { emailAddress, selectedRequirementsId, additionalEmails = [], recordDateModified, overrideDateModified } = {}) {
3
3
  this.requestId = requestId;
4
4
  this.emailAddress = emailAddress;
5
5
  this.selectedRequirementsId = selectedRequirementsId;