@platform-modules/civil-aviation-authority 2.3.335 → 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
@@ -174,6 +174,9 @@ export { StudyLeaveRequestChat } from './models/StudyLeaveChatModel';
174
174
  export { StudyLeaveMessageType } from './models/StudyLeaveChatModel';
175
175
  export { StudyLeaveChatStatus } from './models/StudyLeaveChatModel';
176
176
  export * from './models/AnnualTrainingPlanRequestModel';
177
+ export * from './models/AnnualTrainingPlanItemModel';
178
+ export * from './models/AnnualTrainingPlanDepartmentPlanModel';
179
+ export * from './models/AnnualTrainingPlanDepartmentPlanDecisionModel';
177
180
  export * from './models/AnnualTrainingPlanWorkflowModel';
178
181
  export * from './models/AnnualTrainingPlanApprovalModel';
179
182
  export * from './models/AnnualTrainingPlanChatModel';
@@ -263,6 +266,7 @@ export * from './models/CyberSecurityRiskManagementRequestModel';
263
266
  export { CyberSecurityRiskManagementRequest, CyberSecurityRiskManagementRequestStatus } from './models/CyberSecurityRiskManagementRequestModel';
264
267
  export * from './models/CyberSecurityRiskManagementRiskModel';
265
268
  export { CyberSecurityRiskManagementRisk, CyberSecurityRiskImpactedCategory } from './models/CyberSecurityRiskManagementRiskModel';
269
+ export { buildCyberSecurityRiskInsertRow, persistCsrmRiskFromPayload, CSRM_RISK_INSERT_COLUMNS, CSRM_RISKS_TABLE, } from './helpers/csrm-risk-persistence.helper';
266
270
  export * from './models/LegalContractReviewRequestModel';
267
271
  export { LegalContractReviewRequest, LegalContractReviewRequestStatus, LegalContractReviewRequestType } from './models/LegalContractReviewRequestModel';
268
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);
@@ -235,6 +235,9 @@ Object.defineProperty(exports, "StudyLeaveMessageType", { enumerable: true, get:
235
235
  var StudyLeaveChatModel_3 = require("./models/StudyLeaveChatModel");
236
236
  Object.defineProperty(exports, "StudyLeaveChatStatus", { enumerable: true, get: function () { return StudyLeaveChatModel_3.StudyLeaveChatStatus; } });
237
237
  __exportStar(require("./models/AnnualTrainingPlanRequestModel"), exports);
238
+ __exportStar(require("./models/AnnualTrainingPlanItemModel"), exports);
239
+ __exportStar(require("./models/AnnualTrainingPlanDepartmentPlanModel"), exports);
240
+ __exportStar(require("./models/AnnualTrainingPlanDepartmentPlanDecisionModel"), exports);
238
241
  __exportStar(require("./models/AnnualTrainingPlanWorkflowModel"), exports);
239
242
  __exportStar(require("./models/AnnualTrainingPlanApprovalModel"), exports);
240
243
  __exportStar(require("./models/AnnualTrainingPlanChatModel"), exports);
@@ -394,6 +397,11 @@ __exportStar(require("./models/CyberSecurityRiskManagementRiskModel"), exports);
394
397
  var CyberSecurityRiskManagementRiskModel_1 = require("./models/CyberSecurityRiskManagementRiskModel");
395
398
  Object.defineProperty(exports, "CyberSecurityRiskManagementRisk", { enumerable: true, get: function () { return CyberSecurityRiskManagementRiskModel_1.CyberSecurityRiskManagementRisk; } });
396
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; } });
397
405
  __exportStar(require("./models/LegalContractReviewRequestModel"), exports);
398
406
  var LegalContractReviewRequestModel_1 = require("./models/LegalContractReviewRequestModel");
399
407
  Object.defineProperty(exports, "LegalContractReviewRequest", { enumerable: true, get: function () { return LegalContractReviewRequestModel_1.LegalContractReviewRequest; } });
@@ -0,0 +1,10 @@
1
+ import { BaseModel } from "./BaseModel";
2
+ import { AnnualTrainingPlanDepartmentPlan, AnnualTrainingPlanDepartmentPlanStatus } from "./AnnualTrainingPlanDepartmentPlanModel";
3
+ export declare class AnnualTrainingPlanDepartmentPlanDecision extends BaseModel {
4
+ department_plan_id: number;
5
+ approval_level: number;
6
+ status: AnnualTrainingPlanDepartmentPlanStatus;
7
+ comment: string | null;
8
+ decided_by: number | null;
9
+ department_plan: AnnualTrainingPlanDepartmentPlan;
10
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AnnualTrainingPlanDepartmentPlanDecision = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const BaseModel_1 = require("./BaseModel");
15
+ const AnnualTrainingPlanDepartmentPlanModel_1 = require("./AnnualTrainingPlanDepartmentPlanModel");
16
+ let AnnualTrainingPlanDepartmentPlanDecision = class AnnualTrainingPlanDepartmentPlanDecision extends BaseModel_1.BaseModel {
17
+ };
18
+ exports.AnnualTrainingPlanDepartmentPlanDecision = AnnualTrainingPlanDepartmentPlanDecision;
19
+ __decorate([
20
+ (0, typeorm_1.Column)({ type: "integer", nullable: false }),
21
+ __metadata("design:type", Number)
22
+ ], AnnualTrainingPlanDepartmentPlanDecision.prototype, "department_plan_id", void 0);
23
+ __decorate([
24
+ (0, typeorm_1.Column)({ type: "integer", nullable: false }),
25
+ __metadata("design:type", Number)
26
+ ], AnnualTrainingPlanDepartmentPlanDecision.prototype, "approval_level", void 0);
27
+ __decorate([
28
+ (0, typeorm_1.Column)({
29
+ type: "enum",
30
+ enum: AnnualTrainingPlanDepartmentPlanModel_1.AnnualTrainingPlanDepartmentPlanStatus,
31
+ nullable: false
32
+ }),
33
+ __metadata("design:type", String)
34
+ ], AnnualTrainingPlanDepartmentPlanDecision.prototype, "status", void 0);
35
+ __decorate([
36
+ (0, typeorm_1.Column)({ type: "text", nullable: true }),
37
+ __metadata("design:type", Object)
38
+ ], AnnualTrainingPlanDepartmentPlanDecision.prototype, "comment", void 0);
39
+ __decorate([
40
+ (0, typeorm_1.Column)({ type: "integer", nullable: true }),
41
+ __metadata("design:type", Object)
42
+ ], AnnualTrainingPlanDepartmentPlanDecision.prototype, "decided_by", void 0);
43
+ __decorate([
44
+ (0, typeorm_1.ManyToOne)(() => AnnualTrainingPlanDepartmentPlanModel_1.AnnualTrainingPlanDepartmentPlan, { onDelete: "CASCADE" }),
45
+ (0, typeorm_1.JoinColumn)({ name: "department_plan_id" }),
46
+ __metadata("design:type", AnnualTrainingPlanDepartmentPlanModel_1.AnnualTrainingPlanDepartmentPlan)
47
+ ], AnnualTrainingPlanDepartmentPlanDecision.prototype, "department_plan", void 0);
48
+ exports.AnnualTrainingPlanDepartmentPlanDecision = AnnualTrainingPlanDepartmentPlanDecision = __decorate([
49
+ (0, typeorm_1.Entity)({ name: "annual_training_plan_department_plan_decisions" }),
50
+ (0, typeorm_1.Index)(["department_plan_id", "approval_level"])
51
+ ], AnnualTrainingPlanDepartmentPlanDecision);
@@ -0,0 +1,13 @@
1
+ import { BaseModel } from "./BaseModel";
2
+ import { AnnualTrainingPlanRequest } from "./AnnualTrainingPlanRequestModel";
3
+ export declare enum AnnualTrainingPlanDepartmentPlanStatus {
4
+ PENDING = "Pending",
5
+ APPROVED = "Approved",
6
+ REJECTED = "Rejected"
7
+ }
8
+ export declare class AnnualTrainingPlanDepartmentPlan extends BaseModel {
9
+ request_id: number;
10
+ department_id: number;
11
+ status: AnnualTrainingPlanDepartmentPlanStatus;
12
+ request: AnnualTrainingPlanRequest;
13
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AnnualTrainingPlanDepartmentPlan = exports.AnnualTrainingPlanDepartmentPlanStatus = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const BaseModel_1 = require("./BaseModel");
15
+ const AnnualTrainingPlanRequestModel_1 = require("./AnnualTrainingPlanRequestModel");
16
+ var AnnualTrainingPlanDepartmentPlanStatus;
17
+ (function (AnnualTrainingPlanDepartmentPlanStatus) {
18
+ AnnualTrainingPlanDepartmentPlanStatus["PENDING"] = "Pending";
19
+ AnnualTrainingPlanDepartmentPlanStatus["APPROVED"] = "Approved";
20
+ AnnualTrainingPlanDepartmentPlanStatus["REJECTED"] = "Rejected";
21
+ })(AnnualTrainingPlanDepartmentPlanStatus || (exports.AnnualTrainingPlanDepartmentPlanStatus = AnnualTrainingPlanDepartmentPlanStatus = {}));
22
+ let AnnualTrainingPlanDepartmentPlan = class AnnualTrainingPlanDepartmentPlan extends BaseModel_1.BaseModel {
23
+ };
24
+ exports.AnnualTrainingPlanDepartmentPlan = AnnualTrainingPlanDepartmentPlan;
25
+ __decorate([
26
+ (0, typeorm_1.Column)({ type: "integer", nullable: false }),
27
+ __metadata("design:type", Number)
28
+ ], AnnualTrainingPlanDepartmentPlan.prototype, "request_id", void 0);
29
+ __decorate([
30
+ (0, typeorm_1.Column)({ type: "integer", nullable: false }),
31
+ __metadata("design:type", Number)
32
+ ], AnnualTrainingPlanDepartmentPlan.prototype, "department_id", void 0);
33
+ __decorate([
34
+ (0, typeorm_1.Column)({
35
+ type: "enum",
36
+ enum: AnnualTrainingPlanDepartmentPlanStatus,
37
+ default: AnnualTrainingPlanDepartmentPlanStatus.PENDING,
38
+ nullable: false
39
+ }),
40
+ __metadata("design:type", String)
41
+ ], AnnualTrainingPlanDepartmentPlan.prototype, "status", void 0);
42
+ __decorate([
43
+ (0, typeorm_1.ManyToOne)(() => AnnualTrainingPlanRequestModel_1.AnnualTrainingPlanRequest, { onDelete: "CASCADE" }),
44
+ (0, typeorm_1.JoinColumn)({ name: "request_id" }),
45
+ __metadata("design:type", AnnualTrainingPlanRequestModel_1.AnnualTrainingPlanRequest)
46
+ ], AnnualTrainingPlanDepartmentPlan.prototype, "request", void 0);
47
+ exports.AnnualTrainingPlanDepartmentPlan = AnnualTrainingPlanDepartmentPlan = __decorate([
48
+ (0, typeorm_1.Entity)({ name: "annual_training_plan_department_plans" }),
49
+ (0, typeorm_1.Index)(["request_id"])
50
+ ], AnnualTrainingPlanDepartmentPlan);
@@ -0,0 +1,22 @@
1
+ import { BaseModel } from "./BaseModel";
2
+ import { AnnualTrainingPlanPlace, AnnualTrainingPlanRequest } from "./AnnualTrainingPlanRequestModel";
3
+ export declare class AnnualTrainingPlanItem extends BaseModel {
4
+ request_id: number;
5
+ department_plan_id: number | null;
6
+ row_number: number;
7
+ department_id: number;
8
+ section_id: number | null;
9
+ course_name: string;
10
+ no_of_participants: number;
11
+ course_cost: number;
12
+ total_cost: number;
13
+ proposed_implementation_date: string;
14
+ description: string;
15
+ reason: string;
16
+ job_competency: string | null;
17
+ place: AnnualTrainingPlanPlace | null;
18
+ location: string | null;
19
+ name_of_participants: string[] | null;
20
+ employee_list: any[] | null;
21
+ request: AnnualTrainingPlanRequest;
22
+ }
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AnnualTrainingPlanItem = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const BaseModel_1 = require("./BaseModel");
15
+ const AnnualTrainingPlanRequestModel_1 = require("./AnnualTrainingPlanRequestModel");
16
+ let AnnualTrainingPlanItem = class AnnualTrainingPlanItem extends BaseModel_1.BaseModel {
17
+ };
18
+ exports.AnnualTrainingPlanItem = AnnualTrainingPlanItem;
19
+ __decorate([
20
+ (0, typeorm_1.Column)({ type: "integer", nullable: false }),
21
+ __metadata("design:type", Number)
22
+ ], AnnualTrainingPlanItem.prototype, "request_id", void 0);
23
+ __decorate([
24
+ (0, typeorm_1.Column)({ type: "integer", nullable: true }),
25
+ __metadata("design:type", Object)
26
+ ], AnnualTrainingPlanItem.prototype, "department_plan_id", void 0);
27
+ __decorate([
28
+ (0, typeorm_1.Column)({ type: "integer", nullable: false }),
29
+ __metadata("design:type", Number)
30
+ ], AnnualTrainingPlanItem.prototype, "row_number", void 0);
31
+ __decorate([
32
+ (0, typeorm_1.Column)({ type: "integer", nullable: false }),
33
+ __metadata("design:type", Number)
34
+ ], AnnualTrainingPlanItem.prototype, "department_id", void 0);
35
+ __decorate([
36
+ (0, typeorm_1.Column)({ type: "integer", nullable: true }),
37
+ __metadata("design:type", Object)
38
+ ], AnnualTrainingPlanItem.prototype, "section_id", void 0);
39
+ __decorate([
40
+ (0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: false }),
41
+ __metadata("design:type", String)
42
+ ], AnnualTrainingPlanItem.prototype, "course_name", void 0);
43
+ __decorate([
44
+ (0, typeorm_1.Column)({ type: "integer", nullable: false }),
45
+ __metadata("design:type", Number)
46
+ ], AnnualTrainingPlanItem.prototype, "no_of_participants", void 0);
47
+ __decorate([
48
+ (0, typeorm_1.Column)({ type: "decimal", precision: 10, scale: 2, nullable: false }),
49
+ __metadata("design:type", Number)
50
+ ], AnnualTrainingPlanItem.prototype, "course_cost", void 0);
51
+ __decorate([
52
+ (0, typeorm_1.Column)({ type: "decimal", precision: 14, scale: 2, nullable: false }),
53
+ __metadata("design:type", Number)
54
+ ], AnnualTrainingPlanItem.prototype, "total_cost", void 0);
55
+ __decorate([
56
+ (0, typeorm_1.Column)({ type: "varchar", length: 500, nullable: false }),
57
+ __metadata("design:type", String)
58
+ ], AnnualTrainingPlanItem.prototype, "proposed_implementation_date", void 0);
59
+ __decorate([
60
+ (0, typeorm_1.Column)({ type: "text", nullable: false }),
61
+ __metadata("design:type", String)
62
+ ], AnnualTrainingPlanItem.prototype, "description", void 0);
63
+ __decorate([
64
+ (0, typeorm_1.Column)({ type: "text", nullable: false }),
65
+ __metadata("design:type", String)
66
+ ], AnnualTrainingPlanItem.prototype, "reason", void 0);
67
+ __decorate([
68
+ (0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: true }),
69
+ __metadata("design:type", Object)
70
+ ], AnnualTrainingPlanItem.prototype, "job_competency", void 0);
71
+ __decorate([
72
+ (0, typeorm_1.Column)({
73
+ type: "enum",
74
+ enum: AnnualTrainingPlanRequestModel_1.AnnualTrainingPlanPlace,
75
+ nullable: true
76
+ }),
77
+ __metadata("design:type", Object)
78
+ ], AnnualTrainingPlanItem.prototype, "place", void 0);
79
+ __decorate([
80
+ (0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: true }),
81
+ __metadata("design:type", Object)
82
+ ], AnnualTrainingPlanItem.prototype, "location", void 0);
83
+ __decorate([
84
+ (0, typeorm_1.Column)({ type: "jsonb", nullable: true }),
85
+ __metadata("design:type", Object)
86
+ ], AnnualTrainingPlanItem.prototype, "name_of_participants", void 0);
87
+ __decorate([
88
+ (0, typeorm_1.Column)({ type: "jsonb", nullable: true }),
89
+ __metadata("design:type", Object)
90
+ ], AnnualTrainingPlanItem.prototype, "employee_list", void 0);
91
+ __decorate([
92
+ (0, typeorm_1.ManyToOne)(() => AnnualTrainingPlanRequestModel_1.AnnualTrainingPlanRequest, { onDelete: "CASCADE" }),
93
+ (0, typeorm_1.JoinColumn)({ name: "request_id" }),
94
+ __metadata("design:type", AnnualTrainingPlanRequestModel_1.AnnualTrainingPlanRequest)
95
+ ], AnnualTrainingPlanItem.prototype, "request", void 0);
96
+ exports.AnnualTrainingPlanItem = AnnualTrainingPlanItem = __decorate([
97
+ (0, typeorm_1.Entity)({ name: "annual_training_plan_items" }),
98
+ (0, typeorm_1.Unique)(["request_id", "row_number"]),
99
+ (0, typeorm_1.Index)(["request_id"]),
100
+ (0, typeorm_1.Index)(["department_id"])
101
+ ], AnnualTrainingPlanItem);
@@ -10,6 +10,15 @@ export declare enum AnnualTrainingPlanPlace {
10
10
  INSIDE = "Inside",
11
11
  OUTSIDE = "Outside"
12
12
  }
13
+ export declare enum AnnualTrainingPlanImportStatus {
14
+ VALIDATED = "Validated",
15
+ IMPORTED = "Imported",
16
+ FAILED = "Failed"
17
+ }
18
+ export declare enum AnnualTrainingPlanSubmissionSource {
19
+ EXCEL = "Excel",
20
+ DIRECT = "Direct"
21
+ }
13
22
  export declare class AnnualTrainingPlanRequest extends BaseModel {
14
23
  req_user_department_id: number | null;
15
24
  req_user_section_id: number | null;
@@ -17,23 +26,23 @@ export declare class AnnualTrainingPlanRequest extends BaseModel {
17
26
  service_id: number | null;
18
27
  sub_service_id: number | null;
19
28
  user_id: number;
20
- course_name: string;
21
- no_of_participants: number;
22
- course_cost: number;
23
29
  total_cost: number;
24
- proposed_implementation_date: string;
25
- description: string;
26
- place: AnnualTrainingPlanPlace | null;
27
- location: string | null;
28
- reason: string;
29
- employee_list: any[] | null;
30
30
  status: AnnualTrainingPlanRequestStatus;
31
31
  reviewer_user_id: number | null;
32
32
  assigned_to_user_id: number | null;
33
33
  assigned_at: Date | null;
34
34
  workflow_execution_id: string | null;
35
- job_competency: string | null;
36
- name_of_participants: string[] | null;
37
35
  directarate: string | null;
38
- constructor(user_id: number, course_name: string, no_of_participants: number, course_cost: number, total_cost: number, proposed_implementation_date: string, description: string, place: AnnualTrainingPlanPlace | null, reason: string, status?: AnnualTrainingPlanRequestStatus, service_id?: number | null, sub_service_id?: number | null, req_user_department_id?: number | null, req_user_section_id?: number | null, req_user_position_id?: number | null, location?: string | null, employee_list?: any[] | null, reviewer_user_id?: number | null, assigned_to_user_id?: number | null, assigned_at?: Date | null, workflow_execution_id?: string | null, job_competency?: string | null, name_of_participants?: string[] | null, directarate?: string | null);
36
+ plan_name: string | null;
37
+ plan_number: string | null;
38
+ plan_year: number | null;
39
+ source_file_url: string | null;
40
+ source_file_name: string | null;
41
+ total_departments: number;
42
+ total_courses: number;
43
+ total_participants: number;
44
+ import_status: AnnualTrainingPlanImportStatus | null;
45
+ submission_source: AnnualTrainingPlanSubmissionSource | null;
46
+ reference_number: string | null;
47
+ constructor(user_id: number, status?: AnnualTrainingPlanRequestStatus, service_id?: number | null, sub_service_id?: number | null, req_user_department_id?: number | null, req_user_section_id?: number | null, req_user_position_id?: number | null, reviewer_user_id?: number | null, assigned_to_user_id?: number | null, assigned_at?: Date | null, workflow_execution_id?: string | null, directarate?: string | null);
39
48
  }
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.AnnualTrainingPlanRequest = exports.AnnualTrainingPlanPlace = exports.AnnualTrainingPlanRequestStatus = void 0;
12
+ exports.AnnualTrainingPlanRequest = exports.AnnualTrainingPlanSubmissionSource = exports.AnnualTrainingPlanImportStatus = exports.AnnualTrainingPlanPlace = exports.AnnualTrainingPlanRequestStatus = void 0;
13
13
  const typeorm_1 = require("typeorm");
14
14
  const BaseModel_1 = require("./BaseModel");
15
15
  var AnnualTrainingPlanRequestStatus;
@@ -25,33 +25,44 @@ var AnnualTrainingPlanPlace;
25
25
  AnnualTrainingPlanPlace["INSIDE"] = "Inside";
26
26
  AnnualTrainingPlanPlace["OUTSIDE"] = "Outside";
27
27
  })(AnnualTrainingPlanPlace || (exports.AnnualTrainingPlanPlace = AnnualTrainingPlanPlace = {}));
28
+ var AnnualTrainingPlanImportStatus;
29
+ (function (AnnualTrainingPlanImportStatus) {
30
+ AnnualTrainingPlanImportStatus["VALIDATED"] = "Validated";
31
+ AnnualTrainingPlanImportStatus["IMPORTED"] = "Imported";
32
+ AnnualTrainingPlanImportStatus["FAILED"] = "Failed";
33
+ })(AnnualTrainingPlanImportStatus || (exports.AnnualTrainingPlanImportStatus = AnnualTrainingPlanImportStatus = {}));
34
+ var AnnualTrainingPlanSubmissionSource;
35
+ (function (AnnualTrainingPlanSubmissionSource) {
36
+ AnnualTrainingPlanSubmissionSource["EXCEL"] = "Excel";
37
+ AnnualTrainingPlanSubmissionSource["DIRECT"] = "Direct";
38
+ })(AnnualTrainingPlanSubmissionSource || (exports.AnnualTrainingPlanSubmissionSource = AnnualTrainingPlanSubmissionSource = {}));
28
39
  let AnnualTrainingPlanRequest = class AnnualTrainingPlanRequest extends BaseModel_1.BaseModel {
29
- constructor(user_id, course_name, no_of_participants, course_cost, total_cost, proposed_implementation_date, description, place, reason, status = AnnualTrainingPlanRequestStatus.PENDING, service_id, sub_service_id, req_user_department_id, req_user_section_id, req_user_position_id, location, employee_list, reviewer_user_id, assigned_to_user_id, assigned_at, workflow_execution_id, job_competency, name_of_participants, directarate) {
40
+ constructor(user_id, status = AnnualTrainingPlanRequestStatus.PENDING, service_id, sub_service_id, req_user_department_id, req_user_section_id, req_user_position_id, reviewer_user_id, assigned_to_user_id, assigned_at, workflow_execution_id, directarate) {
30
41
  super();
31
42
  this.user_id = user_id;
32
- this.course_name = course_name;
33
- this.no_of_participants = no_of_participants;
34
- this.course_cost = course_cost;
35
- this.total_cost = total_cost;
36
- this.proposed_implementation_date = proposed_implementation_date;
37
- this.description = description;
38
- this.place = place;
39
- this.reason = reason;
43
+ this.total_cost = 0;
40
44
  this.status = status;
41
45
  this.service_id = service_id || null;
42
46
  this.sub_service_id = sub_service_id || null;
43
47
  this.req_user_department_id = req_user_department_id || null;
44
48
  this.req_user_section_id = req_user_section_id || null;
45
49
  this.req_user_position_id = req_user_position_id || null;
46
- this.location = location || null;
47
- this.employee_list = employee_list || null;
48
50
  this.reviewer_user_id = reviewer_user_id || null;
49
51
  this.assigned_to_user_id = assigned_to_user_id || null;
50
52
  this.assigned_at = assigned_at || null;
51
53
  this.workflow_execution_id = workflow_execution_id || null;
52
- this.job_competency = job_competency ?? null;
53
- this.name_of_participants = name_of_participants ?? null;
54
54
  this.directarate = directarate ?? null;
55
+ this.plan_name = null;
56
+ this.plan_number = null;
57
+ this.plan_year = null;
58
+ this.source_file_url = null;
59
+ this.source_file_name = null;
60
+ this.total_departments = 0;
61
+ this.total_courses = 0;
62
+ this.total_participants = 0;
63
+ this.import_status = null;
64
+ this.submission_source = null;
65
+ this.reference_number = null;
55
66
  }
56
67
  };
57
68
  exports.AnnualTrainingPlanRequest = AnnualTrainingPlanRequest;
@@ -80,49 +91,9 @@ __decorate([
80
91
  __metadata("design:type", Number)
81
92
  ], AnnualTrainingPlanRequest.prototype, "user_id", void 0);
82
93
  __decorate([
83
- (0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: false }),
84
- __metadata("design:type", String)
85
- ], AnnualTrainingPlanRequest.prototype, "course_name", void 0);
86
- __decorate([
87
- (0, typeorm_1.Column)({ type: "integer", nullable: false }),
88
- __metadata("design:type", Number)
89
- ], AnnualTrainingPlanRequest.prototype, "no_of_participants", void 0);
90
- __decorate([
91
- (0, typeorm_1.Column)({ type: "decimal", precision: 10, scale: 2, nullable: false }),
92
- __metadata("design:type", Number)
93
- ], AnnualTrainingPlanRequest.prototype, "course_cost", void 0);
94
- __decorate([
95
- (0, typeorm_1.Column)({ type: "decimal", precision: 10, scale: 2, nullable: false }),
94
+ (0, typeorm_1.Column)({ type: "decimal", precision: 14, scale: 2, nullable: false, default: 0 }),
96
95
  __metadata("design:type", Number)
97
96
  ], AnnualTrainingPlanRequest.prototype, "total_cost", void 0);
98
- __decorate([
99
- (0, typeorm_1.Column)({ type: "varchar", length: 500, nullable: false, default: "" }),
100
- __metadata("design:type", String)
101
- ], AnnualTrainingPlanRequest.prototype, "proposed_implementation_date", void 0);
102
- __decorate([
103
- (0, typeorm_1.Column)({ type: "text", nullable: false }),
104
- __metadata("design:type", String)
105
- ], AnnualTrainingPlanRequest.prototype, "description", void 0);
106
- __decorate([
107
- (0, typeorm_1.Column)({
108
- type: "enum",
109
- enum: AnnualTrainingPlanPlace,
110
- nullable: true
111
- }),
112
- __metadata("design:type", Object)
113
- ], AnnualTrainingPlanRequest.prototype, "place", void 0);
114
- __decorate([
115
- (0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: true }),
116
- __metadata("design:type", Object)
117
- ], AnnualTrainingPlanRequest.prototype, "location", void 0);
118
- __decorate([
119
- (0, typeorm_1.Column)({ type: "text", nullable: false }),
120
- __metadata("design:type", String)
121
- ], AnnualTrainingPlanRequest.prototype, "reason", void 0);
122
- __decorate([
123
- (0, typeorm_1.Column)({ type: "jsonb", nullable: true }),
124
- __metadata("design:type", Object)
125
- ], AnnualTrainingPlanRequest.prototype, "employee_list", void 0);
126
97
  __decorate([
127
98
  (0, typeorm_1.Column)({
128
99
  type: "enum",
@@ -151,16 +122,60 @@ __decorate([
151
122
  __decorate([
152
123
  (0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: true }),
153
124
  __metadata("design:type", Object)
154
- ], AnnualTrainingPlanRequest.prototype, "job_competency", void 0);
125
+ ], AnnualTrainingPlanRequest.prototype, "directarate", void 0);
126
+ __decorate([
127
+ (0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: true }),
128
+ __metadata("design:type", Object)
129
+ ], AnnualTrainingPlanRequest.prototype, "plan_name", void 0);
130
+ __decorate([
131
+ (0, typeorm_1.Column)({ type: "varchar", length: 30, nullable: true, unique: true }),
132
+ __metadata("design:type", Object)
133
+ ], AnnualTrainingPlanRequest.prototype, "plan_number", void 0);
155
134
  __decorate([
156
- (0, typeorm_1.Column)({ type: "jsonb", nullable: true }),
135
+ (0, typeorm_1.Column)({ type: "integer", nullable: true }),
157
136
  __metadata("design:type", Object)
158
- ], AnnualTrainingPlanRequest.prototype, "name_of_participants", void 0);
137
+ ], AnnualTrainingPlanRequest.prototype, "plan_year", void 0);
138
+ __decorate([
139
+ (0, typeorm_1.Column)({ type: "varchar", length: 1000, nullable: true }),
140
+ __metadata("design:type", Object)
141
+ ], AnnualTrainingPlanRequest.prototype, "source_file_url", void 0);
159
142
  __decorate([
160
143
  (0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: true }),
161
144
  __metadata("design:type", Object)
162
- ], AnnualTrainingPlanRequest.prototype, "directarate", void 0);
145
+ ], AnnualTrainingPlanRequest.prototype, "source_file_name", void 0);
146
+ __decorate([
147
+ (0, typeorm_1.Column)({ type: "integer", nullable: false, default: 0 }),
148
+ __metadata("design:type", Number)
149
+ ], AnnualTrainingPlanRequest.prototype, "total_departments", void 0);
150
+ __decorate([
151
+ (0, typeorm_1.Column)({ type: "integer", nullable: false, default: 0 }),
152
+ __metadata("design:type", Number)
153
+ ], AnnualTrainingPlanRequest.prototype, "total_courses", void 0);
154
+ __decorate([
155
+ (0, typeorm_1.Column)({ type: "integer", nullable: false, default: 0 }),
156
+ __metadata("design:type", Number)
157
+ ], AnnualTrainingPlanRequest.prototype, "total_participants", void 0);
158
+ __decorate([
159
+ (0, typeorm_1.Column)({
160
+ type: "enum",
161
+ enum: AnnualTrainingPlanImportStatus,
162
+ nullable: true
163
+ }),
164
+ __metadata("design:type", Object)
165
+ ], AnnualTrainingPlanRequest.prototype, "import_status", void 0);
166
+ __decorate([
167
+ (0, typeorm_1.Column)({
168
+ type: "enum",
169
+ enum: AnnualTrainingPlanSubmissionSource,
170
+ nullable: true
171
+ }),
172
+ __metadata("design:type", Object)
173
+ ], AnnualTrainingPlanRequest.prototype, "submission_source", void 0);
174
+ __decorate([
175
+ (0, typeorm_1.Column)({ type: "varchar", length: 20, nullable: true, unique: true }),
176
+ __metadata("design:type", Object)
177
+ ], AnnualTrainingPlanRequest.prototype, "reference_number", void 0);
163
178
  exports.AnnualTrainingPlanRequest = AnnualTrainingPlanRequest = __decorate([
164
179
  (0, typeorm_1.Entity)({ name: "annual_training_plan_requests" }),
165
- __metadata("design:paramtypes", [Number, String, Number, Number, Number, String, String, Object, String, String, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object])
180
+ __metadata("design:paramtypes", [Number, String, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object])
166
181
  ], AnnualTrainingPlanRequest);
@@ -23,6 +23,9 @@ export declare class CyberSecurityRiskManagementRisk extends BaseModel {
23
23
  likelihood: number;
24
24
  business_impact: number;
25
25
  risk_value: number;
26
+ new_likelihood: number | null;
27
+ new_business_impact: number | null;
28
+ new_risk_value: number | null;
26
29
  existing_controls: string;
27
30
  start_date: Date;
28
31
  end_date: Date;
@@ -78,6 +78,18 @@ __decorate([
78
78
  (0, typeorm_1.Column)({ type: "decimal", precision: 18, scale: 4, nullable: false }),
79
79
  __metadata("design:type", Number)
80
80
  ], CyberSecurityRiskManagementRisk.prototype, "risk_value", void 0);
81
+ __decorate([
82
+ (0, typeorm_1.Column)({ type: "integer", nullable: true }),
83
+ __metadata("design:type", Object)
84
+ ], CyberSecurityRiskManagementRisk.prototype, "new_likelihood", void 0);
85
+ __decorate([
86
+ (0, typeorm_1.Column)({ type: "integer", nullable: true }),
87
+ __metadata("design:type", Object)
88
+ ], CyberSecurityRiskManagementRisk.prototype, "new_business_impact", void 0);
89
+ __decorate([
90
+ (0, typeorm_1.Column)({ type: "decimal", precision: 18, scale: 4, nullable: true }),
91
+ __metadata("design:type", Object)
92
+ ], CyberSecurityRiskManagementRisk.prototype, "new_risk_value", void 0);
81
93
  __decorate([
82
94
  (0, typeorm_1.Column)({ type: "text", nullable: false }),
83
95
  __metadata("design:type", String)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platform-modules/civil-aviation-authority",
3
- "version": "2.3.335",
3
+ "version": "2.3.337",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
@@ -1,5 +1,8 @@
1
- -- Cyber security risk management risks: tracking / closure fields
1
+ -- Cyber security risk management risks: tracking / closure / residual risk fields
2
2
  ALTER TABLE cyber_security_risk_management_risks
3
+ ADD COLUMN IF NOT EXISTS new_likelihood INTEGER,
4
+ ADD COLUMN IF NOT EXISTS new_business_impact INTEGER,
5
+ ADD COLUMN IF NOT EXISTS new_risk_value NUMERIC(18, 4),
3
6
  ADD COLUMN IF NOT EXISTS new_control TEXT,
4
7
  ADD COLUMN IF NOT EXISTS actual_end_date DATE,
5
8
  ADD COLUMN IF NOT EXISTS notes TEXT,
@@ -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,
@@ -53,6 +53,15 @@ export class CyberSecurityRiskManagementRisk extends BaseModel {
53
53
  @Column({ type: "decimal", precision: 18, scale: 4, nullable: false })
54
54
  risk_value: number;
55
55
 
56
+ @Column({ type: "integer", nullable: true })
57
+ new_likelihood: number | null;
58
+
59
+ @Column({ type: "integer", nullable: true })
60
+ new_business_impact: number | null;
61
+
62
+ @Column({ type: "decimal", precision: 18, scale: 4, nullable: true })
63
+ new_risk_value: number | null;
64
+
56
65
  @Column({ type: "text", nullable: false })
57
66
  existing_controls: string;
58
67