@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.
- package/dist/data-source.js +2 -0
- package/dist/i18n/workflow-chat-i18n.json +45 -41
- package/dist/i18n/workflow-chat-message.builder.d.ts +9 -0
- package/dist/i18n/workflow-chat-message.builder.js +60 -27
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/models/AppealAgainstAdministrativeDecisionRequestModel.d.ts +4 -4
- package/dist/models/AppealAgainstAdministrativeDecisionRequestModel.js +8 -8
- package/dist/models/CyberSecurityAuditRequestModel.d.ts +2 -0
- package/dist/models/CyberSecurityAuditRequestModel.js +8 -0
- package/dist/models/CyberSecurityRiskManagementRiskModel.d.ts +2 -0
- package/dist/models/CyberSecurityRiskManagementRiskModel.js +8 -0
- package/dist/models/FollowUpReportItemModel.d.ts +16 -0
- package/dist/models/FollowUpReportItemModel.js +74 -0
- package/dist/models/FollowUpReportRequestModel.d.ts +5 -0
- package/dist/models/FollowUpReportRequestModel.js +20 -0
- package/dist/models/MaintenanceRequestModel.d.ts +3 -1
- package/dist/models/MaintenanceRequestModel.js +2 -0
- package/dist/models/RequestATenderRequestModel.d.ts +2 -0
- package/dist/models/RequestATenderRequestModel.js +8 -0
- package/dist/models/ResidentialUnitRentalRequestModel.d.ts +1 -1
- package/dist/models/ResidentialUnitRentalRequestModel.js +2 -2
- package/package.json +1 -1
- package/sql/add_all_workflow_chat_arabic_columns.sql +1 -1
- package/sql/caa_api_payload_changes_2026_07.sql +32 -0
- package/src/data-source.ts +2 -0
- package/src/i18n/workflow-chat-i18n.json +45 -41
- package/src/i18n/workflow-chat-message.builder.ts +77 -26
- package/src/index.ts +1 -0
- package/src/models/AccessCardChatModel.ts +6 -6
- package/src/models/AccessCardWorkflowModel.ts +6 -6
- package/src/models/AccommodationChatModel.ts +6 -6
- package/src/models/AccommodationWorkflowModel.ts +6 -6
- package/src/models/AirportEntryPermitChatModel.ts +6 -6
- package/src/models/AirportEntryPermitWorkflowModel.ts +6 -6
- package/src/models/AnnualTrainingPlanChatModel.ts +6 -6
- package/src/models/AnnualTrainingPlanWorkflowModel.ts +6 -6
- package/src/models/AppealAgainstAdministrativeDecisionRequestModel.ts +8 -8
- package/src/models/AssignTasksEmpChatModel.ts +6 -6
- package/src/models/AssignTasksEmpWorkflowModel.ts +6 -6
- package/src/models/ComplaintLostPropertyReportChatModel.ts +6 -6
- package/src/models/ComplaintLostPropertyReportWorkflowModel.ts +6 -6
- package/src/models/CyberSecurityAuditRequestModel.ts +6 -0
- package/src/models/CyberSecurityRiskManagementRiskModel.ts +6 -0
- package/src/models/DutyMissionChatModel.ts +6 -6
- package/src/models/DutyMissionWorkflowModel.ts +6 -6
- package/src/models/EventSupportChatModel.ts +6 -6
- package/src/models/EventSupportWorkflowModel.ts +6 -6
- package/src/models/FollowUpReportChatModel.ts +6 -6
- package/src/models/FollowUpReportItemModel.ts +47 -0
- package/src/models/FollowUpReportRequestModel.ts +15 -0
- package/src/models/FollowUpReportWorkflowModel.ts +6 -6
- package/src/models/FoodChatModel.ts +6 -6
- package/src/models/FoodWorkflowModel.ts +6 -6
- package/src/models/HallChatModel.ts +6 -6
- package/src/models/HallWorkflowModel.ts +6 -6
- package/src/models/HotelChatModel.ts +6 -6
- package/src/models/HotelWorkFlowModel.ts +6 -6
- package/src/models/HousingContractCancelChatModel.ts +6 -6
- package/src/models/HousingContractCancelWorkflowModel.ts +6 -6
- package/src/models/HousingContractRenewalChatModel.ts +6 -6
- package/src/models/HousingContractRenewalWorkflowModel.ts +6 -6
- package/src/models/HrServiceChatModel.ts +6 -6
- package/src/models/HrServiceWorkflowModel.ts +6 -6
- package/src/models/ITRequestChatModel.ts +6 -6
- package/src/models/ImportExportMaterialChatModel.ts +6 -6
- package/src/models/ImportExportMaterialWorkflowModel.ts +6 -6
- package/src/models/InformationSecurityChatModel.ts +6 -6
- package/src/models/InformationSecurityWorkflowModel.ts +6 -6
- package/src/models/ItWorkflowModel.ts +6 -6
- package/src/models/LegalComplaintChatModel.ts +6 -6
- package/src/models/LegalComplaintWorkflowModel.ts +6 -6
- package/src/models/LegalConsultationChatModel.ts +6 -6
- package/src/models/LegalConsultationWorkflowModel.ts +6 -6
- package/src/models/LegalContractReviewChatModel.ts +6 -6
- package/src/models/LegalContractReviewWorkflowModel.ts +6 -6
- package/src/models/LogisticsChatModel.ts +6 -6
- package/src/models/LogisticsVehicleMaintenanceChatModel.ts +6 -6
- package/src/models/LogisticsVehicleMaintenanceWorkflowModel.ts +6 -6
- package/src/models/LogisticsWorkflowModel.ts +6 -6
- package/src/models/MaintenanceChatModel.ts +6 -6
- package/src/models/MaintenanceExternalStationsChatModel.ts +6 -6
- package/src/models/MaintenanceExternalStationsWorkflowModel.ts +6 -6
- package/src/models/MaintenanceRequestModel.ts +2 -0
- package/src/models/MaintenanceWorkflowModel.ts +6 -6
- package/src/models/MediaPublicationsChatModel.ts +6 -6
- package/src/models/MediaPublicationsWorkflowModel.ts +6 -6
- package/src/models/MultiPurposeHallChatModel.ts +6 -6
- package/src/models/MultiPurposeHallWorkflowModel.ts +6 -6
- package/src/models/RequestATenderRequestModel.ts +6 -0
- package/src/models/RequestForCoverageChatModel.ts +6 -6
- package/src/models/RequestForCoverageWorkflowModel.ts +6 -6
- package/src/models/RequestForPresidentsCoverageChatModel.ts +6 -6
- package/src/models/RequestForPresidentsCoverageWorkflowModel.ts +6 -6
- package/src/models/ResidentialUnitRentalChatModel.ts +6 -6
- package/src/models/ResidentialUnitRentalRequestModel.ts +2 -2
- package/src/models/ResidentialUnitRentalWorkflowModel.ts +6 -6
- package/src/models/RespondToEnquiriesChatModel.ts +6 -6
- package/src/models/RespondToEnquiriesWorkflowModel.ts +6 -6
- package/src/models/ScholarshipChatModel.ts +6 -6
- package/src/models/ScholarshipWorkflowModel.ts +6 -6
- package/src/models/SecurityAwarenessChatModel.ts +6 -6
- package/src/models/SecurityAwarenessWorkflowModel.ts +6 -6
- package/src/models/SecurityThreatChatModel.ts +6 -6
- package/src/models/SecurityThreatWorkflowModel.ts +6 -6
- package/src/models/ServiceExtensionAfter60ChatModel.ts +6 -6
- package/src/models/ServiceExtensionAfter60WorkflowModel.ts +6 -6
- package/src/models/StudyLeaveChatModel.ts +6 -6
- package/src/models/StudyLeaveWorkflowModel.ts +6 -6
- package/src/models/TrainingChatModel.ts +6 -6
- package/src/models/TrainingRoomBookingChatModel.ts +6 -6
- package/src/models/TrainingRoomBookingWorkflowModel.ts +6 -6
- package/src/models/TrainingWorkflowModel.ts +6 -6
- package/src/models/VipHallChatModel.ts +6 -6
- package/src/models/VipHallWorkflowModel.ts +6 -6
- package/src/models/VpnRequestChatModel.ts +6 -6
- package/src/models/VpnWorkflowModel.ts +6 -6
- package/src/models/WorkingHoursExtensionChatModel.ts +6 -6
- package/src/models/WorkingHoursExtensionWorkflowModel.ts +6 -6
package/dist/data-source.js
CHANGED
|
@@ -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": "
|
|
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": "
|
|
49
|
+
"ar": "تمت إعادة الطلب للتعديل من قبل {{name}}{{comment}}"
|
|
50
50
|
},
|
|
51
51
|
"request_returned_for_modification": {
|
|
52
52
|
"en": "Request Returned for Modification{{comment}}",
|
|
53
|
-
"ar": "
|
|
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": "
|
|
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": "تم تعيين فني
|
|
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": "
|
|
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": "
|
|
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": "
|
|
81
|
+
"ar": "{{approverRoleName}} {{level}} إعادة التعيين{{comment}}{{modifiers}}"
|
|
82
82
|
},
|
|
83
83
|
"it_helpdesk_wf_closed_request": {
|
|
84
84
|
"en": "{{approverRoleName}} closed request{{comment}}",
|
|
85
|
-
"ar": "
|
|
85
|
+
"ar": "تم إغلاق الطلب من قبل {{approverRoleName}}{{comment}}"
|
|
86
86
|
},
|
|
87
87
|
"it_helpdesk_wf_closed_request_cap": {
|
|
88
88
|
"en": "{{approverRoleName}} Closed request{{comment}}",
|
|
89
|
-
"ar": "
|
|
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": "
|
|
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": "
|
|
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": "تمت الموافقة
|
|
101
|
+
"ar": "تمت الموافقة من قبل {{approverRoleName}} للمستوى {{level}}{{comment}}"
|
|
102
102
|
},
|
|
103
103
|
"it_helpdesk_wf_rejected": {
|
|
104
104
|
"en": "{{approverRoleName}} rejected the request{{comment}}",
|
|
105
|
-
"ar": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "تم تقديم الطلب
|
|
131
|
+
"ar": "تم تقديم الطلب من قبل {{userName}} ({{employeeId}})"
|
|
132
132
|
},
|
|
133
133
|
"cancellation_submitted_by": {
|
|
134
134
|
"en": "Cancellation request submitted by {{userName}} ({{employeeId}})",
|
|
135
|
-
"ar": "تم تقديم طلب الإلغاء
|
|
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": "
|
|
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": "
|
|
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": "طلب
|
|
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": "تم طلب
|
|
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": "تم تحديث حالة المهمة إلى \"قيد التنفيذ\"
|
|
195
|
+
"ar": "تم تحديث حالة المهمة إلى \"قيد التنفيذ\" من قبل: {{roleName}}"
|
|
192
196
|
},
|
|
193
197
|
"task_completed_by_role": {
|
|
194
198
|
"en": "Task Completed by: {{roleName}}{{comment}}",
|
|
195
|
-
"ar": "
|
|
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": "تم تعيين فني
|
|
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": "
|
|
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": "
|
|
219
|
+
"ar": "{{approverRoleName}} تمت إعادة تعيين الطلب إلى المستوى الثالث (L3){{comment}}"
|
|
216
220
|
},
|
|
217
221
|
"it_helpdesk_reassigned_generic": {
|
|
218
222
|
"en": "{{approverRoleName}} {{level}} reassigned the request{{comment}}",
|
|
219
|
-
"ar": "
|
|
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}}
|
|
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}} بتحديث تاريخ
|
|
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": "تم إغلاق طلب
|
|
245
|
+
"ar": "تم إغلاق طلب تقنية المعلومات رقم {{requestId}}"
|
|
242
246
|
},
|
|
243
247
|
"it_helpdesk_notif_request_rejected": {
|
|
244
248
|
"en": "IT request #{{requestId}} has been rejected",
|
|
245
|
-
"ar": "تم رفض طلب
|
|
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 (
|
|
797
|
+
if (!/\{\{\w+\}\}/.test(tpl.en))
|
|
764
798
|
continue;
|
|
765
|
-
const
|
|
766
|
-
if (!
|
|
799
|
+
const params = matchTemplateMessage(tpl.en, normalized);
|
|
800
|
+
if (!params)
|
|
767
801
|
continue;
|
|
768
|
-
|
|
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:
|
|
94
|
-
__metadata("design:type",
|
|
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:
|
|
102
|
-
__metadata("design:type",
|
|
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:
|
|
110
|
-
__metadata("design:type",
|
|
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:
|
|
138
|
-
__metadata("design:type",
|
|
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
|
+
}
|