@objectstack/plugin-approvals 17.0.0-rc.0 → 17.0.0-rc.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.
- package/CHANGELOG.md +439 -0
- package/dist/index.d.mts +2304 -3491
- package/dist/index.d.ts +2304 -3491
- package/dist/index.js +116 -43
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +114 -41
- package/dist/index.mjs.map +1 -1
- package/package.json +16 -9
- package/.turbo/turbo-build.log +0 -22
- package/scripts/i18n-extract.config.ts +0 -38
- package/src/action-link-pages.ts +0 -102
- package/src/approval-actor-impersonation.test.ts +0 -330
- package/src/approval-node.test.ts +0 -356
- package/src/approval-node.ts +0 -196
- package/src/approval-revise.test.ts +0 -418
- package/src/approval-service.test.ts +0 -2858
- package/src/approval-service.ts +0 -3617
- package/src/approvals-plugin.ts +0 -294
- package/src/approver-cross-org.integration.test.ts +0 -206
- package/src/approver-org-scope.test.ts +0 -201
- package/src/approver-org-scope.ts +0 -261
- package/src/index.ts +0 -42
- package/src/lifecycle-hooks.ts +0 -201
- package/src/nav-contribution.test.ts +0 -50
- package/src/record-lock-schedule-run.integration.test.ts +0 -206
- package/src/status-mirror-cascade.integration.test.ts +0 -224
- package/src/sys-approval-action.object.ts +0 -149
- package/src/sys-approval-approver.object.ts +0 -85
- package/src/sys-approval-delegation.object.test.ts +0 -42
- package/src/sys-approval-delegation.object.ts +0 -142
- package/src/sys-approval-request.object.test.ts +0 -116
- package/src/sys-approval-request.object.ts +0 -413
- package/src/sys-approval-token.object.ts +0 -101
- package/src/translations/bundle-ownership.test.ts +0 -48
- package/src/translations/en.objects.generated.ts +0 -311
- package/src/translations/es-ES.objects.generated.ts +0 -311
- package/src/translations/index.ts +0 -23
- package/src/translations/ja-JP.objects.generated.ts +0 -311
- package/src/translations/zh-CN.objects.generated.ts +0 -311
- package/tsconfig.json +0 -10
|
@@ -1,311 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Auto-generated by 'os i18n extract' for locale 'en'.
|
|
5
|
-
* Edit translations in place; re-run extract (with --merge) to fill new gaps.
|
|
6
|
-
* Do not hand-edit the structure — only the leaf string values.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { TranslationData } from '@objectstack/spec/system';
|
|
10
|
-
|
|
11
|
-
export const enObjects: NonNullable<TranslationData['objects']> = {
|
|
12
|
-
sys_approval_request: {
|
|
13
|
-
label: "Approval Request",
|
|
14
|
-
pluralLabel: "Approval Requests",
|
|
15
|
-
description: "Live approval instance tracked per submission",
|
|
16
|
-
fields: {
|
|
17
|
-
id: {
|
|
18
|
-
label: "Request ID"
|
|
19
|
-
},
|
|
20
|
-
organization_id: {
|
|
21
|
-
label: "Organization",
|
|
22
|
-
help: "Tenant that owns this approval request (propagated from submitter context)"
|
|
23
|
-
},
|
|
24
|
-
process_name: {
|
|
25
|
-
label: "Source",
|
|
26
|
-
help: "Origin of the request — `flow:<flowName|nodeId>` for node-driven approvals"
|
|
27
|
-
},
|
|
28
|
-
object_name: {
|
|
29
|
-
label: "Object"
|
|
30
|
-
},
|
|
31
|
-
record_id: {
|
|
32
|
-
label: "Record ID"
|
|
33
|
-
},
|
|
34
|
-
submitter_id: {
|
|
35
|
-
label: "Submitter"
|
|
36
|
-
},
|
|
37
|
-
submitter_comment: {
|
|
38
|
-
label: "Submitter Comment"
|
|
39
|
-
},
|
|
40
|
-
status: {
|
|
41
|
-
label: "Status",
|
|
42
|
-
help: "Lifecycle state of the request",
|
|
43
|
-
options: {
|
|
44
|
-
pending: "pending",
|
|
45
|
-
approved: "approved",
|
|
46
|
-
rejected: "rejected",
|
|
47
|
-
recalled: "recalled",
|
|
48
|
-
returned: "returned"
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
current_step: {
|
|
52
|
-
label: "Current Step",
|
|
53
|
-
help: "Machine name of the step awaiting approval"
|
|
54
|
-
},
|
|
55
|
-
current_step_index: {
|
|
56
|
-
label: "Current Step Index"
|
|
57
|
-
},
|
|
58
|
-
pending_approvers: {
|
|
59
|
-
label: "Pending Approvers",
|
|
60
|
-
help: "Comma-separated user ids who can act on the current step"
|
|
61
|
-
},
|
|
62
|
-
payload_json: {
|
|
63
|
-
label: "Snapshot",
|
|
64
|
-
help: "Record snapshot at submission time"
|
|
65
|
-
},
|
|
66
|
-
flow_run_id: {
|
|
67
|
-
label: "Flow Run",
|
|
68
|
-
help: "Suspended automation run id this request gates (ADR-0019). The decision resumes it."
|
|
69
|
-
},
|
|
70
|
-
flow_node_id: {
|
|
71
|
-
label: "Flow Node",
|
|
72
|
-
help: "Approval node id within the flow that opened this request (ADR-0019)."
|
|
73
|
-
},
|
|
74
|
-
node_config_json: {
|
|
75
|
-
label: "Node Config",
|
|
76
|
-
help: "Snapshot of the Approval node config (approvers/behavior) for node-driven requests (ADR-0019)."
|
|
77
|
-
},
|
|
78
|
-
completed_at: {
|
|
79
|
-
label: "Completed At"
|
|
80
|
-
},
|
|
81
|
-
created_at: {
|
|
82
|
-
label: "Created At"
|
|
83
|
-
},
|
|
84
|
-
updated_at: {
|
|
85
|
-
label: "Updated At"
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
_views: {
|
|
89
|
-
my_pending: {
|
|
90
|
-
label: "My Pending",
|
|
91
|
-
emptyState: {
|
|
92
|
-
title: "No pending approvals",
|
|
93
|
-
message: "You're all caught up."
|
|
94
|
-
}
|
|
95
|
-
},
|
|
96
|
-
submitted_by_me: {
|
|
97
|
-
label: "I Submitted"
|
|
98
|
-
},
|
|
99
|
-
completed: {
|
|
100
|
-
label: "Completed"
|
|
101
|
-
},
|
|
102
|
-
all_requests: {
|
|
103
|
-
label: "All"
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
_actions: {
|
|
107
|
-
approval_approve: {
|
|
108
|
-
label: "Approve",
|
|
109
|
-
successMessage: "Approved.",
|
|
110
|
-
params: {
|
|
111
|
-
comment: {
|
|
112
|
-
label: "Comment"
|
|
113
|
-
},
|
|
114
|
-
attachments: {
|
|
115
|
-
label: "Attachments"
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
approval_reject: {
|
|
120
|
-
label: "Reject",
|
|
121
|
-
confirmText: "Reject this request? A rejection is final for every approver.",
|
|
122
|
-
successMessage: "Rejected.",
|
|
123
|
-
params: {
|
|
124
|
-
comment: {
|
|
125
|
-
label: "Comment"
|
|
126
|
-
},
|
|
127
|
-
attachments: {
|
|
128
|
-
label: "Attachments"
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
approval_reassign: {
|
|
133
|
-
label: "Reassign",
|
|
134
|
-
successMessage: "Reassigned.",
|
|
135
|
-
params: {
|
|
136
|
-
to: {
|
|
137
|
-
label: "New approver",
|
|
138
|
-
helpText: "User to hand this step to"
|
|
139
|
-
},
|
|
140
|
-
comment: {
|
|
141
|
-
label: "Comment"
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
approval_send_back: {
|
|
146
|
-
label: "Send back",
|
|
147
|
-
successMessage: "Sent back for revision.",
|
|
148
|
-
params: {
|
|
149
|
-
comment: {
|
|
150
|
-
label: "Reason"
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
approval_request_info: {
|
|
155
|
-
label: "Request info",
|
|
156
|
-
successMessage: "Information requested.",
|
|
157
|
-
params: {
|
|
158
|
-
comment: {
|
|
159
|
-
label: "What do you need?"
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
approval_remind: {
|
|
164
|
-
label: "Send reminder",
|
|
165
|
-
successMessage: "Reminder sent.",
|
|
166
|
-
params: {
|
|
167
|
-
comment: {
|
|
168
|
-
label: "Note"
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
},
|
|
172
|
-
approval_recall: {
|
|
173
|
-
label: "Recall",
|
|
174
|
-
confirmText: "Recall this request? Approvers can no longer act on it and the record is unlocked.",
|
|
175
|
-
successMessage: "Recalled.",
|
|
176
|
-
params: {
|
|
177
|
-
comment: {
|
|
178
|
-
label: "Comment"
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
},
|
|
182
|
-
approval_resubmit: {
|
|
183
|
-
label: "Resubmit",
|
|
184
|
-
successMessage: "Resubmitted.",
|
|
185
|
-
params: {
|
|
186
|
-
comment: {
|
|
187
|
-
label: "What changed?"
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
sys_approval_action: {
|
|
194
|
-
label: "Approval Action",
|
|
195
|
-
pluralLabel: "Approval Actions",
|
|
196
|
-
description: "Append-only audit trail for approval actions",
|
|
197
|
-
fields: {
|
|
198
|
-
id: {
|
|
199
|
-
label: "Action ID"
|
|
200
|
-
},
|
|
201
|
-
organization_id: {
|
|
202
|
-
label: "Organization",
|
|
203
|
-
help: "Tenant that owns this action (mirrors the parent request)"
|
|
204
|
-
},
|
|
205
|
-
request_id: {
|
|
206
|
-
label: "Request"
|
|
207
|
-
},
|
|
208
|
-
step_name: {
|
|
209
|
-
label: "Step",
|
|
210
|
-
help: "Machine name of the step at the time of the action"
|
|
211
|
-
},
|
|
212
|
-
step_index: {
|
|
213
|
-
label: "Step Index"
|
|
214
|
-
},
|
|
215
|
-
action: {
|
|
216
|
-
label: "Action",
|
|
217
|
-
options: {
|
|
218
|
-
submit: "submit",
|
|
219
|
-
approve: "approve",
|
|
220
|
-
reject: "reject",
|
|
221
|
-
recall: "recall",
|
|
222
|
-
escalate: "escalate",
|
|
223
|
-
reassign: "reassign",
|
|
224
|
-
remind: "remind",
|
|
225
|
-
request_info: "request_info",
|
|
226
|
-
comment: "comment",
|
|
227
|
-
revise: "revise",
|
|
228
|
-
resubmit: "resubmit",
|
|
229
|
-
ooo_substitute: "ooo_substitute"
|
|
230
|
-
}
|
|
231
|
-
},
|
|
232
|
-
actor_id: {
|
|
233
|
-
label: "Actor"
|
|
234
|
-
},
|
|
235
|
-
comment: {
|
|
236
|
-
label: "Comment"
|
|
237
|
-
},
|
|
238
|
-
attachments: {
|
|
239
|
-
label: "Attachments",
|
|
240
|
-
help: "Files supporting this action — e.g. a signed contract or evidence (#3266)."
|
|
241
|
-
},
|
|
242
|
-
created_at: {
|
|
243
|
-
label: "Created At"
|
|
244
|
-
}
|
|
245
|
-
},
|
|
246
|
-
_views: {
|
|
247
|
-
recent: {
|
|
248
|
-
label: "Recent",
|
|
249
|
-
emptyState: {
|
|
250
|
-
title: "No approval actions yet",
|
|
251
|
-
message: "Actions are logged automatically when approvals progress."
|
|
252
|
-
}
|
|
253
|
-
},
|
|
254
|
-
by_actor: {
|
|
255
|
-
label: "By Actor"
|
|
256
|
-
},
|
|
257
|
-
all_actions: {
|
|
258
|
-
label: "All"
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
},
|
|
262
|
-
sys_approval_delegation: {
|
|
263
|
-
label: "Approval Delegation",
|
|
264
|
-
pluralLabel: "Approval Delegations",
|
|
265
|
-
description: "Self-service out-of-office rule: route this user's approver slots to a delegate within a time window (#1322 M1).",
|
|
266
|
-
fields: {
|
|
267
|
-
id: {
|
|
268
|
-
label: "Delegation ID"
|
|
269
|
-
},
|
|
270
|
-
delegator_id: {
|
|
271
|
-
label: "Delegator",
|
|
272
|
-
help: "The user going out of office; their individually-routed approver slots are rerouted while active."
|
|
273
|
-
},
|
|
274
|
-
delegate_id: {
|
|
275
|
-
label: "Delegate",
|
|
276
|
-
help: "The backup who receives the delegator's approvals while this rule is active. Acts under their own identity."
|
|
277
|
-
},
|
|
278
|
-
valid_from: {
|
|
279
|
-
label: "Valid From",
|
|
280
|
-
help: "Rule is inactive before this instant. Null = active immediately. Enforced at resolution time via isGrantActive (ADR-0091 D2 predicate) — never by a background job."
|
|
281
|
-
},
|
|
282
|
-
valid_until: {
|
|
283
|
-
label: "Valid Until",
|
|
284
|
-
help: "Rule is inactive AT and AFTER this instant (half-open [from, until), UTC). Null = never expires."
|
|
285
|
-
},
|
|
286
|
-
reason: {
|
|
287
|
-
label: "Reason",
|
|
288
|
-
help: "Why the delegation exists (e.g. \"Annual leave 5/26–5/30\"). Recorded on the substitution audit row."
|
|
289
|
-
},
|
|
290
|
-
organization_id: {
|
|
291
|
-
label: "Organization",
|
|
292
|
-
help: "Tenant that owns this rule; null = applies across tenants for this delegator."
|
|
293
|
-
},
|
|
294
|
-
created_at: {
|
|
295
|
-
label: "Created At"
|
|
296
|
-
},
|
|
297
|
-
updated_at: {
|
|
298
|
-
label: "Updated At"
|
|
299
|
-
}
|
|
300
|
-
},
|
|
301
|
-
_views: {
|
|
302
|
-
active: {
|
|
303
|
-
label: "Active",
|
|
304
|
-
emptyState: {
|
|
305
|
-
title: "No delegations",
|
|
306
|
-
message: "Declare an out-of-office delegation so approvals route to a backup while you are away."
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
};
|
|
@@ -1,311 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Auto-generated by 'os i18n extract' for locale 'es-ES'.
|
|
5
|
-
* Edit translations in place; re-run extract (with --merge) to fill new gaps.
|
|
6
|
-
* Do not hand-edit the structure — only the leaf string values.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { TranslationData } from '@objectstack/spec/system';
|
|
10
|
-
|
|
11
|
-
export const esESObjects: NonNullable<TranslationData['objects']> = {
|
|
12
|
-
sys_approval_request: {
|
|
13
|
-
label: "Solicitud de aprobación",
|
|
14
|
-
pluralLabel: "Solicitudes de aprobación",
|
|
15
|
-
description: "Instancia activa de aprobación registrada por envío",
|
|
16
|
-
fields: {
|
|
17
|
-
id: {
|
|
18
|
-
label: "ID de solicitud"
|
|
19
|
-
},
|
|
20
|
-
organization_id: {
|
|
21
|
-
label: "Organización",
|
|
22
|
-
help: "Tenant que posee esta solicitud de aprobación (propagado desde el contexto del solicitante)."
|
|
23
|
-
},
|
|
24
|
-
process_name: {
|
|
25
|
-
label: "Origen",
|
|
26
|
-
help: "Origen de la solicitud — `flow:<flowName|nodeId>` para aprobaciones por nodo"
|
|
27
|
-
},
|
|
28
|
-
object_name: {
|
|
29
|
-
label: "Objeto"
|
|
30
|
-
},
|
|
31
|
-
record_id: {
|
|
32
|
-
label: "ID de registro"
|
|
33
|
-
},
|
|
34
|
-
submitter_id: {
|
|
35
|
-
label: "Solicitante"
|
|
36
|
-
},
|
|
37
|
-
submitter_comment: {
|
|
38
|
-
label: "Comentario del solicitante"
|
|
39
|
-
},
|
|
40
|
-
status: {
|
|
41
|
-
label: "Estado",
|
|
42
|
-
help: "Estado del ciclo de vida de la solicitud.",
|
|
43
|
-
options: {
|
|
44
|
-
pending: "Pendiente",
|
|
45
|
-
approved: "Aprobada",
|
|
46
|
-
rejected: "Rechazada",
|
|
47
|
-
recalled: "Retirada",
|
|
48
|
-
returned: "Devuelta para revisión"
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
current_step: {
|
|
52
|
-
label: "Paso actual",
|
|
53
|
-
help: "Nombre técnico del paso pendiente de aprobación."
|
|
54
|
-
},
|
|
55
|
-
current_step_index: {
|
|
56
|
-
label: "Índice del paso actual"
|
|
57
|
-
},
|
|
58
|
-
pending_approvers: {
|
|
59
|
-
label: "Aprobadores pendientes",
|
|
60
|
-
help: "ID de usuario separados por comas que pueden actuar en el paso actual."
|
|
61
|
-
},
|
|
62
|
-
payload_json: {
|
|
63
|
-
label: "Instantánea",
|
|
64
|
-
help: "Instantánea del registro en el momento del envío."
|
|
65
|
-
},
|
|
66
|
-
flow_run_id: {
|
|
67
|
-
label: "Flow Run",
|
|
68
|
-
help: "Suspended automation run id this request gates (ADR-0019). The decision resumes it."
|
|
69
|
-
},
|
|
70
|
-
flow_node_id: {
|
|
71
|
-
label: "Flow Node",
|
|
72
|
-
help: "Approval node id within the flow that opened this request (ADR-0019)."
|
|
73
|
-
},
|
|
74
|
-
node_config_json: {
|
|
75
|
-
label: "Node Config",
|
|
76
|
-
help: "Snapshot of the Approval node config (approvers/behavior) for node-driven requests (ADR-0019)."
|
|
77
|
-
},
|
|
78
|
-
completed_at: {
|
|
79
|
-
label: "Completado el"
|
|
80
|
-
},
|
|
81
|
-
created_at: {
|
|
82
|
-
label: "Creado el"
|
|
83
|
-
},
|
|
84
|
-
updated_at: {
|
|
85
|
-
label: "Actualizado el"
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
_views: {
|
|
89
|
-
my_pending: {
|
|
90
|
-
label: "Mis pendientes",
|
|
91
|
-
emptyState: {
|
|
92
|
-
title: "Sin aprobaciones pendientes",
|
|
93
|
-
message: "Estás al día: nada espera tu aprobación."
|
|
94
|
-
}
|
|
95
|
-
},
|
|
96
|
-
submitted_by_me: {
|
|
97
|
-
label: "Enviadas por mí"
|
|
98
|
-
},
|
|
99
|
-
completed: {
|
|
100
|
-
label: "Completadas"
|
|
101
|
-
},
|
|
102
|
-
all_requests: {
|
|
103
|
-
label: "Todas"
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
_actions: {
|
|
107
|
-
approval_approve: {
|
|
108
|
-
label: "Aprobar",
|
|
109
|
-
successMessage: "Aprobada.",
|
|
110
|
-
params: {
|
|
111
|
-
comment: {
|
|
112
|
-
label: "Comentario"
|
|
113
|
-
},
|
|
114
|
-
attachments: {
|
|
115
|
-
label: "Adjuntos"
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
approval_reject: {
|
|
120
|
-
label: "Rechazar",
|
|
121
|
-
confirmText: "¿Rechazar esta solicitud? Un rechazo es definitivo para todos los aprobadores.",
|
|
122
|
-
successMessage: "Rechazada.",
|
|
123
|
-
params: {
|
|
124
|
-
comment: {
|
|
125
|
-
label: "Comentario"
|
|
126
|
-
},
|
|
127
|
-
attachments: {
|
|
128
|
-
label: "Adjuntos"
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
approval_reassign: {
|
|
133
|
-
label: "Reasignar",
|
|
134
|
-
successMessage: "Reasignada.",
|
|
135
|
-
params: {
|
|
136
|
-
to: {
|
|
137
|
-
label: "Nuevo aprobador",
|
|
138
|
-
helpText: "Usuario al que se entrega este paso"
|
|
139
|
-
},
|
|
140
|
-
comment: {
|
|
141
|
-
label: "Comentario"
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
approval_send_back: {
|
|
146
|
-
label: "Devolver",
|
|
147
|
-
successMessage: "Devuelta para revisión.",
|
|
148
|
-
params: {
|
|
149
|
-
comment: {
|
|
150
|
-
label: "Motivo"
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
approval_request_info: {
|
|
155
|
-
label: "Pedir información",
|
|
156
|
-
successMessage: "Información solicitada.",
|
|
157
|
-
params: {
|
|
158
|
-
comment: {
|
|
159
|
-
label: "¿Qué necesitas?"
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
approval_remind: {
|
|
164
|
-
label: "Enviar recordatorio",
|
|
165
|
-
successMessage: "Recordatorio enviado.",
|
|
166
|
-
params: {
|
|
167
|
-
comment: {
|
|
168
|
-
label: "Nota"
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
},
|
|
172
|
-
approval_recall: {
|
|
173
|
-
label: "Retirar",
|
|
174
|
-
confirmText: "¿Retirar esta solicitud? Los aprobadores ya no podrán actuar sobre ella y el registro se desbloqueará.",
|
|
175
|
-
successMessage: "Retirada.",
|
|
176
|
-
params: {
|
|
177
|
-
comment: {
|
|
178
|
-
label: "Comentario"
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
},
|
|
182
|
-
approval_resubmit: {
|
|
183
|
-
label: "Reenviar",
|
|
184
|
-
successMessage: "Reenviada.",
|
|
185
|
-
params: {
|
|
186
|
-
comment: {
|
|
187
|
-
label: "¿Qué ha cambiado?"
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
sys_approval_action: {
|
|
194
|
-
label: "Acción de aprobación",
|
|
195
|
-
pluralLabel: "Acciones de aprobación",
|
|
196
|
-
description: "Registro de auditoría append-only para acciones de aprobación",
|
|
197
|
-
fields: {
|
|
198
|
-
id: {
|
|
199
|
-
label: "ID de acción"
|
|
200
|
-
},
|
|
201
|
-
organization_id: {
|
|
202
|
-
label: "Organización",
|
|
203
|
-
help: "Tenant que posee esta acción (refleja la solicitud principal)."
|
|
204
|
-
},
|
|
205
|
-
request_id: {
|
|
206
|
-
label: "Solicitud"
|
|
207
|
-
},
|
|
208
|
-
step_name: {
|
|
209
|
-
label: "Paso",
|
|
210
|
-
help: "Nombre técnico del paso en el momento de la acción."
|
|
211
|
-
},
|
|
212
|
-
step_index: {
|
|
213
|
-
label: "Índice del paso"
|
|
214
|
-
},
|
|
215
|
-
action: {
|
|
216
|
-
label: "Acción",
|
|
217
|
-
options: {
|
|
218
|
-
submit: "Enviar",
|
|
219
|
-
approve: "Aprobar",
|
|
220
|
-
reject: "Rechazar",
|
|
221
|
-
recall: "Retirar",
|
|
222
|
-
escalate: "Escalar",
|
|
223
|
-
reassign: "Reasignación",
|
|
224
|
-
remind: "Recordatorio",
|
|
225
|
-
request_info: "Petición de información",
|
|
226
|
-
comment: "Comentario",
|
|
227
|
-
revise: "Devolución",
|
|
228
|
-
resubmit: "Reenvío",
|
|
229
|
-
ooo_substitute: "Sustitución por ausencia"
|
|
230
|
-
}
|
|
231
|
-
},
|
|
232
|
-
actor_id: {
|
|
233
|
-
label: "Actor"
|
|
234
|
-
},
|
|
235
|
-
comment: {
|
|
236
|
-
label: "Comentario"
|
|
237
|
-
},
|
|
238
|
-
attachments: {
|
|
239
|
-
label: "Adjuntos",
|
|
240
|
-
help: "Archivos que respaldan esta acción, p. ej. un contrato firmado o pruebas (#3266)."
|
|
241
|
-
},
|
|
242
|
-
created_at: {
|
|
243
|
-
label: "Creado el"
|
|
244
|
-
}
|
|
245
|
-
},
|
|
246
|
-
_views: {
|
|
247
|
-
recent: {
|
|
248
|
-
label: "Recientes",
|
|
249
|
-
emptyState: {
|
|
250
|
-
title: "Aún no hay acciones de aprobación",
|
|
251
|
-
message: "Las acciones se registran automáticamente a medida que avanza la aprobación."
|
|
252
|
-
}
|
|
253
|
-
},
|
|
254
|
-
by_actor: {
|
|
255
|
-
label: "Por actor"
|
|
256
|
-
},
|
|
257
|
-
all_actions: {
|
|
258
|
-
label: "Todas"
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
},
|
|
262
|
-
sys_approval_delegation: {
|
|
263
|
-
label: "Approval Delegation",
|
|
264
|
-
pluralLabel: "Approval Delegations",
|
|
265
|
-
description: "Self-service out-of-office rule: route this user's approver slots to a delegate within a time window (#1322 M1).",
|
|
266
|
-
fields: {
|
|
267
|
-
id: {
|
|
268
|
-
label: "Delegation ID"
|
|
269
|
-
},
|
|
270
|
-
delegator_id: {
|
|
271
|
-
label: "Delegator",
|
|
272
|
-
help: "The user going out of office; their individually-routed approver slots are rerouted while active."
|
|
273
|
-
},
|
|
274
|
-
delegate_id: {
|
|
275
|
-
label: "Delegate",
|
|
276
|
-
help: "The backup who receives the delegator's approvals while this rule is active. Acts under their own identity."
|
|
277
|
-
},
|
|
278
|
-
valid_from: {
|
|
279
|
-
label: "Valid From",
|
|
280
|
-
help: "Rule is inactive before this instant. Null = active immediately. Enforced at resolution time via isGrantActive (ADR-0091 D2 predicate) — never by a background job."
|
|
281
|
-
},
|
|
282
|
-
valid_until: {
|
|
283
|
-
label: "Valid Until",
|
|
284
|
-
help: "Rule is inactive AT and AFTER this instant (half-open [from, until), UTC). Null = never expires."
|
|
285
|
-
},
|
|
286
|
-
reason: {
|
|
287
|
-
label: "Reason",
|
|
288
|
-
help: "Why the delegation exists (e.g. \"Annual leave 5/26–5/30\"). Recorded on the substitution audit row."
|
|
289
|
-
},
|
|
290
|
-
organization_id: {
|
|
291
|
-
label: "Organization",
|
|
292
|
-
help: "Tenant that owns this rule; null = applies across tenants for this delegator."
|
|
293
|
-
},
|
|
294
|
-
created_at: {
|
|
295
|
-
label: "Created At"
|
|
296
|
-
},
|
|
297
|
-
updated_at: {
|
|
298
|
-
label: "Updated At"
|
|
299
|
-
}
|
|
300
|
-
},
|
|
301
|
-
_views: {
|
|
302
|
-
active: {
|
|
303
|
-
label: "Active",
|
|
304
|
-
emptyState: {
|
|
305
|
-
title: "No delegations",
|
|
306
|
-
message: "Declare an out-of-office delegation so approvals route to a backup while you are away."
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* ApprovalsTranslations — i18n bundle owned by this plugin (ADR-0029 D8).
|
|
5
|
-
*
|
|
6
|
-
* Object label/field/view/action translations for the sys_* objects this
|
|
7
|
-
* plugin owns. Loaded at runtime via the plugin's `kernel:ready` hook
|
|
8
|
-
* (`i18n.loadTranslations`). Regenerate with `os i18n extract` against
|
|
9
|
-
* `scripts/i18n-extract.config.ts`.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import type { TranslationBundle } from '@objectstack/spec/system';
|
|
13
|
-
import { enObjects } from './en.objects.generated.js';
|
|
14
|
-
import { zhCNObjects } from './zh-CN.objects.generated.js';
|
|
15
|
-
import { jaJPObjects } from './ja-JP.objects.generated.js';
|
|
16
|
-
import { esESObjects } from './es-ES.objects.generated.js';
|
|
17
|
-
|
|
18
|
-
export const ApprovalsTranslations: TranslationBundle = {
|
|
19
|
-
en: { objects: enObjects },
|
|
20
|
-
'zh-CN': { objects: zhCNObjects },
|
|
21
|
-
'ja-JP': { objects: jaJPObjects },
|
|
22
|
-
'es-ES': { objects: esESObjects },
|
|
23
|
-
};
|