@platform-modules/civil-aviation-authority 2.3.298 → 2.3.299

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.
@@ -58,6 +58,15 @@ export declare function renderSynchronizedWorkflowMessage(templateKey: string, e
58
58
  export declare function renderSynchronizedChatMessage(templateKey: string, enParams: Record<string, string>, arParams: Record<string, string>): BilingualText;
59
59
  export declare function buildBilingualFromTemplate(templateCatalog: Record<string, BilingualText>, key: string, params?: Record<string, string>, arParams?: Record<string, string>): BilingualText;
60
60
  export declare function workflowTemplate(key: string, params?: Record<string, string>, arParams?: Record<string, string>): BilingualText;
61
+ /** Create/submit step for assign-tasks-emp workflow logs. */
62
+ export declare function buildAssignTasksEmpAssignedWorkflowFields(): BilingualText;
63
+ /** Approval step — pending from assigned employee. */
64
+ export declare function buildAssignTasksEmpPendingFromWorkflowFields(params: {
65
+ userName: string;
66
+ userArabicName?: string | null;
67
+ }): BilingualText;
68
+ /** Approval step fallback when assignee name is unavailable. */
69
+ export declare function buildAssignTasksEmpPendingWorkflowFields(): BilingualText;
61
70
  export declare function chatTemplate(key: string, params?: Record<string, string>, arParams?: Record<string, string>): BilingualText;
62
71
  /**
63
72
  * Standard entry point for workflow `content` + `content_ar`.
@@ -17,6 +17,9 @@ exports.renderSynchronizedWorkflowMessage = renderSynchronizedWorkflowMessage;
17
17
  exports.renderSynchronizedChatMessage = renderSynchronizedChatMessage;
18
18
  exports.buildBilingualFromTemplate = buildBilingualFromTemplate;
19
19
  exports.workflowTemplate = workflowTemplate;
20
+ exports.buildAssignTasksEmpAssignedWorkflowFields = buildAssignTasksEmpAssignedWorkflowFields;
21
+ exports.buildAssignTasksEmpPendingFromWorkflowFields = buildAssignTasksEmpPendingFromWorkflowFields;
22
+ exports.buildAssignTasksEmpPendingWorkflowFields = buildAssignTasksEmpPendingWorkflowFields;
20
23
  exports.chatTemplate = chatTemplate;
21
24
  exports.buildSynchronizedWorkflowMessage = buildSynchronizedWorkflowMessage;
22
25
  exports.buildSynchronizedChatMessage = buildSynchronizedChatMessage;
@@ -154,6 +157,45 @@ function buildBilingualFromTemplate(templateCatalog, key, params = {}, arParams)
154
157
  function workflowTemplate(key, params = {}, arParams) {
155
158
  return buildBilingualFromTemplate(WORKFLOW_TEMPLATES, key, params, arParams);
156
159
  }
160
+ /** Assign-tasks-emp workflow templates (catalog + runtime fallback when dist JSON is stale). */
161
+ const ASSIGN_TASKS_EMP_WF_FALLBACKS = {
162
+ request_assigned: { en: 'Request Assigned', ar: 'تم تعيين الطلب' },
163
+ request_pending_from: { en: 'Request Pending from {{name}}', ar: 'الطلب قيد الانتظار من {{name}}' },
164
+ request_pending: { en: 'Request Pending', ar: 'الطلب قيد الانتظار' },
165
+ };
166
+ function resolveAssignTasksEmpWorkflowTemplate(key, enParams = {}, arParams) {
167
+ const tpl = WORKFLOW_TEMPLATES[key] ?? ASSIGN_TASKS_EMP_WF_FALLBACKS[key];
168
+ const arabicParams = arParams ?? enParams;
169
+ return {
170
+ en: interpolate(tpl.en, enParams),
171
+ ar: interpolate(tpl.ar, arabicParams),
172
+ };
173
+ }
174
+ /** Create/submit step for assign-tasks-emp workflow logs. */
175
+ function buildAssignTasksEmpAssignedWorkflowFields() {
176
+ return resolveAssignTasksEmpWorkflowTemplate('request_assigned');
177
+ }
178
+ /** Approval step — pending from assigned employee. */
179
+ function buildAssignTasksEmpPendingFromWorkflowFields(params) {
180
+ const nameEn = params.userName.trim() || 'Unknown User';
181
+ const nameAr = resolveBilingualName(nameEn, params.userArabicName);
182
+ return resolveAssignTasksEmpWorkflowTemplate('request_pending_from', { name: nameEn }, { name: nameAr });
183
+ }
184
+ /** Approval step fallback when assignee name is unavailable. */
185
+ function buildAssignTasksEmpPendingWorkflowFields() {
186
+ return resolveAssignTasksEmpWorkflowTemplate('request_pending');
187
+ }
188
+ function resolveStoredAssignTasksEmpTemplateKey(content, actors) {
189
+ const normalized = content?.trim();
190
+ if (!normalized || !(normalized in ASSIGN_TASKS_EMP_WF_FALLBACKS))
191
+ return null;
192
+ if (normalized === 'request_pending_from') {
193
+ const nameEn = actors?.userName?.trim() || 'Unknown User';
194
+ const nameAr = resolveArabicWorkflowActorName(actors, nameEn);
195
+ return resolveAssignTasksEmpWorkflowTemplate('request_pending_from', { name: nameEn }, { name: nameAr });
196
+ }
197
+ return resolveAssignTasksEmpWorkflowTemplate(normalized);
198
+ }
157
199
  function chatTemplate(key, params = {}, arParams) {
158
200
  return buildBilingualFromTemplate(CHAT_TEMPLATES, key, params, arParams);
159
201
  }
@@ -1144,6 +1186,9 @@ function resolveWorkflowContentAr(content, actors) {
1144
1186
  if (content == null || content.trim() === '')
1145
1187
  return null;
1146
1188
  const normalized = content.trim();
1189
+ const assignTasksEmpFromKey = resolveStoredAssignTasksEmpTemplateKey(normalized, actors);
1190
+ if (assignTasksEmpFromKey)
1191
+ return assignTasksEmpFromKey.ar;
1147
1192
  const embeddedAssignment = tryParseRequestAssignedComment(normalized);
1148
1193
  if (embeddedAssignment) {
1149
1194
  return buildAssignmentWorkflowFieldsFromActors(embeddedAssignment, actors).ar;
@@ -1269,9 +1314,11 @@ function isSystemGeneratedChatMessage(message, actors) {
1269
1314
  /** Generic workflow log enricher — use in all module repositories. */
1270
1315
  function enrichWorkflowLog(log) {
1271
1316
  const status = log.status != null ? String(log.status) : null;
1272
- const content = log.content != null ? String(log.content) : null;
1317
+ const rawContent = log.content != null ? String(log.content) : null;
1273
1318
  const actors = extractBilingualActorsFromRecord(log);
1274
- const resolvedAr = resolveWorkflowContentAr(content, actors);
1319
+ const assignTasksEmpResolved = resolveStoredAssignTasksEmpTemplateKey(rawContent, actors);
1320
+ const content = assignTasksEmpResolved?.en ?? rawContent;
1321
+ const resolvedAr = assignTasksEmpResolved?.ar ?? resolveWorkflowContentAr(content, actors);
1275
1322
  const existingAr = log.content_ar != null && String(log.content_ar).trim() !== ''
1276
1323
  ? String(log.content_ar)
1277
1324
  : null;
@@ -1341,8 +1388,12 @@ function enrichWorkflowLog(log) {
1341
1388
  if (notificationAr)
1342
1389
  content_ar = notificationAr;
1343
1390
  }
1391
+ if (assignTasksEmpResolved) {
1392
+ content_ar = assignTasksEmpResolved.ar;
1393
+ }
1344
1394
  return {
1345
1395
  ...log,
1396
+ ...(content !== rawContent ? { content } : {}),
1346
1397
  content_ar,
1347
1398
  status_ar: log.status_ar ?? resolveWorkflowStatusAr(status),
1348
1399
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platform-modules/civil-aviation-authority",
3
- "version": "2.3.298",
3
+ "version": "2.3.299",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
@@ -199,6 +199,70 @@ export function workflowTemplate(
199
199
  return buildBilingualFromTemplate(WORKFLOW_TEMPLATES, key, params, arParams);
200
200
  }
201
201
 
202
+ /** Assign-tasks-emp workflow templates (catalog + runtime fallback when dist JSON is stale). */
203
+ const ASSIGN_TASKS_EMP_WF_FALLBACKS = {
204
+ request_assigned: { en: 'Request Assigned', ar: 'تم تعيين الطلب' },
205
+ request_pending_from: { en: 'Request Pending from {{name}}', ar: 'الطلب قيد الانتظار من {{name}}' },
206
+ request_pending: { en: 'Request Pending', ar: 'الطلب قيد الانتظار' },
207
+ } as const;
208
+
209
+ type AssignTasksEmpWorkflowTemplateKey = keyof typeof ASSIGN_TASKS_EMP_WF_FALLBACKS;
210
+
211
+ function resolveAssignTasksEmpWorkflowTemplate(
212
+ key: AssignTasksEmpWorkflowTemplateKey,
213
+ enParams: Record<string, string> = {},
214
+ arParams?: Record<string, string>,
215
+ ): BilingualText {
216
+ const tpl = WORKFLOW_TEMPLATES[key] ?? ASSIGN_TASKS_EMP_WF_FALLBACKS[key];
217
+ const arabicParams = arParams ?? enParams;
218
+ return {
219
+ en: interpolate(tpl.en, enParams),
220
+ ar: interpolate(tpl.ar, arabicParams),
221
+ };
222
+ }
223
+
224
+ /** Create/submit step for assign-tasks-emp workflow logs. */
225
+ export function buildAssignTasksEmpAssignedWorkflowFields(): BilingualText {
226
+ return resolveAssignTasksEmpWorkflowTemplate('request_assigned');
227
+ }
228
+
229
+ /** Approval step — pending from assigned employee. */
230
+ export function buildAssignTasksEmpPendingFromWorkflowFields(params: {
231
+ userName: string;
232
+ userArabicName?: string | null;
233
+ }): BilingualText {
234
+ const nameEn = params.userName.trim() || 'Unknown User';
235
+ const nameAr = resolveBilingualName(nameEn, params.userArabicName);
236
+ return resolveAssignTasksEmpWorkflowTemplate(
237
+ 'request_pending_from',
238
+ { name: nameEn },
239
+ { name: nameAr },
240
+ );
241
+ }
242
+
243
+ /** Approval step fallback when assignee name is unavailable. */
244
+ export function buildAssignTasksEmpPendingWorkflowFields(): BilingualText {
245
+ return resolveAssignTasksEmpWorkflowTemplate('request_pending');
246
+ }
247
+
248
+ function resolveStoredAssignTasksEmpTemplateKey(
249
+ content: string | null | undefined,
250
+ actors?: BilingualActorNames,
251
+ ): BilingualText | null {
252
+ const normalized = content?.trim();
253
+ if (!normalized || !(normalized in ASSIGN_TASKS_EMP_WF_FALLBACKS)) return null;
254
+ if (normalized === 'request_pending_from') {
255
+ const nameEn = actors?.userName?.trim() || 'Unknown User';
256
+ const nameAr = resolveArabicWorkflowActorName(actors, nameEn);
257
+ return resolveAssignTasksEmpWorkflowTemplate(
258
+ 'request_pending_from',
259
+ { name: nameEn },
260
+ { name: nameAr },
261
+ );
262
+ }
263
+ return resolveAssignTasksEmpWorkflowTemplate(normalized as AssignTasksEmpWorkflowTemplateKey);
264
+ }
265
+
202
266
  export function chatTemplate(
203
267
  key: string,
204
268
  params: Record<string, string> = {},
@@ -1746,6 +1810,9 @@ export function resolveWorkflowContentAr(
1746
1810
  if (content == null || content.trim() === '') return null;
1747
1811
  const normalized = content.trim();
1748
1812
 
1813
+ const assignTasksEmpFromKey = resolveStoredAssignTasksEmpTemplateKey(normalized, actors);
1814
+ if (assignTasksEmpFromKey) return assignTasksEmpFromKey.ar;
1815
+
1749
1816
  const embeddedAssignment = tryParseRequestAssignedComment(normalized);
1750
1817
  if (embeddedAssignment) {
1751
1818
  return buildAssignmentWorkflowFieldsFromActors(embeddedAssignment, actors).ar;
@@ -1885,9 +1952,11 @@ export function isSystemGeneratedChatMessage(
1885
1952
  /** Generic workflow log enricher — use in all module repositories. */
1886
1953
  export function enrichWorkflowLog(log: Record<string, unknown>): Record<string, unknown> {
1887
1954
  const status = log.status != null ? String(log.status) : null;
1888
- const content = log.content != null ? String(log.content) : null;
1955
+ const rawContent = log.content != null ? String(log.content) : null;
1889
1956
  const actors = extractBilingualActorsFromRecord(log);
1890
- const resolvedAr = resolveWorkflowContentAr(content, actors);
1957
+ const assignTasksEmpResolved = resolveStoredAssignTasksEmpTemplateKey(rawContent, actors);
1958
+ const content = assignTasksEmpResolved?.en ?? rawContent;
1959
+ const resolvedAr = assignTasksEmpResolved?.ar ?? resolveWorkflowContentAr(content, actors);
1891
1960
  const existingAr =
1892
1961
  log.content_ar != null && String(log.content_ar).trim() !== ''
1893
1962
  ? String(log.content_ar)
@@ -1970,8 +2039,12 @@ export function enrichWorkflowLog(log: Record<string, unknown>): Record<string,
1970
2039
  const notificationAr = resolveWorkflowContentAr(content, actors);
1971
2040
  if (notificationAr) content_ar = notificationAr;
1972
2041
  }
2042
+ if (assignTasksEmpResolved) {
2043
+ content_ar = assignTasksEmpResolved.ar;
2044
+ }
1973
2045
  return {
1974
2046
  ...log,
2047
+ ...(content !== rawContent ? { content } : {}),
1975
2048
  content_ar,
1976
2049
  status_ar: log.status_ar ?? resolveWorkflowStatusAr(status),
1977
2050
  };