@platform-modules/civil-aviation-authority 2.3.336 → 2.3.337
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.
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EntityManager } from 'typeorm';
|
|
2
|
+
/** DB columns written on create/update (order matches parameterized INSERT). */
|
|
3
|
+
export declare const CSRM_RISK_INSERT_COLUMNS: readonly ["request_id", "risk_no", "impacted_category", "impact_area", "threat", "vulnerability", "risk_description", "risk_owner", "asset_cia_impact", "asset_value", "likelihood", "business_impact", "risk_value", "new_likelihood", "new_business_impact", "new_risk_value", "existing_controls", "start_date", "end_date", "iso_control_reference", "risk_treatment_plan", "treatment", "action", "confidentiality", "integrity", "availability", "new_control", "actual_end_date", "notes", "justification_for_delay", "created_by", "is_deleted"];
|
|
4
|
+
export declare const CSRM_RISKS_TABLE = "cyber_security_risk_management_risks";
|
|
5
|
+
/**
|
|
6
|
+
* Maps one API/workflow risk object to DB values (same pattern as Duty Mission child rows:
|
|
7
|
+
* each property comes from the payload item, plus request_id / created_by / is_deleted from server).
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildCyberSecurityRiskInsertRow(requestId: number, riskPayload: Record<string, unknown>, createdBy: number): Record<(typeof CSRM_RISK_INSERT_COLUMNS)[number], unknown>;
|
|
10
|
+
/** Persists one risk row from workflow/API payload (explicit INSERT, like annual_training_plan_items). */
|
|
11
|
+
export declare function persistCsrmRiskFromPayload(manager: EntityManager, requestId: number, riskPayload: Record<string, unknown>, createdBy: number): Promise<void>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CSRM_RISKS_TABLE = exports.CSRM_RISK_INSERT_COLUMNS = void 0;
|
|
4
|
+
exports.buildCyberSecurityRiskInsertRow = buildCyberSecurityRiskInsertRow;
|
|
5
|
+
exports.persistCsrmRiskFromPayload = persistCsrmRiskFromPayload;
|
|
6
|
+
/** DB columns written on create/update (order matches parameterized INSERT). */
|
|
7
|
+
exports.CSRM_RISK_INSERT_COLUMNS = [
|
|
8
|
+
'request_id',
|
|
9
|
+
'risk_no',
|
|
10
|
+
'impacted_category',
|
|
11
|
+
'impact_area',
|
|
12
|
+
'threat',
|
|
13
|
+
'vulnerability',
|
|
14
|
+
'risk_description',
|
|
15
|
+
'risk_owner',
|
|
16
|
+
'asset_cia_impact',
|
|
17
|
+
'asset_value',
|
|
18
|
+
'likelihood',
|
|
19
|
+
'business_impact',
|
|
20
|
+
'risk_value',
|
|
21
|
+
'new_likelihood',
|
|
22
|
+
'new_business_impact',
|
|
23
|
+
'new_risk_value',
|
|
24
|
+
'existing_controls',
|
|
25
|
+
'start_date',
|
|
26
|
+
'end_date',
|
|
27
|
+
'iso_control_reference',
|
|
28
|
+
'risk_treatment_plan',
|
|
29
|
+
'treatment',
|
|
30
|
+
'action',
|
|
31
|
+
'confidentiality',
|
|
32
|
+
'integrity',
|
|
33
|
+
'availability',
|
|
34
|
+
'new_control',
|
|
35
|
+
'actual_end_date',
|
|
36
|
+
'notes',
|
|
37
|
+
'justification_for_delay',
|
|
38
|
+
'created_by',
|
|
39
|
+
'is_deleted',
|
|
40
|
+
];
|
|
41
|
+
exports.CSRM_RISKS_TABLE = 'cyber_security_risk_management_risks';
|
|
42
|
+
/**
|
|
43
|
+
* Maps one API/workflow risk object to DB values (same pattern as Duty Mission child rows:
|
|
44
|
+
* each property comes from the payload item, plus request_id / created_by / is_deleted from server).
|
|
45
|
+
*/
|
|
46
|
+
function buildCyberSecurityRiskInsertRow(requestId, riskPayload, createdBy) {
|
|
47
|
+
const item = riskPayload;
|
|
48
|
+
const optionalText = (v) => {
|
|
49
|
+
if (v === null || v === undefined)
|
|
50
|
+
return null;
|
|
51
|
+
const s = String(v);
|
|
52
|
+
return s.length ? s : null;
|
|
53
|
+
};
|
|
54
|
+
const optionalNumber = (v) => {
|
|
55
|
+
if (v === null || v === undefined || v === '')
|
|
56
|
+
return null;
|
|
57
|
+
const n = Number(v);
|
|
58
|
+
return Number.isFinite(n) ? n : null;
|
|
59
|
+
};
|
|
60
|
+
const optionalDate = (v) => {
|
|
61
|
+
if (v === null || v === undefined || v === '')
|
|
62
|
+
return null;
|
|
63
|
+
const d = new Date(String(v));
|
|
64
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
65
|
+
};
|
|
66
|
+
const requiredDate = (v) => optionalDate(v) ?? new Date(String(v));
|
|
67
|
+
const riskValueFromPayload = optionalNumber(item.risk_value);
|
|
68
|
+
return {
|
|
69
|
+
request_id: requestId,
|
|
70
|
+
risk_no: item.risk_no,
|
|
71
|
+
impacted_category: item.impacted_category,
|
|
72
|
+
impact_area: item.impact_area,
|
|
73
|
+
threat: item.threat,
|
|
74
|
+
vulnerability: item.vulnerability,
|
|
75
|
+
risk_description: item.risk_description,
|
|
76
|
+
risk_owner: item.risk_owner,
|
|
77
|
+
asset_cia_impact: Number(item.asset_cia_impact),
|
|
78
|
+
asset_value: optionalNumber(item.asset_value),
|
|
79
|
+
likelihood: Number(item.likelihood),
|
|
80
|
+
business_impact: Number(item.business_impact),
|
|
81
|
+
risk_value: riskValueFromPayload ?? 0,
|
|
82
|
+
new_likelihood: optionalNumber(item.new_likelihood),
|
|
83
|
+
new_business_impact: optionalNumber(item.new_business_impact),
|
|
84
|
+
new_risk_value: optionalNumber(item.new_risk_value),
|
|
85
|
+
existing_controls: item.existing_controls,
|
|
86
|
+
start_date: requiredDate(item.start_date),
|
|
87
|
+
end_date: requiredDate(item.end_date),
|
|
88
|
+
iso_control_reference: optionalText(item.iso_control_reference),
|
|
89
|
+
risk_treatment_plan: item.risk_treatment_plan,
|
|
90
|
+
treatment: optionalText(item.treatment),
|
|
91
|
+
action: optionalText(item.action),
|
|
92
|
+
confidentiality: optionalNumber(item.confidentiality),
|
|
93
|
+
integrity: optionalNumber(item.integrity),
|
|
94
|
+
availability: optionalNumber(item.availability),
|
|
95
|
+
new_control: optionalText(item.new_control),
|
|
96
|
+
actual_end_date: optionalDate(item.actual_end_date),
|
|
97
|
+
notes: optionalText(item.notes),
|
|
98
|
+
justification_for_delay: optionalText(item.justification_for_delay),
|
|
99
|
+
created_by: createdBy,
|
|
100
|
+
is_deleted: false,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/** Persists one risk row from workflow/API payload (explicit INSERT, like annual_training_plan_items). */
|
|
104
|
+
async function persistCsrmRiskFromPayload(manager, requestId, riskPayload, createdBy) {
|
|
105
|
+
const row = buildCyberSecurityRiskInsertRow(requestId, riskPayload, createdBy);
|
|
106
|
+
const values = exports.CSRM_RISK_INSERT_COLUMNS.map((col) => row[col]);
|
|
107
|
+
const colList = exports.CSRM_RISK_INSERT_COLUMNS.map((c) => `"${c}"`).join(', ');
|
|
108
|
+
const placeholders = exports.CSRM_RISK_INSERT_COLUMNS.map((_, i) => `$${i + 1}`).join(', ');
|
|
109
|
+
await manager.query(`INSERT INTO ${exports.CSRM_RISKS_TABLE} (${colList}) VALUES (${placeholders})`, values);
|
|
110
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -266,6 +266,7 @@ export * from './models/CyberSecurityRiskManagementRequestModel';
|
|
|
266
266
|
export { CyberSecurityRiskManagementRequest, CyberSecurityRiskManagementRequestStatus } from './models/CyberSecurityRiskManagementRequestModel';
|
|
267
267
|
export * from './models/CyberSecurityRiskManagementRiskModel';
|
|
268
268
|
export { CyberSecurityRiskManagementRisk, CyberSecurityRiskImpactedCategory } from './models/CyberSecurityRiskManagementRiskModel';
|
|
269
|
+
export { buildCyberSecurityRiskInsertRow, persistCsrmRiskFromPayload, CSRM_RISK_INSERT_COLUMNS, CSRM_RISKS_TABLE, } from './helpers/csrm-risk-persistence.helper';
|
|
269
270
|
export * from './models/LegalContractReviewRequestModel';
|
|
270
271
|
export { LegalContractReviewRequest, LegalContractReviewRequestStatus, LegalContractReviewRequestType } from './models/LegalContractReviewRequestModel';
|
|
271
272
|
export * from './models/LegalContractReviewApprovalModel';
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.TrainingRoomBookingWorkFlowStatus = exports.TrainingRoomBookingApprovalStatus = exports.TrainingRoomBookingRoomType = exports.TrainingRoomBookingRequestStatus = exports.AnnualTrainingPlanChatStatus = exports.AnnualTrainingPlanMessageType = exports.AnnualTrainingPlanRequestChat = exports.AnnualTrainingPlanRequestAttachment = exports.AnnualTrainingPlanWorkFlowStatus = exports.AnnualTrainingPlanApprovalStatus = exports.AnnualTrainingPlanPlace = exports.AnnualTrainingPlanRequestStatus = exports.StudyLeaveChatStatus = exports.StudyLeaveMessageType = exports.StudyLeaveRequestChat = exports.StudyLeaveRequestAttachment = exports.StudyLeaveWorkFlowStatus = exports.StudyLeaveApprovalStatus = exports.StudyLeaveRequestStatus = exports.TrainingMessageType = exports.TrainingRequestChat = exports.TrainingRequestAttachment = exports.TrainingWorkFlowStatus = exports.TrainingApprovalStatus = exports.TrainingRequestStatus = exports.HrServiceChatStatus = exports.HrServiceMessageType = exports.HrServiceRequestChat = exports.HrServiceRequestAttachment = exports.HrServiceWorkFlowStatus = exports.HrServiceApprovalStatus = exports.HrServiceRequestStatus = exports.CancellationMessageType = exports.CancellationRequestChat = exports.CancellationRequestAttachment = exports.CancellationWorkFlowStatus = exports.CancellationApprovalStatus = exports.EventSupportMessageType = exports.EventSupportRequestChat = exports.EventSupportRequestAttachment = exports.EventSupportWorkFlowStatus = exports.EventSupportApprovalStatus = exports.EventSupportReminderType = exports.EventSupportRequestStatus = exports.CancellationRequestStatus = exports.LogisticsVehicleMaintenanceWorkFlowStatus = exports.LogisticsVehicleMaintenanceMessageType = exports.LogisticsVehicleMaintenanceApprovalStatus = exports.VehicleMaintenanceStatus = exports.VehicleMaintenanceType = void 0;
|
|
18
18
|
exports.CyberSecurityAuditRequest = exports.RequestForVaptClassification = exports.RequestForVaptType = exports.RequestForVaptStatus = exports.RequestForVaptRequest = exports.InformationSecurityRequestAttachment = exports.InformationSecurityWorkFlow = exports.InformationSecurityWorkFlowStatus = exports.InformationSecurityRequestChat = exports.InformationSecurityChatStatus = exports.InformationSecurityMessageType = exports.InformationSecurityApprovalDetails = exports.InformationSecurityApprovalStatus = exports.RequestForProjectApproval = exports.RequestForProjectApprovalStatus = exports.ShiftAllowanceValue = exports.ShiftAllowanceRequestStatus = exports.AssignTasksEmpMessageType = exports.AssignTasksEmpRequestChat = exports.AssignTasksEmpRequestAttachment = exports.AssignTasksEmpWorkFlowStatus = exports.AssignTasksEmpApprovalStatus = exports.AssignTasksEmpPriority = exports.AssignTasksEmpStatus = exports.RequestForPresidentsCoverageRequestAttachment = exports.RequestForPresidentsCoverageChatStatus = exports.RequestForPresidentsCoverageMessageType = exports.RequestForPresidentsCoverageRequestChat = exports.RequestForPresidentsCoverageApprovalStatus = exports.RequestForPresidentsCoverageWorkFlowStatus = exports.RequestForPresidentsCoverageNewsSize = exports.RequestForPresidentsCoverageRequestStatus = exports.RequestForCoverageRequestAttachment = exports.RequestForCoverageChatStatus = exports.RequestForCoverageMessageType = exports.RequestForCoverageRequestChat = exports.RequestForCoverageApprovalStatus = exports.RequestForCoverageWorkFlowStatus = exports.RequestForCoverageNewsSize = exports.RequestForCoverageRequestStatus = exports.ServiceTransferRequestType = exports.SalaryDetailsType = exports.ServiceTransferRequestStatus = exports.TemporaryAssignmentRequestType = exports.TemporaryAssignmentRequestStatus = exports.SecondmentRequestStatus = exports.TrainingRoomBookingChatStatus = exports.TrainingRoomBookingMessageType = exports.TrainingRoomBookingRequestChat = exports.TrainingRoomBookingRequestAttachment = void 0;
|
|
19
|
-
exports.RespondToEnquiriesRequestAttachment = exports.RespondToEnquiriesWorkFlow = exports.RespondToEnquiriesWorkFlowStatus = exports.RespondToEnquiriesRequestChat = exports.RespondToEnquiriesChatStatus = exports.RespondToEnquiriesMessageType = exports.RespondToEnquiriesApprovalDetails = exports.RespondToEnquiriesApprovalStatus = exports.RespondToEnquiriesRequest = exports.RespondToEnquiriesRequestStatus = exports.DurationUnit = exports.RepeatFrequency = exports.Quarter = exports.HumanResourceAnnualPlanningRequestStatus = exports.PerformanceManagementCyclePeriod = exports.PerformanceManagementRequestStatus = exports.SkillsEnhancementRequestStatus = exports.AnnualIncrementRequestStatus = exports.PromotionRequestStatus = exports.CashAllowanceLeaveRequestStatus = exports.NotificationFrequency = exports.ServicesNotificationTriggerType = exports.NewResourceRequestStatus = exports.JobTransferRequestStatus = exports.AppealAgainstAdministrativeDecisionRequestStatus = exports.AppealAgainstAdministrativeDecisionRequest = exports.LegalContractReviewRequestType = exports.LegalContractReviewRequestStatus = exports.LegalContractReviewRequest = exports.CyberSecurityRiskImpactedCategory = exports.CyberSecurityRiskManagementRisk = exports.CyberSecurityRiskManagementRequestStatus = exports.CyberSecurityRiskManagementRequest = exports.CyberSecurityAuditApplicationType = exports.CyberSecurityAuditClassification = exports.CyberSecurityAuditRequestStatus = void 0;
|
|
19
|
+
exports.RespondToEnquiriesRequestAttachment = exports.RespondToEnquiriesWorkFlow = exports.RespondToEnquiriesWorkFlowStatus = exports.RespondToEnquiriesRequestChat = exports.RespondToEnquiriesChatStatus = exports.RespondToEnquiriesMessageType = exports.RespondToEnquiriesApprovalDetails = exports.RespondToEnquiriesApprovalStatus = exports.RespondToEnquiriesRequest = exports.RespondToEnquiriesRequestStatus = exports.DurationUnit = exports.RepeatFrequency = exports.Quarter = exports.HumanResourceAnnualPlanningRequestStatus = exports.PerformanceManagementCyclePeriod = exports.PerformanceManagementRequestStatus = exports.SkillsEnhancementRequestStatus = exports.AnnualIncrementRequestStatus = exports.PromotionRequestStatus = exports.CashAllowanceLeaveRequestStatus = exports.NotificationFrequency = exports.ServicesNotificationTriggerType = exports.NewResourceRequestStatus = exports.JobTransferRequestStatus = exports.AppealAgainstAdministrativeDecisionRequestStatus = exports.AppealAgainstAdministrativeDecisionRequest = exports.LegalContractReviewRequestType = exports.LegalContractReviewRequestStatus = exports.LegalContractReviewRequest = exports.CSRM_RISKS_TABLE = exports.CSRM_RISK_INSERT_COLUMNS = exports.persistCsrmRiskFromPayload = exports.buildCyberSecurityRiskInsertRow = exports.CyberSecurityRiskImpactedCategory = exports.CyberSecurityRiskManagementRisk = exports.CyberSecurityRiskManagementRequestStatus = exports.CyberSecurityRiskManagementRequest = exports.CyberSecurityAuditApplicationType = exports.CyberSecurityAuditClassification = exports.CyberSecurityAuditRequestStatus = void 0;
|
|
20
20
|
__exportStar(require("./models/user"), exports);
|
|
21
21
|
__exportStar(require("./models/role"), exports);
|
|
22
22
|
__exportStar(require("./models/user-sessions"), exports);
|
|
@@ -397,6 +397,11 @@ __exportStar(require("./models/CyberSecurityRiskManagementRiskModel"), exports);
|
|
|
397
397
|
var CyberSecurityRiskManagementRiskModel_1 = require("./models/CyberSecurityRiskManagementRiskModel");
|
|
398
398
|
Object.defineProperty(exports, "CyberSecurityRiskManagementRisk", { enumerable: true, get: function () { return CyberSecurityRiskManagementRiskModel_1.CyberSecurityRiskManagementRisk; } });
|
|
399
399
|
Object.defineProperty(exports, "CyberSecurityRiskImpactedCategory", { enumerable: true, get: function () { return CyberSecurityRiskManagementRiskModel_1.CyberSecurityRiskImpactedCategory; } });
|
|
400
|
+
var csrm_risk_persistence_helper_1 = require("./helpers/csrm-risk-persistence.helper");
|
|
401
|
+
Object.defineProperty(exports, "buildCyberSecurityRiskInsertRow", { enumerable: true, get: function () { return csrm_risk_persistence_helper_1.buildCyberSecurityRiskInsertRow; } });
|
|
402
|
+
Object.defineProperty(exports, "persistCsrmRiskFromPayload", { enumerable: true, get: function () { return csrm_risk_persistence_helper_1.persistCsrmRiskFromPayload; } });
|
|
403
|
+
Object.defineProperty(exports, "CSRM_RISK_INSERT_COLUMNS", { enumerable: true, get: function () { return csrm_risk_persistence_helper_1.CSRM_RISK_INSERT_COLUMNS; } });
|
|
404
|
+
Object.defineProperty(exports, "CSRM_RISKS_TABLE", { enumerable: true, get: function () { return csrm_risk_persistence_helper_1.CSRM_RISKS_TABLE; } });
|
|
400
405
|
__exportStar(require("./models/LegalContractReviewRequestModel"), exports);
|
|
401
406
|
var LegalContractReviewRequestModel_1 = require("./models/LegalContractReviewRequestModel");
|
|
402
407
|
Object.defineProperty(exports, "LegalContractReviewRequest", { enumerable: true, get: function () { return LegalContractReviewRequestModel_1.LegalContractReviewRequest; } });
|
package/package.json
CHANGED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { EntityManager } from 'typeorm';
|
|
2
|
+
|
|
3
|
+
/** DB columns written on create/update (order matches parameterized INSERT). */
|
|
4
|
+
export const CSRM_RISK_INSERT_COLUMNS = [
|
|
5
|
+
'request_id',
|
|
6
|
+
'risk_no',
|
|
7
|
+
'impacted_category',
|
|
8
|
+
'impact_area',
|
|
9
|
+
'threat',
|
|
10
|
+
'vulnerability',
|
|
11
|
+
'risk_description',
|
|
12
|
+
'risk_owner',
|
|
13
|
+
'asset_cia_impact',
|
|
14
|
+
'asset_value',
|
|
15
|
+
'likelihood',
|
|
16
|
+
'business_impact',
|
|
17
|
+
'risk_value',
|
|
18
|
+
'new_likelihood',
|
|
19
|
+
'new_business_impact',
|
|
20
|
+
'new_risk_value',
|
|
21
|
+
'existing_controls',
|
|
22
|
+
'start_date',
|
|
23
|
+
'end_date',
|
|
24
|
+
'iso_control_reference',
|
|
25
|
+
'risk_treatment_plan',
|
|
26
|
+
'treatment',
|
|
27
|
+
'action',
|
|
28
|
+
'confidentiality',
|
|
29
|
+
'integrity',
|
|
30
|
+
'availability',
|
|
31
|
+
'new_control',
|
|
32
|
+
'actual_end_date',
|
|
33
|
+
'notes',
|
|
34
|
+
'justification_for_delay',
|
|
35
|
+
'created_by',
|
|
36
|
+
'is_deleted',
|
|
37
|
+
] as const;
|
|
38
|
+
|
|
39
|
+
export const CSRM_RISKS_TABLE = 'cyber_security_risk_management_risks';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Maps one API/workflow risk object to DB values (same pattern as Duty Mission child rows:
|
|
43
|
+
* each property comes from the payload item, plus request_id / created_by / is_deleted from server).
|
|
44
|
+
*/
|
|
45
|
+
export function buildCyberSecurityRiskInsertRow(
|
|
46
|
+
requestId: number,
|
|
47
|
+
riskPayload: Record<string, unknown>,
|
|
48
|
+
createdBy: number,
|
|
49
|
+
): Record<(typeof CSRM_RISK_INSERT_COLUMNS)[number], unknown> {
|
|
50
|
+
const item = riskPayload;
|
|
51
|
+
|
|
52
|
+
const optionalText = (v: unknown): string | null => {
|
|
53
|
+
if (v === null || v === undefined) return null;
|
|
54
|
+
const s = String(v);
|
|
55
|
+
return s.length ? s : null;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const optionalNumber = (v: unknown): number | null => {
|
|
59
|
+
if (v === null || v === undefined || v === '') return null;
|
|
60
|
+
const n = Number(v);
|
|
61
|
+
return Number.isFinite(n) ? n : null;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const optionalDate = (v: unknown): Date | null => {
|
|
65
|
+
if (v === null || v === undefined || v === '') return null;
|
|
66
|
+
const d = new Date(String(v));
|
|
67
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const requiredDate = (v: unknown): Date => optionalDate(v) ?? new Date(String(v));
|
|
71
|
+
|
|
72
|
+
const riskValueFromPayload = optionalNumber(item.risk_value);
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
request_id: requestId,
|
|
76
|
+
risk_no: item.risk_no,
|
|
77
|
+
impacted_category: item.impacted_category,
|
|
78
|
+
impact_area: item.impact_area,
|
|
79
|
+
threat: item.threat,
|
|
80
|
+
vulnerability: item.vulnerability,
|
|
81
|
+
risk_description: item.risk_description,
|
|
82
|
+
risk_owner: item.risk_owner,
|
|
83
|
+
asset_cia_impact: Number(item.asset_cia_impact),
|
|
84
|
+
asset_value: optionalNumber(item.asset_value),
|
|
85
|
+
likelihood: Number(item.likelihood),
|
|
86
|
+
business_impact: Number(item.business_impact),
|
|
87
|
+
risk_value: riskValueFromPayload ?? 0,
|
|
88
|
+
new_likelihood: optionalNumber(item.new_likelihood),
|
|
89
|
+
new_business_impact: optionalNumber(item.new_business_impact),
|
|
90
|
+
new_risk_value: optionalNumber(item.new_risk_value),
|
|
91
|
+
existing_controls: item.existing_controls,
|
|
92
|
+
start_date: requiredDate(item.start_date),
|
|
93
|
+
end_date: requiredDate(item.end_date),
|
|
94
|
+
iso_control_reference: optionalText(item.iso_control_reference),
|
|
95
|
+
risk_treatment_plan: item.risk_treatment_plan,
|
|
96
|
+
treatment: optionalText(item.treatment),
|
|
97
|
+
action: optionalText(item.action),
|
|
98
|
+
confidentiality: optionalNumber(item.confidentiality),
|
|
99
|
+
integrity: optionalNumber(item.integrity),
|
|
100
|
+
availability: optionalNumber(item.availability),
|
|
101
|
+
new_control: optionalText(item.new_control),
|
|
102
|
+
actual_end_date: optionalDate(item.actual_end_date),
|
|
103
|
+
notes: optionalText(item.notes),
|
|
104
|
+
justification_for_delay: optionalText(item.justification_for_delay),
|
|
105
|
+
created_by: createdBy,
|
|
106
|
+
is_deleted: false,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** Persists one risk row from workflow/API payload (explicit INSERT, like annual_training_plan_items). */
|
|
111
|
+
export async function persistCsrmRiskFromPayload(
|
|
112
|
+
manager: EntityManager,
|
|
113
|
+
requestId: number,
|
|
114
|
+
riskPayload: Record<string, unknown>,
|
|
115
|
+
createdBy: number,
|
|
116
|
+
): Promise<void> {
|
|
117
|
+
const row = buildCyberSecurityRiskInsertRow(requestId, riskPayload, createdBy);
|
|
118
|
+
const values = CSRM_RISK_INSERT_COLUMNS.map((col) => row[col]);
|
|
119
|
+
const colList = CSRM_RISK_INSERT_COLUMNS.map((c) => `"${c}"`).join(', ');
|
|
120
|
+
const placeholders = CSRM_RISK_INSERT_COLUMNS.map((_, i) => `$${i + 1}`).join(', ');
|
|
121
|
+
await manager.query(
|
|
122
|
+
`INSERT INTO ${CSRM_RISKS_TABLE} (${colList}) VALUES (${placeholders})`,
|
|
123
|
+
values,
|
|
124
|
+
);
|
|
125
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -282,6 +282,12 @@ export {
|
|
|
282
282
|
CyberSecurityRiskManagementRisk,
|
|
283
283
|
CyberSecurityRiskImpactedCategory
|
|
284
284
|
} from './models/CyberSecurityRiskManagementRiskModel';
|
|
285
|
+
export {
|
|
286
|
+
buildCyberSecurityRiskInsertRow,
|
|
287
|
+
persistCsrmRiskFromPayload,
|
|
288
|
+
CSRM_RISK_INSERT_COLUMNS,
|
|
289
|
+
CSRM_RISKS_TABLE,
|
|
290
|
+
} from './helpers/csrm-risk-persistence.helper';
|
|
285
291
|
export * from './models/LegalContractReviewRequestModel';
|
|
286
292
|
export {
|
|
287
293
|
LegalContractReviewRequest,
|