@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platform-modules/civil-aviation-authority",
3
- "version": "2.3.336",
3
+ "version": "2.3.337",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
@@ -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,