@naisys/erp 3.0.0-beta.3

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.

Potentially problematic release.


This version of @naisys/erp might be problematic. Click here for more details.

Files changed (201) hide show
  1. package/bin/naisys-erp +2 -0
  2. package/client-dist/android-chrome-192x192.png +0 -0
  3. package/client-dist/android-chrome-512x512.png +0 -0
  4. package/client-dist/apple-touch-icon.png +0 -0
  5. package/client-dist/assets/index-45dVo30p.css +1 -0
  6. package/client-dist/assets/index-Dffms7F_.js +168 -0
  7. package/client-dist/assets/naisys-logo-CzoPnn5I.webp +0 -0
  8. package/client-dist/favicon.ico +0 -0
  9. package/client-dist/index.html +42 -0
  10. package/client-dist/site.webmanifest +22 -0
  11. package/dist/api-reference.d.ts +10 -0
  12. package/dist/api-reference.js +101 -0
  13. package/dist/audit.d.ts +5 -0
  14. package/dist/audit.js +14 -0
  15. package/dist/auth-middleware.d.ts +18 -0
  16. package/dist/auth-middleware.js +203 -0
  17. package/dist/dbConfig.d.ts +5 -0
  18. package/dist/dbConfig.js +10 -0
  19. package/dist/erpDb.d.ts +10 -0
  20. package/dist/erpDb.js +34 -0
  21. package/dist/erpServer.d.ts +10 -0
  22. package/dist/erpServer.js +321 -0
  23. package/dist/error-handler.d.ts +7 -0
  24. package/dist/error-handler.js +17 -0
  25. package/dist/generated/prisma/client.d.ts +154 -0
  26. package/dist/generated/prisma/client.js +35 -0
  27. package/dist/generated/prisma/commonInputTypes.d.ts +637 -0
  28. package/dist/generated/prisma/commonInputTypes.js +11 -0
  29. package/dist/generated/prisma/enums.d.ts +59 -0
  30. package/dist/generated/prisma/enums.js +60 -0
  31. package/dist/generated/prisma/internal/class.d.ts +406 -0
  32. package/dist/generated/prisma/internal/class.js +50 -0
  33. package/dist/generated/prisma/internal/prismaNamespace.d.ts +2722 -0
  34. package/dist/generated/prisma/internal/prismaNamespace.js +366 -0
  35. package/dist/generated/prisma/models/Attachment.d.ts +1455 -0
  36. package/dist/generated/prisma/models/Attachment.js +2 -0
  37. package/dist/generated/prisma/models/AuditLog.d.ts +1359 -0
  38. package/dist/generated/prisma/models/AuditLog.js +2 -0
  39. package/dist/generated/prisma/models/Field.d.ts +1880 -0
  40. package/dist/generated/prisma/models/Field.js +2 -0
  41. package/dist/generated/prisma/models/FieldAttachment.d.ts +1245 -0
  42. package/dist/generated/prisma/models/FieldAttachment.js +2 -0
  43. package/dist/generated/prisma/models/FieldRecord.d.ts +1625 -0
  44. package/dist/generated/prisma/models/FieldRecord.js +2 -0
  45. package/dist/generated/prisma/models/FieldSet.d.ts +1577 -0
  46. package/dist/generated/prisma/models/FieldSet.js +2 -0
  47. package/dist/generated/prisma/models/FieldValue.d.ts +1908 -0
  48. package/dist/generated/prisma/models/FieldValue.js +2 -0
  49. package/dist/generated/prisma/models/Item.d.ts +1858 -0
  50. package/dist/generated/prisma/models/Item.js +2 -0
  51. package/dist/generated/prisma/models/ItemInstance.d.ts +1987 -0
  52. package/dist/generated/prisma/models/ItemInstance.js +2 -0
  53. package/dist/generated/prisma/models/LaborTicket.d.ts +1867 -0
  54. package/dist/generated/prisma/models/LaborTicket.js +2 -0
  55. package/dist/generated/prisma/models/Operation.d.ts +2578 -0
  56. package/dist/generated/prisma/models/Operation.js +2 -0
  57. package/dist/generated/prisma/models/OperationDependency.d.ts +1434 -0
  58. package/dist/generated/prisma/models/OperationDependency.js +2 -0
  59. package/dist/generated/prisma/models/OperationFieldRef.d.ts +1539 -0
  60. package/dist/generated/prisma/models/OperationFieldRef.js +2 -0
  61. package/dist/generated/prisma/models/OperationRun.d.ts +2563 -0
  62. package/dist/generated/prisma/models/OperationRun.js +2 -0
  63. package/dist/generated/prisma/models/OperationRunComment.d.ts +1366 -0
  64. package/dist/generated/prisma/models/OperationRunComment.js +2 -0
  65. package/dist/generated/prisma/models/Order.d.ts +1931 -0
  66. package/dist/generated/prisma/models/Order.js +2 -0
  67. package/dist/generated/prisma/models/OrderRevision.d.ts +1962 -0
  68. package/dist/generated/prisma/models/OrderRevision.js +2 -0
  69. package/dist/generated/prisma/models/OrderRun.d.ts +2310 -0
  70. package/dist/generated/prisma/models/OrderRun.js +2 -0
  71. package/dist/generated/prisma/models/SchemaVersion.d.ts +985 -0
  72. package/dist/generated/prisma/models/SchemaVersion.js +2 -0
  73. package/dist/generated/prisma/models/Session.d.ts +1213 -0
  74. package/dist/generated/prisma/models/Session.js +2 -0
  75. package/dist/generated/prisma/models/Step.d.ts +2180 -0
  76. package/dist/generated/prisma/models/Step.js +2 -0
  77. package/dist/generated/prisma/models/StepRun.d.ts +1963 -0
  78. package/dist/generated/prisma/models/StepRun.js +2 -0
  79. package/dist/generated/prisma/models/User.d.ts +11819 -0
  80. package/dist/generated/prisma/models/User.js +2 -0
  81. package/dist/generated/prisma/models/UserPermission.d.ts +1348 -0
  82. package/dist/generated/prisma/models/UserPermission.js +2 -0
  83. package/dist/generated/prisma/models/WorkCenter.d.ts +1657 -0
  84. package/dist/generated/prisma/models/WorkCenter.js +2 -0
  85. package/dist/generated/prisma/models/WorkCenterUser.d.ts +1390 -0
  86. package/dist/generated/prisma/models/WorkCenterUser.js +2 -0
  87. package/dist/generated/prisma/models.d.ts +28 -0
  88. package/dist/generated/prisma/models.js +2 -0
  89. package/dist/hateoas.d.ts +7 -0
  90. package/dist/hateoas.js +61 -0
  91. package/dist/route-helpers.d.ts +318 -0
  92. package/dist/route-helpers.js +220 -0
  93. package/dist/routes/admin.d.ts +3 -0
  94. package/dist/routes/admin.js +147 -0
  95. package/dist/routes/audit.d.ts +3 -0
  96. package/dist/routes/audit.js +36 -0
  97. package/dist/routes/auth.d.ts +3 -0
  98. package/dist/routes/auth.js +112 -0
  99. package/dist/routes/dispatch.d.ts +3 -0
  100. package/dist/routes/dispatch.js +174 -0
  101. package/dist/routes/inventory.d.ts +3 -0
  102. package/dist/routes/inventory.js +70 -0
  103. package/dist/routes/item-fields.d.ts +3 -0
  104. package/dist/routes/item-fields.js +220 -0
  105. package/dist/routes/item-instances.d.ts +3 -0
  106. package/dist/routes/item-instances.js +426 -0
  107. package/dist/routes/items.d.ts +3 -0
  108. package/dist/routes/items.js +252 -0
  109. package/dist/routes/labor-tickets.d.ts +3 -0
  110. package/dist/routes/labor-tickets.js +268 -0
  111. package/dist/routes/operation-dependencies.d.ts +3 -0
  112. package/dist/routes/operation-dependencies.js +170 -0
  113. package/dist/routes/operation-field-refs.d.ts +3 -0
  114. package/dist/routes/operation-field-refs.js +263 -0
  115. package/dist/routes/operation-run-comments.d.ts +3 -0
  116. package/dist/routes/operation-run-comments.js +108 -0
  117. package/dist/routes/operation-run-transitions.d.ts +3 -0
  118. package/dist/routes/operation-run-transitions.js +249 -0
  119. package/dist/routes/operation-runs.d.ts +112 -0
  120. package/dist/routes/operation-runs.js +299 -0
  121. package/dist/routes/operations.d.ts +3 -0
  122. package/dist/routes/operations.js +283 -0
  123. package/dist/routes/order-revision-transitions.d.ts +3 -0
  124. package/dist/routes/order-revision-transitions.js +86 -0
  125. package/dist/routes/order-revisions.d.ts +51 -0
  126. package/dist/routes/order-revisions.js +327 -0
  127. package/dist/routes/order-run-transitions.d.ts +3 -0
  128. package/dist/routes/order-run-transitions.js +215 -0
  129. package/dist/routes/order-runs.d.ts +58 -0
  130. package/dist/routes/order-runs.js +335 -0
  131. package/dist/routes/orders.d.ts +3 -0
  132. package/dist/routes/orders.js +262 -0
  133. package/dist/routes/root.d.ts +3 -0
  134. package/dist/routes/root.js +123 -0
  135. package/dist/routes/schemas.d.ts +3 -0
  136. package/dist/routes/schemas.js +31 -0
  137. package/dist/routes/step-field-attachments.d.ts +3 -0
  138. package/dist/routes/step-field-attachments.js +231 -0
  139. package/dist/routes/step-fields.d.ts +100 -0
  140. package/dist/routes/step-fields.js +315 -0
  141. package/dist/routes/step-run-fields.d.ts +3 -0
  142. package/dist/routes/step-run-fields.js +438 -0
  143. package/dist/routes/step-run-transitions.d.ts +3 -0
  144. package/dist/routes/step-run-transitions.js +113 -0
  145. package/dist/routes/step-runs.d.ts +332 -0
  146. package/dist/routes/step-runs.js +324 -0
  147. package/dist/routes/steps.d.ts +3 -0
  148. package/dist/routes/steps.js +283 -0
  149. package/dist/routes/user-permissions.d.ts +3 -0
  150. package/dist/routes/user-permissions.js +100 -0
  151. package/dist/routes/users.d.ts +57 -0
  152. package/dist/routes/users.js +381 -0
  153. package/dist/routes/work-centers.d.ts +3 -0
  154. package/dist/routes/work-centers.js +280 -0
  155. package/dist/schema-registry.d.ts +3 -0
  156. package/dist/schema-registry.js +45 -0
  157. package/dist/services/attachment-service.d.ts +33 -0
  158. package/dist/services/attachment-service.js +118 -0
  159. package/dist/services/field-ref-service.d.ts +96 -0
  160. package/dist/services/field-ref-service.js +74 -0
  161. package/dist/services/field-service.d.ts +49 -0
  162. package/dist/services/field-service.js +114 -0
  163. package/dist/services/field-value-service.d.ts +61 -0
  164. package/dist/services/field-value-service.js +256 -0
  165. package/dist/services/item-instance-service.d.ts +152 -0
  166. package/dist/services/item-instance-service.js +155 -0
  167. package/dist/services/item-service.d.ts +47 -0
  168. package/dist/services/item-service.js +56 -0
  169. package/dist/services/labor-ticket-service.d.ts +40 -0
  170. package/dist/services/labor-ticket-service.js +148 -0
  171. package/dist/services/log-file-service.d.ts +4 -0
  172. package/dist/services/log-file-service.js +11 -0
  173. package/dist/services/operation-dependency-service.d.ts +33 -0
  174. package/dist/services/operation-dependency-service.js +30 -0
  175. package/dist/services/operation-run-comment-service.d.ts +17 -0
  176. package/dist/services/operation-run-comment-service.js +26 -0
  177. package/dist/services/operation-run-service.d.ts +126 -0
  178. package/dist/services/operation-run-service.js +347 -0
  179. package/dist/services/operation-service.d.ts +47 -0
  180. package/dist/services/operation-service.js +132 -0
  181. package/dist/services/order-revision-service.d.ts +53 -0
  182. package/dist/services/order-revision-service.js +264 -0
  183. package/dist/services/order-run-service.d.ts +138 -0
  184. package/dist/services/order-run-service.js +356 -0
  185. package/dist/services/order-service.d.ts +15 -0
  186. package/dist/services/order-service.js +68 -0
  187. package/dist/services/revision-diff-service.d.ts +3 -0
  188. package/dist/services/revision-diff-service.js +194 -0
  189. package/dist/services/step-run-service.d.ts +172 -0
  190. package/dist/services/step-run-service.js +106 -0
  191. package/dist/services/step-service.d.ts +104 -0
  192. package/dist/services/step-service.js +89 -0
  193. package/dist/services/user-service.d.ts +185 -0
  194. package/dist/services/user-service.js +132 -0
  195. package/dist/services/work-center-service.d.ts +29 -0
  196. package/dist/services/work-center-service.js +106 -0
  197. package/dist/supervisorAuth.d.ts +3 -0
  198. package/dist/supervisorAuth.js +16 -0
  199. package/dist/userService.d.ts +20 -0
  200. package/dist/userService.js +118 -0
  201. package/package.json +69 -0
@@ -0,0 +1,264 @@
1
+ import { RevisionStatus as RevisionStatusValues, } from "@naisys/erp-shared";
2
+ import { writeAuditEntry } from "../audit.js";
3
+ import erpDb from "../erpDb.js";
4
+ import { includeUsers } from "../route-helpers.js";
5
+ // --- Prisma include & result type ---
6
+ const includeRevisionRelations = {
7
+ ...includeUsers,
8
+ order: { select: { item: { select: { key: true } } } },
9
+ };
10
+ export async function getRevisionOpSummary(orderRevId) {
11
+ return erpDb.operation.findMany({
12
+ where: { orderRevId },
13
+ select: { seqNo: true, title: true },
14
+ orderBy: { seqNo: "asc" },
15
+ });
16
+ }
17
+ // --- Lookups ---
18
+ export async function listRevisions(orderId, where, page, pageSize) {
19
+ const fullWhere = { orderId, ...where };
20
+ return Promise.all([
21
+ erpDb.orderRevision.findMany({
22
+ where: fullWhere,
23
+ include: includeRevisionRelations,
24
+ skip: (page - 1) * pageSize,
25
+ take: pageSize,
26
+ orderBy: { revNo: "desc" },
27
+ }),
28
+ erpDb.orderRevision.count({ where: fullWhere }),
29
+ ]);
30
+ }
31
+ export async function getRevision(orderId, revNo) {
32
+ return erpDb.orderRevision.findFirst({
33
+ where: { orderId, revNo },
34
+ include: includeRevisionRelations,
35
+ });
36
+ }
37
+ export async function findExisting(orderId, revNo) {
38
+ return erpDb.orderRevision.findFirst({
39
+ where: { orderId, revNo },
40
+ include: includeRevisionRelations,
41
+ });
42
+ }
43
+ // --- Validation ---
44
+ export function validateDraftStatus(status) {
45
+ if (status !== RevisionStatusValues.draft) {
46
+ return `Cannot update revision in ${status} status`;
47
+ }
48
+ return null;
49
+ }
50
+ export async function checkHasOrderRuns(revisionId) {
51
+ const orderRunCount = await erpDb.orderRun.count({
52
+ where: { orderRevId: revisionId },
53
+ });
54
+ if (orderRunCount > 0) {
55
+ return "Cannot delete revision with existing order runs.";
56
+ }
57
+ return null;
58
+ }
59
+ // --- Mutations ---
60
+ export async function createRevision(orderId, data, userId) {
61
+ return erpDb.$transaction(async (erpTx) => {
62
+ const prevRev = await erpTx.orderRevision.findFirst({
63
+ where: { orderId },
64
+ orderBy: { revNo: "desc" },
65
+ include: {
66
+ operations: {
67
+ include: {
68
+ steps: {
69
+ include: {
70
+ fieldSet: { include: { fields: true } },
71
+ },
72
+ },
73
+ predecessors: true,
74
+ },
75
+ },
76
+ },
77
+ });
78
+ const nextRevNo = (prevRev?.revNo ?? 0) + 1;
79
+ // Seed description: explicit value > previous rev's description > order's description
80
+ let resolvedDescription = data.description;
81
+ if (resolvedDescription === undefined) {
82
+ if (prevRev) {
83
+ resolvedDescription = prevRev.description;
84
+ }
85
+ else {
86
+ const order = await erpTx.order.findUniqueOrThrow({
87
+ where: { id: orderId },
88
+ });
89
+ resolvedDescription = order.description;
90
+ }
91
+ }
92
+ const newRev = await erpTx.orderRevision.create({
93
+ data: {
94
+ orderId,
95
+ revNo: nextRevNo,
96
+ description: resolvedDescription,
97
+ changeSummary: data.changeSummary ?? null,
98
+ createdById: userId,
99
+ updatedById: userId,
100
+ },
101
+ include: includeRevisionRelations,
102
+ });
103
+ // Copy operations, steps, fields, dependencies, and field refs from the previous revision
104
+ if (prevRev) {
105
+ const oldToNewOpId = new Map();
106
+ const oldToNewStepId = new Map();
107
+ for (const op of prevRev.operations) {
108
+ const newOp = await erpTx.operation.create({
109
+ data: {
110
+ orderRevId: newRev.id,
111
+ seqNo: op.seqNo,
112
+ title: op.title,
113
+ description: op.description,
114
+ workCenterId: op.workCenterId,
115
+ createdById: userId,
116
+ updatedById: userId,
117
+ },
118
+ });
119
+ oldToNewOpId.set(op.id, newOp.id);
120
+ for (const step of op.steps) {
121
+ const fields = step.fieldSet?.fields ?? [];
122
+ let newFieldSetId = null;
123
+ if (fields.length > 0) {
124
+ const newFieldSet = await erpTx.fieldSet.create({
125
+ data: { createdById: userId },
126
+ });
127
+ newFieldSetId = newFieldSet.id;
128
+ for (const field of fields) {
129
+ await erpTx.field.create({
130
+ data: {
131
+ fieldSetId: newFieldSet.id,
132
+ seqNo: field.seqNo,
133
+ label: field.label,
134
+ type: field.type,
135
+ isArray: field.isArray,
136
+ required: field.required,
137
+ createdById: userId,
138
+ updatedById: userId,
139
+ },
140
+ });
141
+ }
142
+ }
143
+ const newStep = await erpTx.step.create({
144
+ data: {
145
+ operationId: newOp.id,
146
+ seqNo: step.seqNo,
147
+ title: step.title,
148
+ instructions: step.instructions,
149
+ multiSet: step.multiSet,
150
+ fieldSetId: newFieldSetId,
151
+ createdById: userId,
152
+ updatedById: userId,
153
+ },
154
+ });
155
+ oldToNewStepId.set(step.id, newStep.id);
156
+ }
157
+ }
158
+ // Copy operation dependencies using the old-to-new ID mapping
159
+ for (const op of prevRev.operations) {
160
+ for (const dep of op.predecessors) {
161
+ const newSuccessorId = oldToNewOpId.get(dep.successorId);
162
+ const newPredecessorId = oldToNewOpId.get(dep.predecessorId);
163
+ if (newSuccessorId && newPredecessorId) {
164
+ await erpTx.operationDependency.create({
165
+ data: {
166
+ successorId: newSuccessorId,
167
+ predecessorId: newPredecessorId,
168
+ createdById: userId,
169
+ },
170
+ });
171
+ }
172
+ }
173
+ }
174
+ // Copy field refs using old-to-new operation and step ID mappings
175
+ const oldFieldRefs = await erpTx.operationFieldRef.findMany({
176
+ where: {
177
+ operationId: {
178
+ in: [...oldToNewOpId.keys()],
179
+ },
180
+ },
181
+ });
182
+ for (const ref of oldFieldRefs) {
183
+ const newOpId = oldToNewOpId.get(ref.operationId);
184
+ const newStepId = oldToNewStepId.get(ref.sourceStepId);
185
+ if (newOpId && newStepId) {
186
+ await erpTx.operationFieldRef.create({
187
+ data: {
188
+ operationId: newOpId,
189
+ seqNo: ref.seqNo,
190
+ title: ref.title,
191
+ sourceStepId: newStepId,
192
+ createdById: userId,
193
+ },
194
+ });
195
+ }
196
+ }
197
+ }
198
+ return newRev;
199
+ });
200
+ }
201
+ export async function updateRevision(id, data, userId) {
202
+ return erpDb.orderRevision.update({
203
+ where: { id },
204
+ data: {
205
+ ...(data.description !== undefined
206
+ ? { description: data.description }
207
+ : {}),
208
+ ...(data.changeSummary !== undefined
209
+ ? { changeSummary: data.changeSummary }
210
+ : {}),
211
+ updatedById: userId,
212
+ },
213
+ include: includeRevisionRelations,
214
+ });
215
+ }
216
+ export async function deleteRevision(id) {
217
+ await erpDb.$transaction(async (erpTx) => {
218
+ // Delete child records bottom-up: step fields → steps → operations → revision
219
+ const operations = await erpTx.operation.findMany({
220
+ where: { orderRevId: id },
221
+ select: { id: true },
222
+ });
223
+ const opIds = operations.map((op) => op.id);
224
+ if (opIds.length > 0) {
225
+ // Delete field refs first (sourceStepId FK is Restrict, so must go before steps)
226
+ await erpTx.operationFieldRef.deleteMany({
227
+ where: { operationId: { in: opIds } },
228
+ });
229
+ const steps = await erpTx.step.findMany({
230
+ where: { operationId: { in: opIds } },
231
+ select: { id: true, fieldSetId: true },
232
+ });
233
+ const fieldSetIds = steps
234
+ .map((s) => s.fieldSetId)
235
+ .filter((id) => id !== null);
236
+ // Steps reference field_sets via FK, so delete steps first
237
+ await erpTx.step.deleteMany({
238
+ where: { operationId: { in: opIds } },
239
+ });
240
+ // Fields cascade-delete from field_sets
241
+ if (fieldSetIds.length > 0) {
242
+ await erpTx.fieldSet.deleteMany({
243
+ where: { id: { in: fieldSetIds } },
244
+ });
245
+ }
246
+ await erpTx.operation.deleteMany({
247
+ where: { orderRevId: id },
248
+ });
249
+ }
250
+ await erpTx.orderRevision.delete({ where: { id } });
251
+ });
252
+ }
253
+ export async function transitionStatus(id, action, fromStatus, toStatus, userId) {
254
+ return erpDb.$transaction(async (erpTx) => {
255
+ const updated = await erpTx.orderRevision.update({
256
+ where: { id },
257
+ data: { status: toStatus, updatedById: userId },
258
+ include: includeRevisionRelations,
259
+ });
260
+ await writeAuditEntry(erpTx, "OrderRevision", id, action, "status", fromStatus, toStatus, userId);
261
+ return updated;
262
+ });
263
+ }
264
+ //# sourceMappingURL=order-revision-service.js.map
@@ -0,0 +1,138 @@
1
+ import { type OrderRunPriority, type OrderRunStatus } from "@naisys/erp-shared";
2
+ import type { OrderRunModel } from "../generated/prisma/models/OrderRun.js";
3
+ export declare const includeRev: {
4
+ readonly orderRev: {
5
+ readonly select: {
6
+ readonly revNo: true;
7
+ };
8
+ };
9
+ readonly order: {
10
+ readonly select: {
11
+ readonly item: {
12
+ readonly select: {
13
+ readonly key: true;
14
+ };
15
+ };
16
+ };
17
+ };
18
+ readonly itemInstances: {
19
+ readonly select: {
20
+ readonly id: true;
21
+ readonly key: true;
22
+ };
23
+ readonly take: 1;
24
+ };
25
+ readonly createdBy: {
26
+ readonly select: {
27
+ readonly username: true;
28
+ };
29
+ };
30
+ readonly updatedBy: {
31
+ readonly select: {
32
+ readonly username: true;
33
+ };
34
+ };
35
+ };
36
+ export type OrderRunWithRev = OrderRunModel & {
37
+ orderRev: {
38
+ revNo: number;
39
+ };
40
+ order: {
41
+ item: {
42
+ key: string;
43
+ } | null;
44
+ };
45
+ itemInstances: {
46
+ id: number;
47
+ key: string;
48
+ }[];
49
+ createdBy: {
50
+ username: string;
51
+ };
52
+ updatedBy: {
53
+ username: string;
54
+ };
55
+ };
56
+ export declare function listOrderRuns(where: Record<string, unknown>, page: number, pageSize: number): Promise<{
57
+ items: OrderRunWithRev[];
58
+ total: number;
59
+ }>;
60
+ export declare function getOrderRun(id: number): Promise<OrderRunWithRev | null>;
61
+ export declare function findExisting(id: number, orderId: number): Promise<{
62
+ createdAt: Date;
63
+ id: number;
64
+ updatedAt: Date;
65
+ status: import("../generated/prisma/enums.js").OrderRunStatus;
66
+ priority: import("../generated/prisma/enums.js").OrderRunPriority;
67
+ dueAt: string | null;
68
+ releaseNote: string | null;
69
+ orderRevId: number;
70
+ createdById: number;
71
+ updatedById: number;
72
+ orderId: number;
73
+ runNo: number;
74
+ cost: number | null;
75
+ } | null>;
76
+ export declare function getOrderRunOpSummary(orderRunId: number): Promise<{
77
+ operation: {
78
+ title: string;
79
+ seqNo: number;
80
+ };
81
+ status: import("../generated/prisma/enums.js").OperationRunStatus;
82
+ }[]>;
83
+ export declare function validateStatusFor(action: string, currentStatus: string, allowedStatuses: string[]): string | null;
84
+ export declare function checkOpsComplete(orderRunId: number): Promise<string | null>;
85
+ export declare function sumOpRunCosts(orderRunId: number): Promise<number>;
86
+ export declare function createOrderRun(orderId: number, orderRevId: number, data: {
87
+ priority: OrderRunPriority;
88
+ dueAt?: string | null;
89
+ releaseNote?: string | null;
90
+ }, userId: number): Promise<OrderRunWithRev>;
91
+ export declare function updateOrderRun(id: number, data: {
92
+ priority?: OrderRunPriority;
93
+ releaseNote?: string | null;
94
+ dueAt?: string | null;
95
+ }, userId: number): Promise<OrderRunWithRev>;
96
+ export declare function deleteOrderRun(id: number): Promise<void>;
97
+ export declare function transitionStatus(id: number, action: string, fromStatus: OrderRunStatus, toStatus: OrderRunStatus, userId: number, extraData?: Record<string, unknown>): Promise<OrderRunWithRev>;
98
+ export declare function findOrderRevision(orderId: number, revNo: number): Promise<{
99
+ description: string;
100
+ createdAt: Date;
101
+ id: number;
102
+ updatedAt: Date;
103
+ status: import("../generated/prisma/enums.js").RevisionStatus;
104
+ changeSummary: string | null;
105
+ revNo: number;
106
+ createdById: number;
107
+ updatedById: number;
108
+ orderId: number;
109
+ } | null>;
110
+ export declare function findLatestApprovedRevision(orderId: number): Promise<{
111
+ description: string;
112
+ createdAt: Date;
113
+ id: number;
114
+ updatedAt: Date;
115
+ status: import("../generated/prisma/enums.js").RevisionStatus;
116
+ changeSummary: string | null;
117
+ revNo: number;
118
+ createdById: number;
119
+ updatedById: number;
120
+ orderId: number;
121
+ } | null>;
122
+ export declare function getReopenTarget(currentStatus: OrderRunStatus): OrderRunStatus;
123
+ export declare function completeOrderRun(orderRunId: number, orderId: number, data: {
124
+ instanceKey?: string;
125
+ quantity?: number | null;
126
+ fieldValues?: {
127
+ fieldId: number;
128
+ value: string;
129
+ setIndex?: number;
130
+ }[];
131
+ }, userId: number): Promise<{
132
+ run: OrderRunWithRev;
133
+ error?: undefined;
134
+ } | {
135
+ error: string;
136
+ run?: undefined;
137
+ }>;
138
+ //# sourceMappingURL=order-run-service.d.ts.map