@rytass/bpm-core-shared 0.20.1 → 0.21.1

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,388 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FILTERABLE_FIELD_ISSUE_SAMPLE_LIMIT = exports.APPROVAL_INSTANCE_FIELD_FILTER_OPERATORS = exports.APPROVAL_INSTANCE_SORT_TIME_FIELDS = exports.FILTERABLE_TABLE_COLUMN_TYPES = exports.FILTERABLE_FIELD_TYPES = void 0;
4
+ exports.isApprovalInstanceSortTimeField = isApprovalInstanceSortTimeField;
5
+ exports.isFilterableFieldType = isFilterableFieldType;
6
+ exports.readFilterableValueKind = readFilterableValueKind;
7
+ exports.readFilterOperatorsForFieldType = readFilterOperatorsForFieldType;
8
+ exports.isFilterableFieldSortable = isFilterableFieldSortable;
9
+ exports.readFilterableFieldPaths = readFilterableFieldPaths;
10
+ exports.findFilterableFieldPath = findFilterableFieldPath;
11
+ exports.readFormFieldTypesByPath = readFormFieldTypesByPath;
12
+ exports.checkFilterableFieldValue = checkFilterableFieldValue;
13
+ exports.isCanonicalDate = isCanonicalDate;
14
+ exports.isCanonicalDateTime = isCanonicalDateTime;
15
+ exports.readFilterableValueProblems = readFilterableValueProblems;
16
+ exports.readFilterableFieldIssues = readFilterableFieldIssues;
17
+ exports.describeFilterableFieldIssue = describeFilterableFieldIssue;
18
+ const form_1 = require("./form");
19
+ /**
20
+ * Filtering and sorting the approval-instance list by form fields (ADR 25).
21
+ *
22
+ * Everything that decides "is this value right for a filterable field" lives
23
+ * here so the write-time check, the enable-time scan of old instances, the
24
+ * query compiler and the designer all answer the same way.
25
+ */
26
+ /** Top-level field types a form designer may mark `filterable` (ADR 25 §5.2). */
27
+ exports.FILTERABLE_FIELD_TYPES = [
28
+ 'autocomplete',
29
+ 'boolean',
30
+ 'checkbox',
31
+ 'date',
32
+ 'datetime',
33
+ 'member',
34
+ 'money',
35
+ 'number',
36
+ 'org_unit',
37
+ 'radio',
38
+ 'select',
39
+ 'text',
40
+ 'textarea',
41
+ ];
42
+ /** Table column types a form designer may mark `filterable`: every column type. */
43
+ exports.FILTERABLE_TABLE_COLUMN_TYPES = form_1.TABLE_COLUMN_FIELD_TYPES;
44
+ /**
45
+ * Sort keys that are not form fields. A filterable field must not use one of
46
+ * these as its `fieldKey`, or a sort request would be ambiguous.
47
+ */
48
+ exports.APPROVAL_INSTANCE_SORT_TIME_FIELDS = [
49
+ 'submittedAt',
50
+ 'updatedAt',
51
+ 'completedAt',
52
+ ];
53
+ function isApprovalInstanceSortTimeField(value) {
54
+ return exports.APPROVAL_INSTANCE_SORT_TIME_FIELDS.includes(value);
55
+ }
56
+ function isFilterableFieldType(type, placement = 'top-level') {
57
+ return placement === 'column'
58
+ ? exports.FILTERABLE_TABLE_COLUMN_TYPES.includes(type)
59
+ : exports.FILTERABLE_FIELD_TYPES.includes(type);
60
+ }
61
+ exports.APPROVAL_INSTANCE_FIELD_FILTER_OPERATORS = ['EQUALS', 'NOT_EQUALS', 'IN', 'RANGE', 'CONTAINS'];
62
+ function readFilterableValueKind(type) {
63
+ switch (type) {
64
+ case 'text':
65
+ case 'textarea':
66
+ return 'text';
67
+ case 'number':
68
+ case 'money':
69
+ return 'number';
70
+ case 'date':
71
+ return 'date';
72
+ case 'datetime':
73
+ return 'datetime';
74
+ case 'boolean':
75
+ return 'boolean';
76
+ case 'select':
77
+ case 'autocomplete':
78
+ case 'radio':
79
+ case 'checkbox':
80
+ return 'option';
81
+ case 'member':
82
+ return 'member';
83
+ case 'org_unit':
84
+ return 'org_unit';
85
+ default:
86
+ return null;
87
+ }
88
+ }
89
+ /** Operators a field type accepts (ADR 25 §7.2). */
90
+ function readFilterOperatorsForFieldType(type) {
91
+ if (type === 'textarea') {
92
+ return ['CONTAINS'];
93
+ }
94
+ if (type === 'boolean') {
95
+ return ['EQUALS'];
96
+ }
97
+ switch (readFilterableValueKind(type)) {
98
+ case 'text':
99
+ return ['EQUALS', 'NOT_EQUALS', 'IN', 'CONTAINS'];
100
+ case 'number':
101
+ return ['EQUALS', 'NOT_EQUALS', 'IN', 'RANGE'];
102
+ case 'date':
103
+ case 'datetime':
104
+ return ['EQUALS', 'NOT_EQUALS', 'RANGE'];
105
+ case 'option':
106
+ return ['EQUALS', 'NOT_EQUALS', 'IN', 'CONTAINS'];
107
+ case 'member':
108
+ case 'org_unit':
109
+ return ['EQUALS', 'NOT_EQUALS', 'IN'];
110
+ default:
111
+ return [];
112
+ }
113
+ }
114
+ /** A filterable top-level field can be sorted on; a table column cannot (ADR 25 §7.5). */
115
+ function isFilterableFieldSortable(path) {
116
+ return path.tableKey === null && path.field.type !== 'textarea';
117
+ }
118
+ /**
119
+ * The fields of `schema` a list query may filter on: every field (or table
120
+ * column) marked `filterable` whose type allows it. A field marked filterable
121
+ * with a type that does not allow it is skipped here; the schema lint reports
122
+ * it.
123
+ */
124
+ function readFilterableFieldPaths(schema) {
125
+ if (!schema || !Array.isArray(schema.fields)) {
126
+ return [];
127
+ }
128
+ return schema.fields.flatMap((field) => {
129
+ if ((0, form_1.isTableFieldDefinition)(field)) {
130
+ const table = field;
131
+ return table.columns
132
+ .filter((column) => column.filterable === true &&
133
+ isFilterableFieldType(column.type, 'column'))
134
+ .map((column) => toFilterableFieldPath(column, table.fieldKey, table.label));
135
+ }
136
+ return field.filterable === true && isFilterableFieldType(field.type)
137
+ ? [toFilterableFieldPath(field, null, null)]
138
+ : [];
139
+ });
140
+ }
141
+ function findFilterableFieldPath(schema, path) {
142
+ var _a;
143
+ return (_a = readFilterableFieldPaths(schema).find((item) => item.path === path)) !== null && _a !== void 0 ? _a : null;
144
+ }
145
+ /**
146
+ * Every field and column of a schema by path, filterable or not. The enable
147
+ * check compares a new filterable field against what older versions stored
148
+ * at the same path, whether or not they were filterable then.
149
+ */
150
+ function readFormFieldTypesByPath(schema) {
151
+ if (!schema || !Array.isArray(schema.fields)) {
152
+ return new Map();
153
+ }
154
+ return new Map(schema.fields.flatMap((field) => (0, form_1.isTableFieldDefinition)(field)
155
+ ? [
156
+ [field.fieldKey, field.type],
157
+ ...field.columns.map((column) => [
158
+ `${field.fieldKey}.${column.fieldKey}`,
159
+ column.type,
160
+ ]),
161
+ ]
162
+ : [[field.fieldKey, field.type]]));
163
+ }
164
+ function toFilterableFieldPath(field, tableKey, tableLabel) {
165
+ var _a;
166
+ const asField = field;
167
+ const staticOptions = (0, form_1.isFormStaticOptionFieldDefinition)(asField)
168
+ ? asField.options
169
+ : null;
170
+ return {
171
+ field,
172
+ key: field.fieldKey,
173
+ kind: (_a = readFilterableValueKind(field.type)) !== null && _a !== void 0 ? _a : 'text',
174
+ label: tableLabel
175
+ ? `${tableLabel}/${field.label || field.fieldKey}`
176
+ : field.label || field.fieldKey,
177
+ path: tableKey ? `${tableKey}.${field.fieldKey}` : field.fieldKey,
178
+ staticOptions,
179
+ tableKey,
180
+ usesOptionSnapshot: tableKey === null && (0, form_1.isFormDataSourceFieldDefinition)(asField),
181
+ };
182
+ }
183
+ /**
184
+ * The canonical stored formats (ADR 25 §6), matching what the form renderer
185
+ * writes: `formatDatePickerValue` for a date, `Date#toISOString` for a
186
+ * datetime, `Number(...)` for a number.
187
+ */
188
+ const DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/u;
189
+ const DATETIME_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/u;
190
+ const EMPTY = { status: 'empty' };
191
+ const VALID = { status: 'valid' };
192
+ function invalid(expected) {
193
+ return { expected, status: 'invalid' };
194
+ }
195
+ /**
196
+ * Whether one stored value fits a filterable field (ADR 25 §5.4, §6).
197
+ *
198
+ * - Missing and `null` are "no value". So is `""` for a number, money, date,
199
+ * datetime or boolean field (a cleared input), and `[]` for a multi-value
200
+ * field.
201
+ * - An option or member field accepts a string or an array of strings either
202
+ * way: its `mode` / `multiple` may change between versions without changing
203
+ * its type, and the query matches both shapes.
204
+ */
205
+ function checkFilterableFieldValue(field, value) {
206
+ if (value === undefined || value === null) {
207
+ return EMPTY;
208
+ }
209
+ switch (readFilterableValueKind(field.type)) {
210
+ case 'text':
211
+ return typeof value === 'string' ? VALID : invalid('文字');
212
+ case 'number':
213
+ if (value === '') {
214
+ return EMPTY;
215
+ }
216
+ return typeof value === 'number' && Number.isFinite(value)
217
+ ? VALID
218
+ : invalid('數字');
219
+ case 'date':
220
+ if (value === '') {
221
+ return EMPTY;
222
+ }
223
+ return isCanonicalDate(value) ? VALID : invalid('日期(YYYY-MM-DD)');
224
+ case 'datetime':
225
+ if (value === '') {
226
+ return EMPTY;
227
+ }
228
+ return isCanonicalDateTime(value)
229
+ ? VALID
230
+ : invalid('日期時間(ISO 8601 UTC,例如 2026-11-03T08:30:00.000Z)');
231
+ case 'boolean':
232
+ if (value === '') {
233
+ return EMPTY;
234
+ }
235
+ return typeof value === 'boolean' ? VALID : invalid('布林值(true 或 false)');
236
+ case 'option':
237
+ case 'member':
238
+ return checkStringOrStringArray(value);
239
+ case 'org_unit':
240
+ return typeof value === 'string' ? VALID : invalid('組織單位 ID(文字)');
241
+ default:
242
+ return VALID;
243
+ }
244
+ }
245
+ function checkStringOrStringArray(value) {
246
+ if (typeof value === 'string') {
247
+ return VALID;
248
+ }
249
+ if (Array.isArray(value) && value.every((item) => typeof item === 'string')) {
250
+ return value.length === 0 ? EMPTY : VALID;
251
+ }
252
+ return invalid('文字或文字清單');
253
+ }
254
+ function isCanonicalDate(value) {
255
+ if (typeof value !== 'string' || !DATE_PATTERN.test(value)) {
256
+ return false;
257
+ }
258
+ const [year, month, day] = value.split('-').map(Number);
259
+ const date = new Date(Date.UTC(year, month - 1, day));
260
+ return (date.getUTCFullYear() === year &&
261
+ date.getUTCMonth() === month - 1 &&
262
+ date.getUTCDate() === day);
263
+ }
264
+ function isCanonicalDateTime(value) {
265
+ if (typeof value !== 'string' || !DATETIME_PATTERN.test(value)) {
266
+ return false;
267
+ }
268
+ const time = Date.parse(value);
269
+ return Number.isFinite(time) && new Date(time).toISOString() === value;
270
+ }
271
+ /**
272
+ * Every value in `formData` that does not fit one of `paths`. Used both when
273
+ * writing (refuse the write) and when enabling a field (refuse to enable while
274
+ * old instances hold such values). A table that is not an array, or a row that
275
+ * is not an object, is a problem of every filterable column in it.
276
+ */
277
+ function readFilterableValueProblems(paths, formData) {
278
+ const data = formData !== null && formData !== void 0 ? formData : {};
279
+ return paths.flatMap((item) => {
280
+ if (item.tableKey === null) {
281
+ const value = ownValue(data, item.key);
282
+ const check = checkFilterableFieldValue(item.field, value);
283
+ return check.status === 'invalid'
284
+ ? [{ expected: check.expected, path: item.path, rowIndex: null, value }]
285
+ : [];
286
+ }
287
+ const tableKey = item.tableKey;
288
+ // A malformed table or row is one problem however many of its columns are
289
+ // filterable, so only the table's first filterable column reports it.
290
+ const reportsTable = paths.find((candidate) => candidate.tableKey === tableKey) === item;
291
+ const rows = ownValue(data, tableKey);
292
+ if (rows === undefined || rows === null) {
293
+ return [];
294
+ }
295
+ if (!Array.isArray(rows)) {
296
+ return reportsTable
297
+ ? [{ expected: '表格列的清單', path: tableKey, rowIndex: null, value: rows }]
298
+ : [];
299
+ }
300
+ return rows.flatMap((row, rowIndex) => {
301
+ if (typeof row !== 'object' || row === null || Array.isArray(row)) {
302
+ return reportsTable
303
+ ? [{ expected: '物件', path: tableKey, rowIndex, value: row }]
304
+ : [];
305
+ }
306
+ const value = ownValue(row, item.key);
307
+ const check = checkFilterableFieldValue(item.field, value);
308
+ return check.status === 'invalid'
309
+ ? [{ expected: check.expected, path: item.path, rowIndex, value }]
310
+ : [];
311
+ });
312
+ });
313
+ }
314
+ function ownValue(record, key) {
315
+ return Object.prototype.hasOwnProperty.call(record, key)
316
+ ? record[key]
317
+ : undefined;
318
+ }
319
+ exports.FILTERABLE_FIELD_ISSUE_SAMPLE_LIMIT = 5;
320
+ /**
321
+ * The enable check (ADR 25 §5.4), pure: given the schema about to take effect,
322
+ * the schemas of older versions that hold instances, and those instances'
323
+ * form data, report every filterable field that may not be enabled.
324
+ */
325
+ function readFilterableFieldIssues(input) {
326
+ const paths = readFilterableFieldPaths(input.schema);
327
+ const historyTypes = input.history.map((version) => ({
328
+ types: readFormFieldTypesByPath(version.schema),
329
+ versionNumber: version.versionNumber,
330
+ }));
331
+ return paths.flatMap((item) => {
332
+ const conflicts = historyTypes
333
+ .map((version) => ({
334
+ type: version.types.get(item.path),
335
+ versionNumber: version.versionNumber,
336
+ }))
337
+ .filter((version) => version.type !== undefined && version.type !== item.field.type)
338
+ .sort((left, right) => left.versionNumber - right.versionNumber);
339
+ if (conflicts.length > 0) {
340
+ return [
341
+ {
342
+ conflicts,
343
+ kind: 'TYPE_CHANGED',
344
+ label: item.label,
345
+ path: item.path,
346
+ type: item.field.type,
347
+ },
348
+ ];
349
+ }
350
+ const problems = input.instances.flatMap((instance) => readFilterableValueProblems([item], instance.formData).map((problem) => ({
351
+ expected: problem.expected,
352
+ instanceId: instance.id,
353
+ rowIndex: problem.rowIndex,
354
+ })));
355
+ if (problems.length === 0) {
356
+ return [];
357
+ }
358
+ return [
359
+ {
360
+ invalidInstanceCount: new Set(problems.map((problem) => problem.instanceId)).size,
361
+ kind: 'INVALID_VALUES',
362
+ label: item.label,
363
+ path: item.path,
364
+ samples: problems.slice(0, exports.FILTERABLE_FIELD_ISSUE_SAMPLE_LIMIT),
365
+ type: item.field.type,
366
+ },
367
+ ];
368
+ });
369
+ }
370
+ /** One line per issue, in the words the designer and the publish error use. */
371
+ function describeFilterableFieldIssue(issue) {
372
+ if (issue.kind === 'TYPE_CHANGED') {
373
+ const versions = issue.conflicts
374
+ .map((conflict) => `v${conflict.versionNumber}(${conflict.type})`)
375
+ .join('、');
376
+ return (`欄位「${issue.label}」(${issue.path})無法啟用篩選:已有案件的舊版本 ${versions} ` +
377
+ `在這個欄位存的是不同型別,現在是 ${issue.type}。請改用新的欄位 key 再勾選可篩選。`);
378
+ }
379
+ // The stored values are deliberately left out: a designer need not be able
380
+ // to read the instances, and could otherwise read any key's values by
381
+ // declaring it filterable. Instance ids and row numbers locate the problem.
382
+ const samples = issue.samples
383
+ .map((sample) => `${sample.instanceId}${sample.rowIndex === null ? '' : `(第 ${sample.rowIndex + 1} 列)`}`)
384
+ .join('、');
385
+ return (`欄位「${issue.label}」(${issue.path})無法啟用篩選:有 ${issue.invalidInstanceCount} 筆舊案件` +
386
+ `的值不符合 ${issue.type} 型別(例如 ${samples})。舊案件的值無法修改,請改用新的欄位 key 再勾選可篩選。`);
387
+ }
388
+ //# sourceMappingURL=form-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-filter.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/form-filter.ts"],"names":[],"mappings":"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"}
package/src/lib/form.d.ts CHANGED
@@ -7,6 +7,13 @@ interface BaseFormFieldDefinition<TType extends string> {
7
7
  readonly defaultValue?: FormFieldValue;
8
8
  readonly description?: string;
9
9
  readonly fieldKey: string;
10
+ /**
11
+ * 可篩選:列表查詢可依此欄位篩選(頂層欄位另可排序),見 ADR 25。勾選後此
12
+ * 欄位的 key 與型別在之後的版本不能再改,且值在每次寫入時都檢查型別
13
+ * ({@link checkFilterableFieldValue})。可用型別見
14
+ * {@link isFilterableFieldType};table 欄也可勾選。
15
+ */
16
+ readonly filterable?: boolean;
10
17
  /**
11
18
  * 只存不顯示:值照存進 `form_data`,填寫、唯讀、重送畫面都不渲染;供宿主
12
19
  * 系統放技術欄位(單據編號、版本等)。不是權限邊界 — API 回傳的 `formData`
@@ -338,4 +345,23 @@ export type FormStaticOptionFieldDefinition = (SelectFieldDefinition & {
338
345
  }) | (CheckboxFieldDefinition & {
339
346
  readonly options: readonly FormFieldOption[];
340
347
  });
348
+ /**
349
+ * Why a form data value was refused. Machine-readable: the Chinese `message`
350
+ * of an issue is for display, the reason and `path` are what a client keys on.
351
+ */
352
+ export declare const FORM_DATA_ISSUE_REASONS: readonly ["REQUIRED", "TYPE", "MIN_LENGTH", "MAX_LENGTH", "PATTERN", "PATTERN_TIMEOUT", "MIN_ROWS", "MAX_ROWS", "UNKNOWN_COLUMN", "MAX_FILES"];
353
+ export type FormDataIssueReason = (typeof FORM_DATA_ISSUE_REASONS)[number];
354
+ /**
355
+ * One refused form data value. `path` addresses it the way the form renderer
356
+ * keys its errors: a top-level field key (`note`), a table row (`items[1]`),
357
+ * or a table cell (`items[1].qty`). Rows are 0-based. `limit` is set for
358
+ * MIN_LENGTH / MAX_LENGTH / MIN_ROWS / MAX_ROWS / MAX_FILES.
359
+ */
360
+ export interface FormDataIssue {
361
+ readonly path: string;
362
+ readonly reason: FormDataIssueReason;
363
+ readonly message: string;
364
+ readonly limit?: number;
365
+ }
366
+ export declare function isFormDataIssue(value: unknown): value is FormDataIssue;
341
367
  export {};
package/src/lib/form.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TEXT_FIELD_PATTERN_ERROR_MESSAGE_MAX_LENGTH = exports.TEXT_FIELD_PATTERN_MAX_LENGTH = exports.TEXT_FIELD_PATTERN_TIME_BUDGET_MS = exports.FORM_TABLE_MAX_ROWS = exports.TABLE_COLUMN_FIELD_TYPES = exports.ATTACHMENT_NOT_BINDABLE_ERROR_CODE = exports.isFormDataSourceBindingKind = exports.FORM_DATA_SOURCE_BINDING_KINDS = void 0;
3
+ exports.FORM_DATA_ISSUE_REASONS = exports.TEXT_FIELD_PATTERN_ERROR_MESSAGE_MAX_LENGTH = exports.TEXT_FIELD_PATTERN_MAX_LENGTH = exports.TEXT_FIELD_PATTERN_TIME_BUDGET_MS = exports.FORM_TABLE_MAX_ROWS = exports.TABLE_COLUMN_FIELD_TYPES = exports.ATTACHMENT_NOT_BINDABLE_ERROR_CODE = exports.isFormDataSourceBindingKind = exports.FORM_DATA_SOURCE_BINDING_KINDS = void 0;
4
4
  exports.isFormOptionFieldDefinition = isFormOptionFieldDefinition;
5
5
  exports.isMemberFieldDefinition = isMemberFieldDefinition;
6
6
  exports.isOrgUnitFieldDefinition = isOrgUnitFieldDefinition;
@@ -21,6 +21,7 @@ exports.isFormDataSourceFieldDefinition = isFormDataSourceFieldDefinition;
21
21
  exports.isFormStaticOptionFieldDefinition = isFormStaticOptionFieldDefinition;
22
22
  exports.readFormFieldSelectionMode = readFormFieldSelectionMode;
23
23
  exports.normalizeFormDefinitionSchema = normalizeFormDefinitionSchema;
24
+ exports.isFormDataIssue = isFormDataIssue;
24
25
  /** Every `FormDataSourceBindingSource` kind this version understands. */
25
26
  exports.FORM_DATA_SOURCE_BINDING_KINDS = [
26
27
  'CONSTANT',
@@ -354,4 +355,31 @@ function normalizeTableColumnDefinition(column) {
354
355
  }
355
356
  return column;
356
357
  }
358
+ /**
359
+ * Why a form data value was refused. Machine-readable: the Chinese `message`
360
+ * of an issue is for display, the reason and `path` are what a client keys on.
361
+ */
362
+ exports.FORM_DATA_ISSUE_REASONS = [
363
+ 'REQUIRED',
364
+ 'TYPE',
365
+ 'MIN_LENGTH',
366
+ 'MAX_LENGTH',
367
+ 'PATTERN',
368
+ 'PATTERN_TIMEOUT',
369
+ 'MIN_ROWS',
370
+ 'MAX_ROWS',
371
+ 'UNKNOWN_COLUMN',
372
+ 'MAX_FILES',
373
+ ];
374
+ function isFormDataIssue(value) {
375
+ if (typeof value !== 'object' || value === null) {
376
+ return false;
377
+ }
378
+ const { path, message, reason, limit } = value;
379
+ return (typeof path === 'string' &&
380
+ typeof message === 'string' &&
381
+ typeof reason === 'string' &&
382
+ exports.FORM_DATA_ISSUE_REASONS.includes(reason) &&
383
+ (limit === undefined || typeof limit === 'number'));
384
+ }
357
385
  //# sourceMappingURL=form.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/form.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/form.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,13 @@
11
11
  */
12
12
  export type OrgUnitType = 'COMPANY' | 'DIVISION' | 'DEPARTMENT' | 'TEAM';
13
13
  export type ManagerResolutionScopeType = 'MEMBER' | 'ORG_UNIT' | 'POSITION';
14
+ /**
15
+ * IANA time zone in which BPM reads "today" against the date-only
16
+ * `effectiveFrom` / `effectiveTo` of memberships and manager resolutions when
17
+ * the host sets no `organizationTimeZone`: the product's business time zone.
18
+ * The engine (`BPMRootModule`) and the React designer share this default.
19
+ */
20
+ export declare const DEFAULT_BPM_ORGANIZATION_TIME_ZONE = "Asia/Taipei";
14
21
  export interface OrgUnit {
15
22
  readonly id: string;
16
23
  readonly parentId: string | null;
@@ -1,3 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_BPM_ORGANIZATION_TIME_ZONE = void 0;
4
+ /**
5
+ * IANA time zone in which BPM reads "today" against the date-only
6
+ * `effectiveFrom` / `effectiveTo` of memberships and manager resolutions when
7
+ * the host sets no `organizationTimeZone`: the product's business time zone.
8
+ * The engine (`BPMRootModule`) and the React designer share this default.
9
+ */
10
+ exports.DEFAULT_BPM_ORGANIZATION_TIME_ZONE = 'Asia/Taipei';
3
11
  //# sourceMappingURL=organization.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"organization.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/organization.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"organization.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/organization.ts"],"names":[],"mappings":";;;AAeA;;;;;GAKG;AACU,QAAA,kCAAkC,GAAG,aAAa,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { FormDefinitionSchema } from './form';
2
- import { ApproverResolver, DecisionPolicy, ExcludeInitiatorConfig, FieldAccessEntry, ReturnBehavior, ReturnResubmitStrategy, ServiceAction, SlaConfig, WorkflowDefinition, WorkflowEdgeConditionOperator, WorkflowNodeTriggerMode } from './workflow';
2
+ import { ApproverResolver, DecisionPolicy, ExcludeInitiatorConfig, ExcludeNodeActorsConfig, FieldAccessEntry, ReturnBehavior, ReturnResubmitStrategy, ServiceAction, SlaConfig, WorkflowDefinition, WorkflowEdgeConditionOperator, WorkflowNodeTriggerMode } from './workflow';
3
3
  import { NodePaletteType, WorkflowEdgeIdFactory } from './workflow-graph';
4
4
  /**
5
5
  * The serialisable command layer that the template designer — and the LLM
@@ -58,6 +58,14 @@ export type WorkflowCommand = {
58
58
  readonly type: 'setUserTaskReturnRequireComment';
59
59
  readonly nodeId: string;
60
60
  readonly requireComment: boolean;
61
+ } | {
62
+ /**
63
+ * Requires a comment whenever a person approves at this node. `false`
64
+ * removes the key, which is the "unchanged behaviour" default.
65
+ */
66
+ readonly type: 'setUserTaskRequireApprovalComment';
67
+ readonly nodeId: string;
68
+ readonly requireApprovalComment: boolean;
61
69
  } | {
62
70
  /** Replaces the node SLA outright; `null` removes the SLA entirely. */
63
71
  readonly type: 'setUserTaskSla';
@@ -76,6 +84,15 @@ export type WorkflowCommand = {
76
84
  readonly type: 'setUserTaskExcludeInitiator';
77
85
  readonly nodeId: string;
78
86
  readonly excludeInitiator: ExcludeInitiatorConfig | null;
87
+ } | {
88
+ /**
89
+ * Separation of duties between stages: keeps the people who approved the
90
+ * listed earlier user tasks out of this node's approvers. `null` removes
91
+ * the setting entirely.
92
+ */
93
+ readonly type: 'setUserTaskExcludeNodeActors';
94
+ readonly nodeId: string;
95
+ readonly excludeNodeActors: ExcludeNodeActorsConfig | null;
79
96
  } | {
80
97
  readonly type: 'setUserTaskOptions';
81
98
  readonly nodeId: string;