@platform-modules/civil-aviation-authority 2.3.290 → 2.3.292

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.
Files changed (119) hide show
  1. package/dist/data-source.js +2 -0
  2. package/dist/i18n/workflow-chat-i18n.json +45 -41
  3. package/dist/i18n/workflow-chat-message.builder.d.ts +9 -0
  4. package/dist/i18n/workflow-chat-message.builder.js +60 -27
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.js +1 -0
  7. package/dist/models/AppealAgainstAdministrativeDecisionRequestModel.d.ts +4 -4
  8. package/dist/models/AppealAgainstAdministrativeDecisionRequestModel.js +8 -8
  9. package/dist/models/CyberSecurityAuditRequestModel.d.ts +2 -0
  10. package/dist/models/CyberSecurityAuditRequestModel.js +8 -0
  11. package/dist/models/CyberSecurityRiskManagementRiskModel.d.ts +2 -0
  12. package/dist/models/CyberSecurityRiskManagementRiskModel.js +8 -0
  13. package/dist/models/FollowUpReportItemModel.d.ts +16 -0
  14. package/dist/models/FollowUpReportItemModel.js +74 -0
  15. package/dist/models/FollowUpReportRequestModel.d.ts +5 -0
  16. package/dist/models/FollowUpReportRequestModel.js +20 -0
  17. package/dist/models/MaintenanceRequestModel.d.ts +3 -1
  18. package/dist/models/MaintenanceRequestModel.js +2 -0
  19. package/dist/models/RequestATenderRequestModel.d.ts +2 -0
  20. package/dist/models/RequestATenderRequestModel.js +8 -0
  21. package/dist/models/ResidentialUnitRentalRequestModel.d.ts +1 -1
  22. package/dist/models/ResidentialUnitRentalRequestModel.js +2 -2
  23. package/package.json +1 -1
  24. package/sql/add_all_workflow_chat_arabic_columns.sql +1 -1
  25. package/sql/caa_api_payload_changes_2026_07.sql +32 -0
  26. package/src/data-source.ts +2 -0
  27. package/src/i18n/workflow-chat-i18n.json +45 -41
  28. package/src/i18n/workflow-chat-message.builder.ts +77 -26
  29. package/src/index.ts +1 -0
  30. package/src/models/AccessCardChatModel.ts +6 -6
  31. package/src/models/AccessCardWorkflowModel.ts +6 -6
  32. package/src/models/AccommodationChatModel.ts +6 -6
  33. package/src/models/AccommodationWorkflowModel.ts +6 -6
  34. package/src/models/AirportEntryPermitChatModel.ts +6 -6
  35. package/src/models/AirportEntryPermitWorkflowModel.ts +6 -6
  36. package/src/models/AnnualTrainingPlanChatModel.ts +6 -6
  37. package/src/models/AnnualTrainingPlanWorkflowModel.ts +6 -6
  38. package/src/models/AppealAgainstAdministrativeDecisionRequestModel.ts +8 -8
  39. package/src/models/AssignTasksEmpChatModel.ts +6 -6
  40. package/src/models/AssignTasksEmpWorkflowModel.ts +6 -6
  41. package/src/models/ComplaintLostPropertyReportChatModel.ts +6 -6
  42. package/src/models/ComplaintLostPropertyReportWorkflowModel.ts +6 -6
  43. package/src/models/CyberSecurityAuditRequestModel.ts +6 -0
  44. package/src/models/CyberSecurityRiskManagementRiskModel.ts +6 -0
  45. package/src/models/DutyMissionChatModel.ts +6 -6
  46. package/src/models/DutyMissionWorkflowModel.ts +6 -6
  47. package/src/models/EventSupportChatModel.ts +6 -6
  48. package/src/models/EventSupportWorkflowModel.ts +6 -6
  49. package/src/models/FollowUpReportChatModel.ts +6 -6
  50. package/src/models/FollowUpReportItemModel.ts +47 -0
  51. package/src/models/FollowUpReportRequestModel.ts +15 -0
  52. package/src/models/FollowUpReportWorkflowModel.ts +6 -6
  53. package/src/models/FoodChatModel.ts +6 -6
  54. package/src/models/FoodWorkflowModel.ts +6 -6
  55. package/src/models/HallChatModel.ts +6 -6
  56. package/src/models/HallWorkflowModel.ts +6 -6
  57. package/src/models/HotelChatModel.ts +6 -6
  58. package/src/models/HotelWorkFlowModel.ts +6 -6
  59. package/src/models/HousingContractCancelChatModel.ts +6 -6
  60. package/src/models/HousingContractCancelWorkflowModel.ts +6 -6
  61. package/src/models/HousingContractRenewalChatModel.ts +6 -6
  62. package/src/models/HousingContractRenewalWorkflowModel.ts +6 -6
  63. package/src/models/HrServiceChatModel.ts +6 -6
  64. package/src/models/HrServiceWorkflowModel.ts +6 -6
  65. package/src/models/ITRequestChatModel.ts +6 -6
  66. package/src/models/ImportExportMaterialChatModel.ts +6 -6
  67. package/src/models/ImportExportMaterialWorkflowModel.ts +6 -6
  68. package/src/models/InformationSecurityChatModel.ts +6 -6
  69. package/src/models/InformationSecurityWorkflowModel.ts +6 -6
  70. package/src/models/ItWorkflowModel.ts +6 -6
  71. package/src/models/LegalComplaintChatModel.ts +6 -6
  72. package/src/models/LegalComplaintWorkflowModel.ts +6 -6
  73. package/src/models/LegalConsultationChatModel.ts +6 -6
  74. package/src/models/LegalConsultationWorkflowModel.ts +6 -6
  75. package/src/models/LegalContractReviewChatModel.ts +6 -6
  76. package/src/models/LegalContractReviewWorkflowModel.ts +6 -6
  77. package/src/models/LogisticsChatModel.ts +6 -6
  78. package/src/models/LogisticsVehicleMaintenanceChatModel.ts +6 -6
  79. package/src/models/LogisticsVehicleMaintenanceWorkflowModel.ts +6 -6
  80. package/src/models/LogisticsWorkflowModel.ts +6 -6
  81. package/src/models/MaintenanceChatModel.ts +6 -6
  82. package/src/models/MaintenanceExternalStationsChatModel.ts +6 -6
  83. package/src/models/MaintenanceExternalStationsWorkflowModel.ts +6 -6
  84. package/src/models/MaintenanceRequestModel.ts +2 -0
  85. package/src/models/MaintenanceWorkflowModel.ts +6 -6
  86. package/src/models/MediaPublicationsChatModel.ts +6 -6
  87. package/src/models/MediaPublicationsWorkflowModel.ts +6 -6
  88. package/src/models/MultiPurposeHallChatModel.ts +6 -6
  89. package/src/models/MultiPurposeHallWorkflowModel.ts +6 -6
  90. package/src/models/RequestATenderRequestModel.ts +6 -0
  91. package/src/models/RequestForCoverageChatModel.ts +6 -6
  92. package/src/models/RequestForCoverageWorkflowModel.ts +6 -6
  93. package/src/models/RequestForPresidentsCoverageChatModel.ts +6 -6
  94. package/src/models/RequestForPresidentsCoverageWorkflowModel.ts +6 -6
  95. package/src/models/ResidentialUnitRentalChatModel.ts +6 -6
  96. package/src/models/ResidentialUnitRentalRequestModel.ts +2 -2
  97. package/src/models/ResidentialUnitRentalWorkflowModel.ts +6 -6
  98. package/src/models/RespondToEnquiriesChatModel.ts +6 -6
  99. package/src/models/RespondToEnquiriesWorkflowModel.ts +6 -6
  100. package/src/models/ScholarshipChatModel.ts +6 -6
  101. package/src/models/ScholarshipWorkflowModel.ts +6 -6
  102. package/src/models/SecurityAwarenessChatModel.ts +6 -6
  103. package/src/models/SecurityAwarenessWorkflowModel.ts +6 -6
  104. package/src/models/SecurityThreatChatModel.ts +6 -6
  105. package/src/models/SecurityThreatWorkflowModel.ts +6 -6
  106. package/src/models/ServiceExtensionAfter60ChatModel.ts +6 -6
  107. package/src/models/ServiceExtensionAfter60WorkflowModel.ts +6 -6
  108. package/src/models/StudyLeaveChatModel.ts +6 -6
  109. package/src/models/StudyLeaveWorkflowModel.ts +6 -6
  110. package/src/models/TrainingChatModel.ts +6 -6
  111. package/src/models/TrainingRoomBookingChatModel.ts +6 -6
  112. package/src/models/TrainingRoomBookingWorkflowModel.ts +6 -6
  113. package/src/models/TrainingWorkflowModel.ts +6 -6
  114. package/src/models/VipHallChatModel.ts +6 -6
  115. package/src/models/VipHallWorkflowModel.ts +6 -6
  116. package/src/models/VpnRequestChatModel.ts +6 -6
  117. package/src/models/VpnWorkflowModel.ts +6 -6
  118. package/src/models/WorkingHoursExtensionChatModel.ts +6 -6
  119. package/src/models/WorkingHoursExtensionWorkflowModel.ts +6 -6
@@ -236,6 +236,7 @@ const MaintenanceExternalStationsAttachmentModel_1 = require("./models/Maintenan
236
236
  const MaintenanceExternalStationsChatModel_1 = require("./models/MaintenanceExternalStationsChatModel");
237
237
  const MaintenanceExternalStationsWorkflowModel_1 = require("./models/MaintenanceExternalStationsWorkflowModel");
238
238
  const FollowUpReportRequestModel_1 = require("./models/FollowUpReportRequestModel");
239
+ const FollowUpReportItemModel_1 = require("./models/FollowUpReportItemModel");
239
240
  const FollowUpReportApprovalModel_1 = require("./models/FollowUpReportApprovalModel");
240
241
  const FollowUpReportAttachmentModel_1 = require("./models/FollowUpReportAttachmentModel");
241
242
  const FollowUpReportChatModel_1 = require("./models/FollowUpReportChatModel");
@@ -557,6 +558,7 @@ exports.AppDataSource = new typeorm_1.DataSource({
557
558
  MaintenanceExternalStationsChatModel_1.MaintenanceExternalStationsChat,
558
559
  MaintenanceExternalStationsWorkflowModel_1.MaintenanceExternalStationsWorkFlow,
559
560
  FollowUpReportRequestModel_1.FollowUpReportRequests,
561
+ FollowUpReportItemModel_1.FollowUpReportItem,
560
562
  FollowUpReportApprovalModel_1.FollowUpReportApprovalDetails,
561
563
  FollowUpReportAttachmentModel_1.FollowUpReportAttachment,
562
564
  FollowUpReportChatModel_1.FollowUpReportChat,
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "request_approval_pending": {
20
20
  "en": "Request Approval Pending",
21
- "ar": "في انتظار الموافقة على الطلب"
21
+ "ar": "الموافقة على الطلب قيد الانتظار"
22
22
  },
23
23
  "request_approval_in_progress_from": {
24
24
  "en": "Request Approval In Progress from {{name}}",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "request_approval_pending_from": {
28
28
  "en": "Request Approval Pending from {{name}}",
29
- "ar": "في انتظار موافقة {{name}}"
29
+ "ar": "الموافقة على الطلب قيد الانتظار من {{name}}"
30
30
  },
31
31
  "request_approved_by": {
32
32
  "en": "Request Approved by {{name}}{{comment}}",
@@ -46,11 +46,11 @@
46
46
  },
47
47
  "request_returned_for_modification_by": {
48
48
  "en": "Request Returned for Modification by {{name}}{{comment}}",
49
- "ar": "تم إرجاع الطلب للتعديل من قبل {{name}}{{comment}}"
49
+ "ar": "تمت إعادة الطلب للتعديل من قبل {{name}}{{comment}}"
50
50
  },
51
51
  "request_returned_for_modification": {
52
52
  "en": "Request Returned for Modification{{comment}}",
53
- "ar": "تم إرجاع الطلب للتعديل{{comment}}"
53
+ "ar": "تمت إعادة الطلب للتعديل{{comment}}"
54
54
  },
55
55
  "request_closed_by": {
56
56
  "en": "Request Closed by: {{name}}{{comment}}",
@@ -62,47 +62,47 @@
62
62
  },
63
63
  "it_helpdesk_wf_hos_assigned": {
64
64
  "en": "{{approverRoleName}} assigned the request to {{assignedRoleName}}{{comment}}",
65
- "ar": "قام {{approverRoleName}} بتعيين الطلب إلى {{assignedRoleName}}{{comment}}"
65
+ "ar": "تم تعيين الطلب إلى {{assignedRoleName}} من قبل {{approverRoleName}}{{comment}}"
66
66
  },
67
67
  "it_helpdesk_wf_technician_assigned": {
68
68
  "en": "IT technician {{level}} assigned by {{approverRoleName}}{{comment}}",
69
- "ar": "تم تعيين فني IT {{level}} بواسطة {{approverRoleName}}{{comment}}"
69
+ "ar": "تم تعيين فني تقنية المعلومات {{level}} من قبل {{approverRoleName}}{{comment}}"
70
70
  },
71
71
  "it_helpdesk_wf_reassigned_technician": {
72
72
  "en": "{{approverRoleName}} reassigned request to Technician{{comment}}{{modifiers}}",
73
- "ar": "أعاد {{approverRoleName}} تعيين الطلب إلى الفني{{comment}}{{modifiers}}"
73
+ "ar": "{{approverRoleName}} تمت إعادة تعيين الطلب إلى الفني{{comment}}{{modifiers}}"
74
74
  },
75
75
  "it_helpdesk_wf_reassigned_l3": {
76
76
  "en": "{{approverRoleName}} reassigned request to L3{{comment}}{{modifiers}}",
77
- "ar": "أعاد {{approverRoleName}} تعيين الطلب إلى L3{{comment}}{{modifiers}}"
77
+ "ar": "{{approverRoleName}} تمت إعادة تعيين الطلب إلى المستوى الثالث (L3){{comment}}{{modifiers}}"
78
78
  },
79
79
  "it_helpdesk_wf_reassigned_generic": {
80
80
  "en": "{{approverRoleName}} {{level}} reassigned{{comment}}{{modifiers}}",
81
- "ar": "أعاد {{approverRoleName}} {{level}} التعيين{{comment}}{{modifiers}}"
81
+ "ar": "{{approverRoleName}} {{level}} إعادة التعيين{{comment}}{{modifiers}}"
82
82
  },
83
83
  "it_helpdesk_wf_closed_request": {
84
84
  "en": "{{approverRoleName}} closed request{{comment}}",
85
- "ar": "أغلق {{approverRoleName}} الطلب{{comment}}"
85
+ "ar": "تم إغلاق الطلب من قبل {{approverRoleName}}{{comment}}"
86
86
  },
87
87
  "it_helpdesk_wf_closed_request_cap": {
88
88
  "en": "{{approverRoleName}} Closed request{{comment}}",
89
- "ar": "أغلق {{approverRoleName}} الطلب{{comment}}"
89
+ "ar": "تم إغلاق الطلب من قبل {{approverRoleName}}{{comment}}"
90
90
  },
91
91
  "it_helpdesk_wf_l3_approved_by": {
92
92
  "en": "{{roleName}} approved the request by {{userName}}{{comment}}",
93
- "ar": "وافق {{roleName}} على الطلب من قبل {{userName}}{{comment}}"
93
+ "ar": "{{roleName}} تمت الموافقة على الطلب من قبل {{userName}}{{comment}}"
94
94
  },
95
95
  "it_helpdesk_wf_l3_rejected_by": {
96
96
  "en": "{{roleName}} rejected the request by {{userName}}{{comment}}",
97
- "ar": "رفض {{roleName}} على الطلب من قبل {{userName}}{{comment}}"
97
+ "ar": "{{roleName}} تم رفض الطلب من قبل {{userName}}{{comment}}"
98
98
  },
99
99
  "it_helpdesk_wf_level_approved": {
100
100
  "en": "Level {{level}} approved by {{approverRoleName}}{{comment}}",
101
- "ar": "تمت الموافقة على المستوى {{level}} من قبل {{approverRoleName}}{{comment}}"
101
+ "ar": "تمت الموافقة من قبل {{approverRoleName}} للمستوى {{level}}{{comment}}"
102
102
  },
103
103
  "it_helpdesk_wf_rejected": {
104
104
  "en": "{{approverRoleName}} rejected the request{{comment}}",
105
- "ar": "رفض {{approverRoleName}} الطلب{{comment}}"
105
+ "ar": "{{approverRoleName}} تم رفض الطلب{{comment}}"
106
106
  },
107
107
  "it_helpdesk_wf_status_by_role": {
108
108
  "en": "Request {{status}} by {{approverRoleName}}{{comment}}",
@@ -110,29 +110,29 @@
110
110
  },
111
111
  "it_helpdesk_wf_l3_step_rejected": {
112
112
  "en": "{{roleName}} rejected the request{{comment}}",
113
- "ar": "رفض {{roleName}} الطلب{{comment}}"
113
+ "ar": "{{roleName}} تم رفض الطلب{{comment}}"
114
114
  },
115
115
  "it_helpdesk_wf_technician_completed": {
116
116
  "en": "Technician action completed - request closed by {{roleName}}{{comment}}",
117
- "ar": "اكتمل إجراء الفني - تم إغلاق الطلب بواسطة {{roleName}}{{comment}}"
117
+ "ar": "تم استكمال إجراء الفني - تم إغلاق الطلب من قبل {{roleName}}{{comment}}"
118
118
  },
119
119
  "it_helpdesk_wf_routing_rejected": {
120
120
  "en": "Workflow routing completed - request rejected at L3{{comment}}",
121
- "ar": "اكتمل توجيه سير العمل - تم رفض الطلب في L3{{comment}}"
121
+ "ar": "تم استكمال مسار سير العمل - تم رفض الطلب في المستوى الثالث (L3){{comment}}"
122
122
  },
123
123
  "it_helpdesk_wf_routing_resolved": {
124
124
  "en": "Workflow routing completed - request resolved at L3",
125
- "ar": "اكتمل توجيه سير العمل - تم حل الطلب في L3"
125
+ "ar": "تم استكمال مسار سير العمل - تم حل الطلب في المستوى الثالث (L3)"
126
126
  }
127
127
  },
128
128
  "chatTemplates": {
129
129
  "request_submitted_by": {
130
130
  "en": "Request Submitted by {{userName}} ({{employeeId}})",
131
- "ar": "تم تقديم الطلب بواسطة {{userName}} ({{employeeId}})"
131
+ "ar": "تم تقديم الطلب من قبل {{userName}} ({{employeeId}})"
132
132
  },
133
133
  "cancellation_submitted_by": {
134
134
  "en": "Cancellation request submitted by {{userName}} ({{employeeId}})",
135
- "ar": "تم تقديم طلب الإلغاء بواسطة {{userName}} ({{employeeId}})"
135
+ "ar": "تم تقديم طلب الإلغاء من قبل {{userName}} ({{employeeId}})"
136
136
  },
137
137
  "cancellation_submitted": {
138
138
  "en": "Cancellation request submitted",
@@ -142,6 +142,10 @@
142
142
  "en": "Request Received",
143
143
  "ar": "تم استلام الطلب"
144
144
  },
145
+ "request_assigned_by_role": {
146
+ "en": "Request assigned by {{roleName}}{{comment}}",
147
+ "ar": "تم تعيين الطلب من قبل {{roleName}}{{comment}}"
148
+ },
145
149
  "request_approved_by_role": {
146
150
  "en": "Request Approved by: {{roleName}}{{comment}}",
147
151
  "ar": "تمت الموافقة على الطلب من قبل: {{roleName}}{{comment}}"
@@ -152,7 +156,7 @@
152
156
  },
153
157
  "request_returned_for_modification_by_role": {
154
158
  "en": "Request Returned for Modification by: {{roleName}}{{comment}}",
155
- "ar": "تم إرجاع الطلب للتعديل من قبل: {{roleName}}{{comment}}"
159
+ "ar": "تمت إعادة الطلب للتعديل من قبل: {{roleName}}{{comment}}"
156
160
  },
157
161
  "request_approved": {
158
162
  "en": "Request Approved{{comment}}",
@@ -164,7 +168,7 @@
164
168
  },
165
169
  "request_returned_for_modification": {
166
170
  "en": "Request Returned for Modification{{comment}}",
167
- "ar": "تم إرجاع الطلب للتعديل{{comment}}"
171
+ "ar": "تمت إعادة الطلب للتعديل{{comment}}"
168
172
  },
169
173
  "request_closed_by_role": {
170
174
  "en": "Request Closed by: {{roleName}}{{comment}}",
@@ -172,11 +176,11 @@
172
176
  },
173
177
  "request_for_change_by_role": {
174
178
  "en": "Request For Change by: {{roleName}}{{comment}}",
175
- "ar": "طلب تعديل من قبل: {{roleName}}{{comment}}"
179
+ "ar": "طلب تغيير من قبل: {{roleName}}{{comment}}"
176
180
  },
177
181
  "request_for_change_requested_by_role": {
178
182
  "en": "Request For Change requested by: {{roleName}}{{comment}}",
179
- "ar": "تم طلب التعديل من قبل: {{roleName}}{{comment}}"
183
+ "ar": "تم طلب التغيير من قبل: {{roleName}}{{comment}}"
180
184
  },
181
185
  "attachment_uploaded": {
182
186
  "en": "Attachment uploaded: {{fileName}}",
@@ -188,11 +192,11 @@
188
192
  },
189
193
  "task_status_in_progress_by_role": {
190
194
  "en": "Task status updated to \"In Progress\" by: {{roleName}}",
191
- "ar": "تم تحديث حالة المهمة إلى \"قيد التنفيذ\" بواسطة: {{roleName}}"
195
+ "ar": "تم تحديث حالة المهمة إلى \"قيد التنفيذ\" من قبل: {{roleName}}"
192
196
  },
193
197
  "task_completed_by_role": {
194
198
  "en": "Task Completed by: {{roleName}}{{comment}}",
195
- "ar": "تم إكمال المهمة بواسطة: {{roleName}}{{comment}}"
199
+ "ar": "اكتملت المهمة من قبل: {{roleName}}{{comment}}"
196
200
  },
197
201
  "task_status_updated": {
198
202
  "en": "Task status updated to {{status}}",
@@ -204,23 +208,23 @@
204
208
  },
205
209
  "it_helpdesk_technician_assigned": {
206
210
  "en": "IT technician {{level}} assigned to {{assignedRoleName}}: {{assignedUserName}}{{comment}}",
207
- "ar": "تم تعيين فني IT {{level}} إلى {{assignedRoleName}}: {{assignedUserName}}{{comment}}"
211
+ "ar": "تم تعيين فني تقنية المعلومات {{level}} إلى {{assignedRoleName}}: {{assignedUserName}}{{comment}}"
208
212
  },
209
213
  "it_helpdesk_reassigned_to_role": {
210
214
  "en": "{{approverRoleName}} reassigned request to {{reassignedRoleName}}{{comment}}",
211
- "ar": "أعاد {{approverRoleName}} تعيين الطلب إلى {{reassignedRoleName}}{{comment}}"
215
+ "ar": "{{approverRoleName}} تمت إعادة تعيين الطلب إلى {{reassignedRoleName}}{{comment}}"
212
216
  },
213
217
  "it_helpdesk_reassigned_to_l3": {
214
218
  "en": "{{approverRoleName}} reassigned request to L3{{comment}}",
215
- "ar": "أعاد {{approverRoleName}} تعيين الطلب إلى L3{{comment}}"
219
+ "ar": "{{approverRoleName}} تمت إعادة تعيين الطلب إلى المستوى الثالث (L3){{comment}}"
216
220
  },
217
221
  "it_helpdesk_reassigned_generic": {
218
222
  "en": "{{approverRoleName}} {{level}} reassigned the request{{comment}}",
219
- "ar": "أعاد {{approverRoleName}} {{level}} تعيين الطلب{{comment}}"
223
+ "ar": "{{approverRoleName}} {{level}} تمت إعادة تعيين الطلب{{comment}}"
220
224
  },
221
225
  "request_submitted_with_ref": {
222
226
  "en": "{{requestLabel}} #{{requestId}} has been submitted by {{userName}} ({{employeeId}})",
223
- "ar": "تم تقديم {{requestLabel}} رقم {{requestId}} بواسطة {{userName}} ({{employeeId}})"
227
+ "ar": "تم تقديم {{requestLabel}} رقم {{requestId}} من قبل {{userName}} ({{employeeId}})"
224
228
  },
225
229
  "security_access_approval_step": {
226
230
  "en": "{{productLabel}} request #{{requestId}} was {{statusWord}} (approval step {{approvalLevel}}).{{comment}}",
@@ -228,7 +232,7 @@
228
232
  },
229
233
  "logistics_actual_return_updated": {
230
234
  "en": "{{roleName}} updated the Vehicle Actual Return Date, Time, and Reason. Actual Return Date: {{date}}, Actual Return Time: {{time}}, Reason: {{reason}}",
231
- "ar": "قام {{roleName}} بتحديث تاريخ ووقت وسبب الإرجاع الفعلي للمركبة. تاريخ الإرجاع الفعلي: {{date}}، وقت الإرجاع الفعلي: {{time}}، السبب: {{reason}}"
235
+ "ar": "قام {{roleName}} بتحديث تاريخ الإرجاع الفعلي للمركبة والوقت والسبب. تاريخ الإرجاع الفعلي: {{date}}، وقت الإرجاع الفعلي: {{time}}، السبب: {{reason}}"
232
236
  }
233
237
  },
234
238
  "notificationTemplates": {
@@ -238,11 +242,11 @@
238
242
  },
239
243
  "it_helpdesk_notif_request_closed": {
240
244
  "en": "IT request #{{requestId}} has been closed",
241
- "ar": "تم إغلاق طلب IT رقم {{requestId}}"
245
+ "ar": "تم إغلاق طلب تقنية المعلومات رقم {{requestId}}"
242
246
  },
243
247
  "it_helpdesk_notif_request_rejected": {
244
248
  "en": "IT request #{{requestId}} has been rejected",
245
- "ar": "تم رفض طلب IT رقم {{requestId}}"
249
+ "ar": "تم رفض طلب تقنية المعلومات رقم {{requestId}}"
246
250
  }
247
251
  },
248
252
  "workflowStatusLabels": {
@@ -253,15 +257,15 @@
253
257
  "chatStatusLabels": {
254
258
  "Submitted": "تم التقديم",
255
259
  "Received": "تم الاستلام",
256
- "Approved": "موافق عليه",
257
- "Rejected": "مرفوض",
260
+ "Approved": "تم الموافقة",
261
+ "Rejected": "تم الرفض",
258
262
  "Pending": "قيد الانتظار",
259
- "Returned for Modification": "أُعيد للتعديل",
260
- "Request For Change": "طلب تعديل",
263
+ "Returned for Modification": "تمت إعادته للتعديل",
264
+ "Request For Change": "طلب تغيير",
261
265
  "Closed": "مغلق",
262
266
  "Completed": "مكتمل",
263
- "Assigned": "معيّن",
264
- "Reassigned": "أعيد التعيين",
267
+ "Assigned": "تم التعيين",
268
+ "Reassigned": "تمت إعادة التعيين",
265
269
  "In Progress": "قيد التنفيذ",
266
270
  "Attachment uploaded": "تم رفع المرفق"
267
271
  }
@@ -96,6 +96,13 @@ export declare function toChatPersistFields(bilingual: BilingualText, status: st
96
96
  status: string;
97
97
  status_ar: string | null;
98
98
  };
99
+ /** User-typed chat — never auto-translate; message_ar stays null. */
100
+ export declare function buildUserEnteredChatPersistFields(message: string, status: string): {
101
+ message: string;
102
+ message_ar: null;
103
+ status: string;
104
+ status_ar: string | null;
105
+ };
99
106
  export declare function buildApprovalWorkflowContent(params: {
100
107
  status: 'Approved' | 'Rejected' | 'Returned for Modification' | 'Pending' | string;
101
108
  roleName?: string | null;
@@ -272,6 +279,8 @@ export declare function resolveChatStatusAr(status: string | null | undefined):
272
279
  export declare function extractBilingualActorsFromRecord(record: Record<string, unknown>): BilingualActorNames;
273
280
  export declare function resolveWorkflowContentAr(content: string | null | undefined, actors?: BilingualActorNames): string | null;
274
281
  export declare function resolveChatMessageAr(message: string | null | undefined, actors?: BilingualActorNames): string | null;
282
+ /** True when message matches a known system chat template (safe to resolve message_ar). */
283
+ export declare function isSystemGeneratedChatMessage(message: string | null | undefined, actors?: BilingualActorNames): boolean;
275
284
  /** Generic workflow log enricher — use in all module repositories. */
276
285
  export declare function enrichWorkflowLog(log: Record<string, unknown>): Record<string, unknown>;
277
286
  /** Generic chat enricher — use in all module repositories. */
@@ -23,6 +23,7 @@ exports.buildSynchronizedChatMessage = buildSynchronizedChatMessage;
23
23
  exports.buildWorkflowLogUpdateFields = buildWorkflowLogUpdateFields;
24
24
  exports.toWorkflowPersistFields = toWorkflowPersistFields;
25
25
  exports.toChatPersistFields = toChatPersistFields;
26
+ exports.buildUserEnteredChatPersistFields = buildUserEnteredChatPersistFields;
26
27
  exports.buildApprovalWorkflowContent = buildApprovalWorkflowContent;
27
28
  exports.buildHumanApprovalWorkflowContent = buildHumanApprovalWorkflowContent;
28
29
  exports.buildApprovalChatMessage = buildApprovalChatMessage;
@@ -49,6 +50,7 @@ exports.resolveChatStatusAr = resolveChatStatusAr;
49
50
  exports.extractBilingualActorsFromRecord = extractBilingualActorsFromRecord;
50
51
  exports.resolveWorkflowContentAr = resolveWorkflowContentAr;
51
52
  exports.resolveChatMessageAr = resolveChatMessageAr;
53
+ exports.isSystemGeneratedChatMessage = isSystemGeneratedChatMessage;
52
54
  exports.enrichWorkflowLog = enrichWorkflowLog;
53
55
  exports.enrichChatMessage = enrichChatMessage;
54
56
  /**
@@ -274,6 +276,15 @@ function toChatPersistFields(bilingual, status) {
274
276
  status_ar: resolveChatStatusAr(status),
275
277
  };
276
278
  }
279
+ /** User-typed chat — never auto-translate; message_ar stays null. */
280
+ function buildUserEnteredChatPersistFields(message, status) {
281
+ return {
282
+ message,
283
+ message_ar: null,
284
+ status,
285
+ status_ar: resolveChatStatusAr(status),
286
+ };
287
+ }
277
288
  function buildApprovalWorkflowContent(params) {
278
289
  const status = params.status;
279
290
  let action;
@@ -689,6 +700,47 @@ function resolveArabicChatRoleName(actors, parsedEnglishRole) {
689
700
  }
690
701
  return resolveBilingualName(parsedEnglishRole, actors?.roleArabicName);
691
702
  }
703
+ function escapeRegexLiteral(value) {
704
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
705
+ }
706
+ /** Match a templated EN message and extract placeholder values (full-structure match). */
707
+ function matchTemplateMessage(templateEn, message) {
708
+ if (!/\{\{\w+\}\}/.test(templateEn))
709
+ return null;
710
+ const placeholders = [];
711
+ let regexBody = '';
712
+ let cursor = 0;
713
+ const tokenRe = /\{\{(\w+)\}\}/g;
714
+ let tokenMatch;
715
+ while ((tokenMatch = tokenRe.exec(templateEn)) !== null) {
716
+ regexBody += escapeRegexLiteral(templateEn.slice(cursor, tokenMatch.index));
717
+ const key = tokenMatch[1];
718
+ placeholders.push(key);
719
+ regexBody += key === 'comment' ? '(.*)' : '(.+?)';
720
+ cursor = tokenMatch.index + tokenMatch[0].length;
721
+ }
722
+ regexBody += escapeRegexLiteral(templateEn.slice(cursor));
723
+ const match = message.match(new RegExp(`^${regexBody}$`, 's'));
724
+ if (!match)
725
+ return null;
726
+ const params = {};
727
+ placeholders.forEach((key, index) => {
728
+ params[key] = match[index + 1] ?? '';
729
+ });
730
+ return params;
731
+ }
732
+ function buildArabicChatTemplateParams(params, actors) {
733
+ const arParams = { ...params };
734
+ if (params.roleName !== undefined) {
735
+ arParams.roleName = resolveArabicChatRoleName(actors, params.roleName.trim());
736
+ }
737
+ if (params.userName !== undefined) {
738
+ arParams.userName = actors?.userName?.trim()
739
+ ? resolveBilingualName(actors.userName, actors.userArabicName)
740
+ : resolveBilingualName(params.userName.trim(), actors?.userArabicName);
741
+ }
742
+ return arParams;
743
+ }
692
744
  function resolveWorkflowContentAr(content, actors) {
693
745
  if (content == null || content.trim() === '')
694
746
  return null;
@@ -741,39 +793,20 @@ function resolveChatMessageAr(message, actors) {
741
793
  if (tpl.en === normalized)
742
794
  return tpl.ar;
743
795
  }
744
- for (const tplKey of ['request_submitted_by', 'cancellation_submitted_by']) {
745
- const submittedTpl = CHAT_TEMPLATES[tplKey];
746
- if (!submittedTpl)
747
- continue;
748
- const prefix = submittedTpl.en.split('{{userName}}')[0];
749
- if (!normalized.startsWith(prefix))
750
- continue;
751
- const afterPrefix = normalized.slice(prefix.length);
752
- const parenMatch = afterPrefix.match(/^(.+?) \((.+)\)$/);
753
- if (parenMatch) {
754
- const userEn = parenMatch[1].trim();
755
- const employeeId = parenMatch[2].trim();
756
- const userAr = actors?.userName?.trim()
757
- ? resolveBilingualName(actors.userName, actors.userArabicName)
758
- : resolveBilingualName(userEn, actors?.userArabicName);
759
- return interpolate(submittedTpl.ar, { userName: userAr, employeeId });
760
- }
761
- }
762
796
  for (const tpl of Object.values(CHAT_TEMPLATES)) {
763
- if (!tpl.en.includes('{{roleName}}'))
797
+ if (!/\{\{\w+\}\}/.test(tpl.en))
764
798
  continue;
765
- const prefix = tpl.en.split('{{roleName}}')[0];
766
- if (!normalized.startsWith(prefix))
799
+ const params = matchTemplateMessage(tpl.en, normalized);
800
+ if (!params)
767
801
  continue;
768
- const rest = normalized.slice(prefix.length);
769
- const commentIdx = rest.lastIndexOf(' - ');
770
- const roleNameEn = commentIdx >= 0 ? rest.slice(0, commentIdx) : rest;
771
- const commentSuffix = commentIdx >= 0 ? rest.slice(commentIdx) : '';
772
- const roleNameAr = resolveArabicChatRoleName(actors, roleNameEn.trim());
773
- return interpolate(tpl.ar, { roleName: roleNameAr, comment: commentSuffix });
802
+ return interpolate(tpl.ar, buildArabicChatTemplateParams(params, actors));
774
803
  }
775
804
  return null;
776
805
  }
806
+ /** True when message matches a known system chat template (safe to resolve message_ar). */
807
+ function isSystemGeneratedChatMessage(message, actors) {
808
+ return resolveChatMessageAr(message, actors) != null;
809
+ }
777
810
  /** Generic workflow log enricher — use in all module repositories. */
778
811
  function enrichWorkflowLog(log) {
779
812
  const status = log.status != null ? String(log.status) : null;
package/dist/index.d.ts CHANGED
@@ -354,6 +354,7 @@ export * from './models/MaintenanceAttachmentModel';
354
354
  export * from './models/MaintenanceChatModel';
355
355
  export * from './models/MaintenanceWorkflowModel';
356
356
  export * from './models/FollowUpReportRequestModel';
357
+ export * from './models/FollowUpReportItemModel';
357
358
  export * from './models/FollowUpReportApprovalModel';
358
359
  export * from './models/FollowUpReportAttachmentModel';
359
360
  export * from './models/FollowUpReportChatModel';
package/dist/index.js CHANGED
@@ -527,6 +527,7 @@ __exportStar(require("./models/MaintenanceAttachmentModel"), exports);
527
527
  __exportStar(require("./models/MaintenanceChatModel"), exports);
528
528
  __exportStar(require("./models/MaintenanceWorkflowModel"), exports);
529
529
  __exportStar(require("./models/FollowUpReportRequestModel"), exports);
530
+ __exportStar(require("./models/FollowUpReportItemModel"), exports);
530
531
  __exportStar(require("./models/FollowUpReportApprovalModel"), exports);
531
532
  __exportStar(require("./models/FollowUpReportAttachmentModel"), exports);
532
533
  __exportStar(require("./models/FollowUpReportChatModel"), exports);
@@ -24,18 +24,18 @@ export declare class AppealAgainstAdministrativeDecisionRequest extends BaseMode
24
24
  submission_date: Date;
25
25
  title_of_complaint: string;
26
26
  appeal_against_decision: string;
27
- description: string;
27
+ description: string | null;
28
28
  decision_number: string;
29
- decision_date: Date;
29
+ decision_date: Date | null;
30
30
  decision_subject: string;
31
- grievance_details: string;
31
+ grievance_details: string | null;
32
32
  individuals_involved: string[] | null;
33
33
  times: string[] | null;
34
34
  dates: Date | null;
35
35
  location: string | null;
36
36
  requests: string[] | null;
37
37
  events: string[] | null;
38
- grievant_name: string;
38
+ grievant_name: string | null;
39
39
  grievant_employee_number: string;
40
40
  grievant_directorate_id: number | null;
41
41
  grievant_department_id: number | null;
@@ -90,24 +90,24 @@ __decorate([
90
90
  __metadata("design:type", String)
91
91
  ], AppealAgainstAdministrativeDecisionRequest.prototype, "appeal_against_decision", void 0);
92
92
  __decorate([
93
- (0, typeorm_1.Column)({ type: "text", nullable: false }),
94
- __metadata("design:type", String)
93
+ (0, typeorm_1.Column)({ type: "text", nullable: true }),
94
+ __metadata("design:type", Object)
95
95
  ], AppealAgainstAdministrativeDecisionRequest.prototype, "description", void 0);
96
96
  __decorate([
97
97
  (0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: false }),
98
98
  __metadata("design:type", String)
99
99
  ], AppealAgainstAdministrativeDecisionRequest.prototype, "decision_number", void 0);
100
100
  __decorate([
101
- (0, typeorm_1.Column)({ type: "date", nullable: false }),
102
- __metadata("design:type", Date)
101
+ (0, typeorm_1.Column)({ type: "date", nullable: true }),
102
+ __metadata("design:type", Object)
103
103
  ], AppealAgainstAdministrativeDecisionRequest.prototype, "decision_date", void 0);
104
104
  __decorate([
105
105
  (0, typeorm_1.Column)({ type: "text", nullable: false }),
106
106
  __metadata("design:type", String)
107
107
  ], AppealAgainstAdministrativeDecisionRequest.prototype, "decision_subject", void 0);
108
108
  __decorate([
109
- (0, typeorm_1.Column)({ type: "text", nullable: false }),
110
- __metadata("design:type", String)
109
+ (0, typeorm_1.Column)({ type: "text", nullable: true }),
110
+ __metadata("design:type", Object)
111
111
  ], AppealAgainstAdministrativeDecisionRequest.prototype, "grievance_details", void 0);
112
112
  __decorate([
113
113
  (0, typeorm_1.Column)({ type: "jsonb", nullable: true }),
@@ -134,8 +134,8 @@ __decorate([
134
134
  __metadata("design:type", Object)
135
135
  ], AppealAgainstAdministrativeDecisionRequest.prototype, "events", void 0);
136
136
  __decorate([
137
- (0, typeorm_1.Column)({ type: "varchar", length: 500, nullable: false }),
138
- __metadata("design:type", String)
137
+ (0, typeorm_1.Column)({ type: "varchar", length: 500, nullable: true }),
138
+ __metadata("design:type", Object)
139
139
  ], AppealAgainstAdministrativeDecisionRequest.prototype, "grievant_name", void 0);
140
140
  __decorate([
141
141
  (0, typeorm_1.Column)({ type: "varchar", length: 100, nullable: false }),
@@ -37,5 +37,7 @@ export declare class CyberSecurityAuditRequest extends BaseModel {
37
37
  application_to_be_audited: CyberSecurityAuditApplicationType;
38
38
  application_to_be_audited_other: string | null;
39
39
  submission_date: Date;
40
+ date: Date | null;
41
+ time: string | null;
40
42
  constructor(user_id: number, request_classification: CyberSecurityAuditClassification, application_to_be_audited: CyberSecurityAuditApplicationType, submission_date: Date, status?: CyberSecurityAuditRequestStatus, service_id?: number | null, sub_service_id?: number | null, req_user_department_id?: number | null, req_user_section_id?: number | null, requesting_to_department_id?: number | null, requesting_to_section_id?: number | null, req_user_position_id?: number | null, description?: string | null, reviewer_user_id?: number | null, assigned_to_user_id?: number | null, assigned_at?: Date | null, workflow_execution_id?: string | null, request_id?: string | null, application_to_be_audited_other?: string | null);
41
43
  }
@@ -134,6 +134,14 @@ __decorate([
134
134
  (0, typeorm_1.Column)({ type: "date", nullable: false }),
135
135
  __metadata("design:type", Date)
136
136
  ], CyberSecurityAuditRequest.prototype, "submission_date", void 0);
137
+ __decorate([
138
+ (0, typeorm_1.Column)({ type: "date", nullable: true }),
139
+ __metadata("design:type", Object)
140
+ ], CyberSecurityAuditRequest.prototype, "date", void 0);
141
+ __decorate([
142
+ (0, typeorm_1.Column)({ type: "varchar", length: 8, nullable: true }),
143
+ __metadata("design:type", Object)
144
+ ], CyberSecurityAuditRequest.prototype, "time", void 0);
137
145
  exports.CyberSecurityAuditRequest = CyberSecurityAuditRequest = __decorate([
138
146
  (0, typeorm_1.Entity)({ name: "cyber_security_audit_requests" }),
139
147
  __metadata("design:paramtypes", [Number, String, String, Date, String, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object])
@@ -28,6 +28,8 @@ export declare class CyberSecurityRiskManagementRisk extends BaseModel {
28
28
  end_date: Date;
29
29
  iso_control_reference: string | null;
30
30
  risk_treatment_plan: string;
31
+ treatment: string | null;
32
+ action: string | null;
31
33
  confidentiality: number | null;
32
34
  integrity: number | null;
33
35
  availability: number | null;
@@ -98,6 +98,14 @@ __decorate([
98
98
  (0, typeorm_1.Column)({ type: "text", nullable: false }),
99
99
  __metadata("design:type", String)
100
100
  ], CyberSecurityRiskManagementRisk.prototype, "risk_treatment_plan", void 0);
101
+ __decorate([
102
+ (0, typeorm_1.Column)({ type: "text", nullable: true }),
103
+ __metadata("design:type", Object)
104
+ ], CyberSecurityRiskManagementRisk.prototype, "treatment", void 0);
105
+ __decorate([
106
+ (0, typeorm_1.Column)({ type: "text", nullable: true }),
107
+ __metadata("design:type", Object)
108
+ ], CyberSecurityRiskManagementRisk.prototype, "action", void 0);
101
109
  __decorate([
102
110
  (0, typeorm_1.Column)({ type: "integer", nullable: true }),
103
111
  __metadata("design:type", Object)
@@ -0,0 +1,16 @@
1
+ import { BaseModel } from './BaseModel';
2
+ import { FollowUpReportSubjectClassification } from './FollowUpReportRequestModel';
3
+ export declare class FollowUpReportItem extends BaseModel {
4
+ request_id: number;
5
+ service_id: number | null;
6
+ sub_service_id: number | null;
7
+ reference_type: string | null;
8
+ letter_date: Date | null;
9
+ subject: string | null;
10
+ subject_classification: FollowUpReportSubjectClassification | null;
11
+ general_manager_comment: string | null;
12
+ response_date_target: string | null;
13
+ action_status: string | null;
14
+ action_taken: string | null;
15
+ delay_period: string | null;
16
+ }