@machinemetrics/mm-erp-sdk 0.1.9 → 0.2.0-beta.0
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/services/data-sync-service/configuration-manager.d.ts.map +1 -1
- package/dist/services/data-sync-service/configuration-manager.js +30 -30
- package/dist/services/data-sync-service/configuration-manager.js.map +1 -1
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +2 -1
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js.map +1 -1
- package/dist/services/data-sync-service/jobs/from-erp.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/from-erp.js +2 -1
- package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -1
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +2 -1
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js.map +1 -1
- package/dist/services/data-sync-service/jobs/run-migrations.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/run-migrations.js +2 -1
- package/dist/services/data-sync-service/jobs/run-migrations.js.map +1 -1
- package/dist/services/data-sync-service/jobs/to-erp.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/to-erp.js +2 -1
- package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -1
- package/dist/services/mm-api-service/mm-api-service.js +1 -1
- package/dist/services/mm-api-service/mm-api-service.js.map +1 -1
- package/dist/services/reporting-service/logger.d.ts.map +1 -1
- package/dist/services/reporting-service/logger.js +5 -1
- package/dist/services/reporting-service/logger.js.map +1 -1
- package/dist/types/erp-connector.d.ts +8 -1
- package/dist/types/erp-connector.d.ts.map +1 -1
- package/dist/types/flattened-work-order.d.ts +99 -0
- package/dist/types/flattened-work-order.d.ts.map +1 -0
- package/dist/types/flattened-work-order.js +2 -0
- package/dist/types/flattened-work-order.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/env.d.ts +8 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +58 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/erp-timezone-utils.d.ts +20 -0
- package/dist/utils/erp-timezone-utils.d.ts.map +1 -0
- package/dist/utils/erp-timezone-utils.js +75 -0
- package/dist/utils/erp-timezone-utils.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/local-data-store/jobs-shared-data.d.ts +2 -0
- package/dist/utils/local-data-store/jobs-shared-data.d.ts.map +1 -1
- package/dist/utils/local-data-store/jobs-shared-data.js +2 -0
- package/dist/utils/local-data-store/jobs-shared-data.js.map +1 -1
- package/dist/utils/mm-labor-ticket-helpers.d.ts +3 -4
- package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -1
- package/dist/utils/mm-labor-ticket-helpers.js +12 -7
- package/dist/utils/mm-labor-ticket-helpers.js.map +1 -1
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js +13 -4
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js.map +1 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +7 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.js +7 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.js.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +8 -2
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.js +27 -18
- package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +1 -1
- package/dist/utils/time-utils.d.ts.map +1 -1
- package/dist/utils/time-utils.js +7 -0
- package/dist/utils/time-utils.js.map +1 -1
- package/package.json +3 -1
- package/src/services/data-sync-service/configuration-manager.ts +50 -37
- package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +2 -1
- package/src/services/data-sync-service/jobs/from-erp.ts +2 -1
- package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +2 -1
- package/src/services/data-sync-service/jobs/run-migrations.ts +2 -1
- package/src/services/data-sync-service/jobs/to-erp.ts +2 -1
- package/src/services/mm-api-service/mm-api-service.ts +1 -1
- package/src/services/reporting-service/logger.ts +6 -1
- package/src/types/erp-connector.ts +8 -1
- package/src/types/flattened-work-order.ts +108 -0
- package/src/types/index.ts +8 -0
- package/src/utils/env.ts +75 -0
- package/src/utils/erp-timezone-utils.ts +99 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/local-data-store/jobs-shared-data.ts +2 -0
- package/src/utils/mm-labor-ticket-helpers.ts +11 -8
- package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +11 -6
- package/src/utils/standard-process-drivers/mm-entity-processor.ts +7 -1
- package/src/utils/standard-process-drivers/standard-process-drivers.ts +33 -19
- package/src/utils/time-utils.ts +11 -0
|
@@ -165,7 +165,12 @@ export class StandardProcessDrivers {
|
|
|
165
165
|
* parts, part operations, work orders, and work order operations, then process them in the correct order
|
|
166
166
|
* to maintain referential integrity.
|
|
167
167
|
*
|
|
168
|
-
*
|
|
168
|
+
* Timezone expectation: all datetime fields provided in `flattenedData` MUST already be expressed
|
|
169
|
+
* as ISO-8601 UTC strings (trailing `Z` or explicit offset). The SDK does not attempt to infer or
|
|
170
|
+
* convert local ERP timestamps on this path; it simply validates and forwards the values to MM.
|
|
171
|
+
* Connector implementations should convert ERP-local times to UTC before invoking this method.
|
|
172
|
+
*
|
|
173
|
+
* @param flattenedData Array of flattened rows containing both work order and operation data (see `FlattenedWorkOrderRow`)
|
|
169
174
|
* @param batchCacheManager The batch cache manager instance; pass in null if caching is not desired
|
|
170
175
|
*
|
|
171
176
|
* @returns Combined results from all entity processing with detailed logging information
|
|
@@ -176,6 +181,7 @@ export class StandardProcessDrivers {
|
|
|
176
181
|
if (!flattenedData || flattenedData.length === 0) {
|
|
177
182
|
throw new Error("No flattened work order data provided");
|
|
178
183
|
}
|
|
184
|
+
const toStringOrFallback = (value, fallback = "") => (value === undefined || value === null ? fallback : String(value));
|
|
179
185
|
// Process the flattened data - each row contains both work order and operation info
|
|
180
186
|
const uniqueParts = new Map();
|
|
181
187
|
const uniquePartOperations = new Map();
|
|
@@ -203,8 +209,8 @@ export class StandardProcessDrivers {
|
|
|
203
209
|
resourceId: row.resourceId, // → resourceId
|
|
204
210
|
cycleTimeMs: row.cycleTimeMs, // → cycleTimeMs
|
|
205
211
|
setupTimeMs: row.setupTimeMs, // → setupTimeMs
|
|
206
|
-
|
|
207
|
-
quantityPerPart: row.quantityPerPart
|
|
212
|
+
operationDescription: row.operationDescription, // → description
|
|
213
|
+
quantityPerPart: row.quantityPerPart ?? 1, // → quantityPerPart
|
|
208
214
|
});
|
|
209
215
|
}
|
|
210
216
|
// Extract unique work orders
|
|
@@ -251,25 +257,27 @@ export class StandardProcessDrivers {
|
|
|
251
257
|
});
|
|
252
258
|
}
|
|
253
259
|
// Transform all the data directly to MM entities
|
|
254
|
-
const parts = Array.from(uniqueParts.values()).map((item) => new MMSendPart(item.partNumber
|
|
255
|
-
item.partRevision
|
|
260
|
+
const parts = Array.from(uniqueParts.values()).map((item) => new MMSendPart(toStringOrFallback(item.partNumber), // partNumber
|
|
261
|
+
toStringOrFallback(item.partRevision), // partRevision
|
|
256
262
|
item.method || "Standard" // method
|
|
257
263
|
));
|
|
258
|
-
const partOperations = Array.from(uniquePartOperations.values()).map((item) => new MMSendPartOperation(item.partNumber
|
|
259
|
-
item.partRevision
|
|
264
|
+
const partOperations = Array.from(uniquePartOperations.values()).map((item) => new MMSendPartOperation(toStringOrFallback(item.partNumber), // partNumber
|
|
265
|
+
toStringOrFallback(item.partRevision), // partRevision
|
|
260
266
|
item.method || "Standard", // method
|
|
261
267
|
item.sequenceNumber?.toString() || "", // sequenceNumber
|
|
262
268
|
item.resourceId?.toString() || "", // resourceId
|
|
263
269
|
item.cycleTimeMs || 0, // cycleTimeMs
|
|
264
270
|
item.setupTimeMs || 0, // setupTimeMs
|
|
265
|
-
item.
|
|
271
|
+
item.operationDescription || "", // description
|
|
266
272
|
item.quantityPerPart || 1 // quantityPerPart
|
|
267
273
|
));
|
|
268
274
|
const transformedWorkOrders = Array.from(uniqueWorkOrders.values()).map((item) => new MMSendWorkOrder(item.workOrderId?.toString() || "", // workOrderId
|
|
269
|
-
item.lot
|
|
270
|
-
item.split
|
|
271
|
-
item.sub
|
|
275
|
+
toStringOrFallback(item.lot), // lot
|
|
276
|
+
toStringOrFallback(item.split), // split
|
|
277
|
+
toStringOrFallback(item.sub), // sub
|
|
272
278
|
item.status || "Open", // status
|
|
279
|
+
// Datetimes are assumed to already be UTC (or include an explicit offset).
|
|
280
|
+
// We reserialize via Date solely to validate the ISO format before sending to MM.
|
|
273
281
|
item.dueDate ? new Date(item.dueDate).toISOString() : null, // dueDate
|
|
274
282
|
item.description || "", // description
|
|
275
283
|
item.scheduledStartDate
|
|
@@ -280,19 +288,20 @@ export class StandardProcessDrivers {
|
|
|
280
288
|
: null, // scheduledEndDate
|
|
281
289
|
item.closedDate ? new Date(item.closedDate).toISOString() : null, // closedDate
|
|
282
290
|
item.quantityRequired || 0, // quantityRequired
|
|
283
|
-
item.partNumber
|
|
284
|
-
item.partRevision
|
|
291
|
+
toStringOrFallback(item.partNumber), // partNumber
|
|
292
|
+
toStringOrFallback(item.partRevision), // partRevision
|
|
285
293
|
item.method || "Standard" // method
|
|
286
294
|
));
|
|
287
295
|
const transformedWorkOrderOperations = workOrderOperations.map((item) => new MMSendWorkOrderOperation(item.workOrderId?.toString() || "", // workOrderId
|
|
288
|
-
item.lot
|
|
289
|
-
item.split
|
|
290
|
-
item.sub
|
|
296
|
+
toStringOrFallback(item.lot), // lot
|
|
297
|
+
toStringOrFallback(item.split), // split
|
|
298
|
+
toStringOrFallback(item.sub), // sub
|
|
291
299
|
item.sequenceNumber?.toString() || "", // sequenceNumber
|
|
292
300
|
item.resourceId?.toString() || "", // resourceId
|
|
293
301
|
item.startQuantity || 0, // startQuantity
|
|
294
302
|
item.finishQuantity || 0, // finishQuantity
|
|
295
303
|
item.expectedRejectRate || 0, // expectedRejectRate
|
|
304
|
+
// Same UTC expectation as above; reserialize to ensure valid ISO.
|
|
296
305
|
item.scheduledStartDate
|
|
297
306
|
? new Date(item.scheduledStartDate).toISOString()
|
|
298
307
|
: null, // scheduledStartDate
|
|
@@ -302,8 +311,8 @@ export class StandardProcessDrivers {
|
|
|
302
311
|
item.closedDate ? new Date(item.closedDate).toISOString() : null, // closedDate
|
|
303
312
|
item.cycleTimeMs || 0, // cycleTimeMs
|
|
304
313
|
item.setupTimeMs || 0, // setupTimeMs
|
|
305
|
-
parseFloat(item.productionburdenRateHourly
|
|
306
|
-
parseFloat(item.setupburdenRatehourly
|
|
314
|
+
parseFloat(toStringOrFallback(item.productionburdenRateHourly, "0")), // productionburdenRateHourly
|
|
315
|
+
parseFloat(toStringOrFallback(item.setupburdenRatehourly, "0")), // setupburdenRatehourly
|
|
307
316
|
item.operationType || "Production", // operationType
|
|
308
317
|
item.quantityPerPart || 1, // quantityPerPart
|
|
309
318
|
item.status || "Open" // status
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-process-drivers.js","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/standard-process-drivers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"standard-process-drivers.js","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/standard-process-drivers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-utils.d.ts","sourceRoot":"","sources":["../../src/utils/time-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"time-utils.d.ts","sourceRoot":"","sources":["../../src/utils/time-utils.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,cAAc,EAAE,MAAM,GACrB,MAAM,CA2BR;AAED,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,GAAG,IAAI,kBASvD,CAAC;AAEF;;;;;;GAMG;AAEH,eAAO,MAAM,4BAA4B,GACvC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,QAAQ,MAAM,EAAE,EAChB,gBAAgB,MAAM,KACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAcvB,CAAC;AAEF,UAAU,oBAAoB;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,GACtC,SAAQ,oBAGP,KACA,OAAO,CAAC,IAAI,CAqCd,CAAC"}
|
package/dist/utils/time-utils.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
1
2
|
import logger from "../services/reporting-service/logger.js";
|
|
2
3
|
import { setTimezoneOffsetInCache, setTimezoneNameInCache, } from "./local-data-store/jobs-shared-data.js";
|
|
3
4
|
import { convertToLocalTime, formatDateWithTZOffset, getTimezoneOffset, } from "./timezone.js";
|
|
@@ -79,6 +80,12 @@ export const getTimezoneOffsetAndPersist = async (params = {
|
|
|
79
80
|
const { offset, timezone } = await getTimezoneOffset();
|
|
80
81
|
logger.info(`Timezone offset: ${offset} hours, timezone: ${timezone}`);
|
|
81
82
|
setTimezoneOffsetInCache(offset);
|
|
83
|
+
const now = DateTime.now().setZone(timezone);
|
|
84
|
+
if (!now.isValid) {
|
|
85
|
+
throw new Error(`Invalid timezone name from Company properties: "${timezone}". ` +
|
|
86
|
+
`Must be a valid IANA timezone name (e.g., "America/Chicago"). ` +
|
|
87
|
+
`See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones`);
|
|
88
|
+
}
|
|
82
89
|
setTimezoneNameInCache(timezone);
|
|
83
90
|
success = true;
|
|
84
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-utils.js","sourceRoot":"","sources":["../../src/utils/time-utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"time-utils.js","sourceRoot":"","sources":["../../src/utils/time-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@machinemetrics/mm-erp-sdk",
|
|
3
3
|
"description": "A library for syncing data between MachineMetrics and ERP systems",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.2.0-beta.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "machinemetrics",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"json-stable-stringify": "^1.3.0",
|
|
28
28
|
"knex": "^3.1.0",
|
|
29
29
|
"lodash": "^4.17.21",
|
|
30
|
+
"luxon": "^3.7.2",
|
|
30
31
|
"mssql": "^11.0.1",
|
|
31
32
|
"winston": "^3.14.0",
|
|
32
33
|
"winston-daily-rotate-file": "^5.0.0",
|
|
@@ -39,6 +40,7 @@
|
|
|
39
40
|
"devDependencies": {
|
|
40
41
|
"@types/json-stable-stringify": "^1.1.0",
|
|
41
42
|
"@types/lodash": "^4.17.10",
|
|
43
|
+
"@types/luxon": "^3.7.1",
|
|
42
44
|
"@types/mssql": "^9.1.6",
|
|
43
45
|
"@types/node": "^20.0.0",
|
|
44
46
|
"@types/xxhashjs": "^0.2.4",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "dotenv/config";
|
|
2
2
|
import { configureLogger } from "../reporting-service/logger.js";
|
|
3
3
|
import { SQLServerConfiguration } from "../sql-server-erp-service/configuration.js";
|
|
4
|
+
import { getEnvBoolean, getEnvNumber, getEnvString } from "../../utils/env.js";
|
|
4
5
|
|
|
5
6
|
export class CoreConfiguration {
|
|
6
7
|
private static instance: CoreConfiguration;
|
|
@@ -29,58 +30,66 @@ export class CoreConfiguration {
|
|
|
29
30
|
public readonly cacheExpirationCheckInterval: string;
|
|
30
31
|
|
|
31
32
|
private constructor() {
|
|
32
|
-
this.logLevel =
|
|
33
|
-
this.erpSystem =
|
|
34
|
-
this.nodeEnv =
|
|
33
|
+
this.logLevel = getEnvString("LOG_LEVEL", "info");
|
|
34
|
+
this.erpSystem = getEnvString("ERP_SYSTEM", "template");
|
|
35
|
+
this.nodeEnv = getEnvString("NODE_ENV", "development");
|
|
35
36
|
|
|
36
37
|
//#region MM API (aka "Mapping") Service
|
|
37
38
|
/**
|
|
38
39
|
* MM ERP Service REST API URL (typically https://erp-api.svc.machinemetrics.com)
|
|
39
40
|
*/
|
|
40
|
-
this.mmERPSvcApiBaseUrl =
|
|
41
|
+
this.mmERPSvcApiBaseUrl = getEnvString("MM_MAPPING_SERVICE_URL", "");
|
|
41
42
|
|
|
42
43
|
/**
|
|
43
44
|
* MM REST API URL (typically https://api.machinemetrics.com)
|
|
44
45
|
*/
|
|
45
46
|
console.log("=== CONFIG DEBUG ===");
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
const mmAuthSvcUrl = getEnvString("MM_MAPPING_AUTH_SERVICE_URL", "");
|
|
48
|
+
console.log("MM_MAPPING_AUTH_SERVICE_URL env var:", mmAuthSvcUrl);
|
|
49
|
+
this.mmApiBaseUrl = mmAuthSvcUrl;
|
|
48
50
|
console.log("mmApiBaseUrl set to:", this.mmApiBaseUrl);
|
|
49
51
|
console.log("=== END CONFIG DEBUG ===");
|
|
50
52
|
|
|
51
53
|
/**
|
|
52
54
|
* Company Auth Token
|
|
53
55
|
*/
|
|
54
|
-
this.mmApiAuthToken =
|
|
56
|
+
this.mmApiAuthToken = getEnvString("MM_MAPPING_SERVICE_TOKEN", "");
|
|
55
57
|
|
|
56
58
|
/**
|
|
57
59
|
* Number of retry attempts for MM API calls
|
|
58
60
|
*/
|
|
59
|
-
this.mmApiRetryAttempts =
|
|
61
|
+
this.mmApiRetryAttempts = getEnvNumber("RETRY_ATTEMPTS", 0);
|
|
60
62
|
//#endregion MM API (aka "Mapping") Service
|
|
61
63
|
|
|
62
64
|
/**
|
|
63
65
|
* Default pagination limit for ERP API
|
|
64
66
|
*/
|
|
65
|
-
this.erpApiPagingLimit =
|
|
67
|
+
this.erpApiPagingLimit = getEnvNumber("ERP_PAGINATION_LIMIT", 0);
|
|
66
68
|
//#endregion ERP API Service
|
|
67
69
|
|
|
68
70
|
/**
|
|
69
71
|
* For how to define the intervals, see Bree's documentation: https://github.com/breejs/bree
|
|
70
72
|
*/
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.
|
|
77
|
-
|
|
73
|
+
const pollInterval = getEnvString("POLL_INTERVAL", "");
|
|
74
|
+
this.fromErpInterval = getEnvString(
|
|
75
|
+
"FROM_ERP_INTERVAL",
|
|
76
|
+
pollInterval || "5 min"
|
|
77
|
+
);
|
|
78
|
+
this.toErpInterval = getEnvString("TO_ERP_INTERVAL", "5 min");
|
|
79
|
+
this.retryLaborTicketsInterval = getEnvString(
|
|
80
|
+
"RETRY_LABOR_TICKETS_INTERVAL",
|
|
81
|
+
"30 min"
|
|
82
|
+
);
|
|
83
|
+
this.cacheExpirationCheckInterval = getEnvString(
|
|
84
|
+
"CACHE_EXPIRATION_CHECK_INTERVAL",
|
|
85
|
+
"5 min"
|
|
86
|
+
);
|
|
78
87
|
|
|
79
88
|
/**
|
|
80
89
|
* Cache TTL (in seconds)
|
|
81
90
|
*/
|
|
82
91
|
const cacheTTLDef = 7 * 24 * 60 * 60; // 7 days
|
|
83
|
-
this.cacheTTL =
|
|
92
|
+
this.cacheTTL = getEnvNumber("CACHE_TTL", cacheTTLDef);
|
|
84
93
|
|
|
85
94
|
// Configure the logger with our settings
|
|
86
95
|
configureLogger(this.logLevel, this.nodeEnv);
|
|
@@ -132,20 +141,24 @@ export class CoreConfiguration {
|
|
|
132
141
|
*/
|
|
133
142
|
export const getSQLServerConfiguration = (): SQLServerConfiguration => {
|
|
134
143
|
return {
|
|
135
|
-
username:
|
|
136
|
-
password:
|
|
137
|
-
database:
|
|
138
|
-
host:
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
144
|
+
username: getEnvString("ERP_SQLSERVER_USERNAME", ""),
|
|
145
|
+
password: getEnvString("ERP_SQLSERVER_PASSWORD", ""),
|
|
146
|
+
database: getEnvString("ERP_SQLSERVER_DATABASE", ""),
|
|
147
|
+
host: getEnvString(
|
|
148
|
+
"ERP_SQLSERVER_HOST",
|
|
149
|
+
getEnvString("ERP_SQLSERVER_SERVER", "")
|
|
150
|
+
),
|
|
151
|
+
port: getEnvString("ERP_SQLSERVER_PORT", "1433"),
|
|
152
|
+
connectionTimeout: getEnvString("ERP_SQLSERVER_CONNECTION_TIMEOUT", "30000"),
|
|
153
|
+
requestTimeout: getEnvString("ERP_SQLSERVER_REQUEST_TIMEOUT", "60000"),
|
|
154
|
+
poolMax: getEnvString("ERP_SQLSERVER_MAX", "10"),
|
|
155
|
+
poolMin: getEnvString("ERP_SQLSERVER_MIN", "0"),
|
|
156
|
+
idleTimeoutMillis: getEnvString(
|
|
157
|
+
"ERP_SQLSERVER_IDLE_TIMEOUT_MMILLIS",
|
|
158
|
+
"30000"
|
|
159
|
+
),
|
|
160
|
+
encrypt: getEnvBoolean("ERP_SQLSERVER_ENCRYPT", false),
|
|
161
|
+
trustServer: getEnvBoolean("ERP_SQLSERVER_TRUST_SERVER", false),
|
|
149
162
|
};
|
|
150
163
|
};
|
|
151
164
|
|
|
@@ -171,11 +184,11 @@ export class ErpApiConnectionParams {
|
|
|
171
184
|
*/
|
|
172
185
|
export const getErpApiConnectionParams = (): ErpApiConnectionParams => {
|
|
173
186
|
return new ErpApiConnectionParams(
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
187
|
+
getEnvString("ERP_API_URL", ""),
|
|
188
|
+
getEnvString("ERP_API_CLIENT_ID", ""),
|
|
189
|
+
getEnvString("ERP_API_CLIENT_SECRET", ""),
|
|
190
|
+
getEnvString("ERP_API_ORGANIZATION_ID", ""),
|
|
191
|
+
getEnvString("ERP_AUTH_BASE_URL", ""),
|
|
192
|
+
getEnvNumber("ERP_API_RETRY_ATTEMPTS", 3)
|
|
180
193
|
);
|
|
181
194
|
};
|
|
@@ -2,9 +2,10 @@ import "dotenv/config";
|
|
|
2
2
|
import { HashedCacheManager } from "../../caching-service/hashed-cache-manager.js";
|
|
3
3
|
import { SQLiteCoordinator } from "../../sqlite-service/index.js";
|
|
4
4
|
import logger from "../../../services/reporting-service/logger.js";
|
|
5
|
+
import { getEnvString } from "../../../utils/env.js";
|
|
5
6
|
|
|
6
7
|
// Configure the logger with the correct log level
|
|
7
|
-
logger.level =
|
|
8
|
+
logger.level = getEnvString("LOG_LEVEL", "info");
|
|
8
9
|
|
|
9
10
|
const main = async () => {
|
|
10
11
|
const cacheManager = new HashedCacheManager();
|
|
@@ -3,9 +3,10 @@ import "dotenv/config";
|
|
|
3
3
|
import logger from "../../../services/reporting-service/logger.js";
|
|
4
4
|
import { SQLiteCoordinator } from "../../sqlite-service/index.js";
|
|
5
5
|
import { createConnectorFromPath } from "../../../utils/connector-factory.js";
|
|
6
|
+
import { getEnvString } from "../../../utils/env.js";
|
|
6
7
|
|
|
7
8
|
// Configure the logger with the correct log level
|
|
8
|
-
logger.level =
|
|
9
|
+
logger.level = getEnvString("LOG_LEVEL", "info");
|
|
9
10
|
|
|
10
11
|
const main = async () => {
|
|
11
12
|
try {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import "dotenv/config";
|
|
2
2
|
|
|
3
3
|
import logger from "../../../services/reporting-service/logger.js";
|
|
4
|
+
import { getEnvString } from "../../../utils/env.js";
|
|
4
5
|
import { createConnectorFromPath } from "../../../utils/connector-factory.js";
|
|
5
6
|
|
|
6
7
|
// Configure the logger with the correct log level
|
|
7
|
-
logger.level =
|
|
8
|
+
logger.level = getEnvString("LOG_LEVEL", "info");
|
|
8
9
|
|
|
9
10
|
const main = async () => {
|
|
10
11
|
try {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import knex, { Knex } from "knex";
|
|
2
2
|
import logger from "../../reporting-service/logger.js";
|
|
3
3
|
import config from "../../../knexfile.js";
|
|
4
|
+
import { getEnvString } from "../../../utils/env.js";
|
|
4
5
|
|
|
5
6
|
// Configure the logger with the correct log level
|
|
6
|
-
logger.level =
|
|
7
|
+
logger.level = getEnvString("LOG_LEVEL", "info");
|
|
7
8
|
|
|
8
9
|
// MLW TODO Consider the location of knexfile
|
|
9
10
|
const db: Knex = knex(config.local);
|
|
@@ -2,9 +2,10 @@ import "dotenv/config";
|
|
|
2
2
|
|
|
3
3
|
import logger from "../../reporting-service/logger.js";
|
|
4
4
|
import { createConnectorFromPath } from "../../../utils/connector-factory.js";
|
|
5
|
+
import { getEnvString } from "../../../utils/env.js";
|
|
5
6
|
|
|
6
7
|
// Configure the logger with the correct log level
|
|
7
|
-
logger.level =
|
|
8
|
+
logger.level = getEnvString("LOG_LEVEL", "info");
|
|
8
9
|
|
|
9
10
|
const main = async () => {
|
|
10
11
|
try {
|
|
@@ -551,7 +551,7 @@ export class MMApiClient {
|
|
|
551
551
|
logger.info("saveCheckpoint:", { saveCheckpoint });
|
|
552
552
|
} else {
|
|
553
553
|
logger.info("Existing checkpoint found:", {
|
|
554
|
-
|
|
554
|
+
checkpointTimestamp: checkpointResponse.timestamp,
|
|
555
555
|
});
|
|
556
556
|
}
|
|
557
557
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { createLogger, format, transports } from "winston";
|
|
2
2
|
import DailyRotateFile from "winston-daily-rotate-file";
|
|
3
3
|
import path from "path";
|
|
4
|
+
import { getEnvString } from "../../utils/env.js"; // Utility function to get environment variables with default values and validation
|
|
4
5
|
|
|
5
6
|
const logDirectory = "logs";
|
|
6
|
-
const initialLogLevel =
|
|
7
|
+
const initialLogLevel = getEnvString("LOG_LEVEL", "info");
|
|
8
|
+
const initialNodeEnv = getEnvString("NODE_ENV", "development");
|
|
7
9
|
|
|
8
10
|
const LOGGER_ERROR_PREFIX = "[mm-erp-sdk logger]";
|
|
9
11
|
|
|
@@ -240,6 +242,9 @@ export const configureLogger = (logLevel: string, nodeEnv: string) => {
|
|
|
240
242
|
logger.level = logLevel;
|
|
241
243
|
};
|
|
242
244
|
|
|
245
|
+
// Ensure file logging is configured as soon as the module loads
|
|
246
|
+
configureLogger(initialLogLevel, initialNodeEnv);
|
|
247
|
+
|
|
243
248
|
// Add fatal method for Graceful compatibility
|
|
244
249
|
(logger as any).fatal = (err: any, meta?: any) => logger.error(err, meta);
|
|
245
250
|
|
|
@@ -14,6 +14,10 @@ export interface IERPConnector {
|
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Sync data from the ERP system to MM.
|
|
17
|
+
* Timezone expectations:
|
|
18
|
+
* - When sending ERP data to MachineMetrics (e.g., via StandardProcessDrivers or MMEntityProcessor),
|
|
19
|
+
* connectors MUST convert all datetime fields to ISO-8601 UTC strings (trailing `Z` or explicit offset)
|
|
20
|
+
* before invoking SDK helpers. The SDK validates/forwards these values but does not apply timezone shifts.
|
|
17
21
|
*/
|
|
18
22
|
syncFromERP(): Promise<void>;
|
|
19
23
|
syncFromERPCompleted(): Promise<void>;
|
|
@@ -31,13 +35,16 @@ export interface IERPConnector {
|
|
|
31
35
|
retryFailedLaborTicketsCompleted(): Promise<void>;
|
|
32
36
|
|
|
33
37
|
/**
|
|
34
|
-
* Start the connector. Typically a connector should delegate control to the data-sync-service.
|
|
38
|
+
* Start the connector. Typically a connector should delegate control to the data-sync-service via runDataSyncService().
|
|
35
39
|
*/
|
|
36
40
|
startUp(): Promise<void>;
|
|
37
41
|
}
|
|
38
42
|
|
|
39
43
|
/**
|
|
40
44
|
* Interface for standard process methods that call ERP connectors back to create or update labor tickets.
|
|
45
|
+
*
|
|
46
|
+
* Timestamp fields on `MMReceiveLaborTicket` objects have already been converted by the SDKfrom MM's
|
|
47
|
+
* UTC API responses into the ERP's local timezone, based on the company's timezone setting.
|
|
41
48
|
*/
|
|
42
49
|
export interface IERPLaborTicketHandler {
|
|
43
50
|
createLaborTicketInERP(
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical representation of a flattened work order row that contains the
|
|
3
|
+
* information needed to build MM work order entities plus their operations.
|
|
4
|
+
*
|
|
5
|
+
* All properties are optional to maintain backwards compatibility with
|
|
6
|
+
* existing connectors.
|
|
7
|
+
*/
|
|
8
|
+
export interface FlattenedWorkOrderPartFields {
|
|
9
|
+
/** ERP part number (required for Parts when present). */
|
|
10
|
+
partNumber?: string | number;
|
|
11
|
+
/** ERP part revision or version string. */
|
|
12
|
+
partRevision?: string | number;
|
|
13
|
+
/** Routing/method identifier (defaults to "Standard" when omitted). */
|
|
14
|
+
method?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface FlattenedWorkOrderPartOperationFields {
|
|
18
|
+
/** Sequence number of the operation on the routing. */
|
|
19
|
+
sequenceNumber?: string | number;
|
|
20
|
+
/** Resource or machine identifier responsible for the operation. */
|
|
21
|
+
resourceId?: string | number;
|
|
22
|
+
/** Operation cycle time expressed in milliseconds. */
|
|
23
|
+
cycleTimeMs?: number;
|
|
24
|
+
/** Operation setup time expressed in milliseconds. */
|
|
25
|
+
setupTimeMs?: number;
|
|
26
|
+
/** Human-readable description of the operation. */
|
|
27
|
+
operationDescription?: string;
|
|
28
|
+
/** Quantity of parts operated on per cycle. */
|
|
29
|
+
quantityPerPart?: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface FlattenedWorkOrderFields
|
|
33
|
+
extends FlattenedWorkOrderPartFields {
|
|
34
|
+
/** Unique identifier for the work order in the ERP. */
|
|
35
|
+
workOrderId?: string | number;
|
|
36
|
+
/** Lot number (if the ERP distinguishes lots). */
|
|
37
|
+
lot?: string | number;
|
|
38
|
+
/** Split identifier (if the ERP splits orders). */
|
|
39
|
+
split?: string | number;
|
|
40
|
+
/** Sub identifier (for multi-level orders). */
|
|
41
|
+
sub?: string | number;
|
|
42
|
+
/** Work order status (e.g., Open, Closed, Released). */
|
|
43
|
+
status?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Due date expressed as an ISO-8601 UTC string (trailing `Z` or explicit offset).
|
|
46
|
+
* The SDK validates but does not shift timezones.
|
|
47
|
+
*/
|
|
48
|
+
dueDate?: string;
|
|
49
|
+
/** Free-form description of the work order. */
|
|
50
|
+
description?: string;
|
|
51
|
+
/** Scheduled start datetime in ISO-8601 UTC form. */
|
|
52
|
+
scheduledStartDate?: string;
|
|
53
|
+
/** Scheduled end datetime in ISO-8601 UTC form. */
|
|
54
|
+
scheduledEndDate?: string;
|
|
55
|
+
/** Closed datetime in ISO-8601 UTC form. */
|
|
56
|
+
closedDate?: string;
|
|
57
|
+
/** Quantity required by the work order. */
|
|
58
|
+
quantityRequired?: number;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface FlattenedWorkOrderOperationFields {
|
|
62
|
+
/** Work order identifier (repeated for each operation). */
|
|
63
|
+
workOrderId?: string | number;
|
|
64
|
+
/** Lot identifier for the operation row. */
|
|
65
|
+
lot?: string | number;
|
|
66
|
+
/** Split identifier for the operation row. */
|
|
67
|
+
split?: string | number;
|
|
68
|
+
/** Sub identifier for the operation row. */
|
|
69
|
+
sub?: string | number;
|
|
70
|
+
/** Sequence number for the specific operation. */
|
|
71
|
+
sequenceNumber?: string | number;
|
|
72
|
+
/** Resource or machine identifier for the operation. */
|
|
73
|
+
resourceId?: string | number;
|
|
74
|
+
/** Quantity started on the operation. */
|
|
75
|
+
startQuantity?: number;
|
|
76
|
+
/** Quantity finished on the operation. */
|
|
77
|
+
finishQuantity?: number;
|
|
78
|
+
/** Expected reject percentage (0-1). */
|
|
79
|
+
expectedRejectRate?: number;
|
|
80
|
+
/** Scheduled start datetime (ISO-8601 UTC). */
|
|
81
|
+
opScheduledStartDate?: string;
|
|
82
|
+
/** Scheduled finish datetime (ISO-8601 UTC). */
|
|
83
|
+
opScheduledFinishDate?: string;
|
|
84
|
+
/** Closed datetime for the operation (ISO-8601 UTC). */
|
|
85
|
+
opClosedDate?: string;
|
|
86
|
+
/** Production burden rate per hour. */
|
|
87
|
+
productionburdenRateHourly?: number | string;
|
|
88
|
+
/** Setup burden rate per hour. */
|
|
89
|
+
setupburdenRatehourly?: number | string;
|
|
90
|
+
/** Operation type (Production, Setup, etc.). */
|
|
91
|
+
operationType?: string;
|
|
92
|
+
/** Quantity per part for the operation. */
|
|
93
|
+
quantityPerPart?: number;
|
|
94
|
+
/** Operation status (defaults to work-order status when omitted). */
|
|
95
|
+
opStatus?: string;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export type FlattenedWorkOrderRowBase =
|
|
99
|
+
FlattenedWorkOrderPartFields &
|
|
100
|
+
FlattenedWorkOrderPartOperationFields &
|
|
101
|
+
FlattenedWorkOrderFields &
|
|
102
|
+
FlattenedWorkOrderOperationFields;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Canonical flattened row that callers pass into
|
|
106
|
+
* `StandardProcessDrivers.syncWorkOrderBatchFromFlattened`.
|
|
107
|
+
*/
|
|
108
|
+
export type FlattenedWorkOrderRow = FlattenedWorkOrderRowBase;
|
package/src/types/index.ts
CHANGED
|
@@ -10,3 +10,11 @@ export type {
|
|
|
10
10
|
ERPResponse,
|
|
11
11
|
ERPObject,
|
|
12
12
|
} from "./erp-types.js";
|
|
13
|
+
export type {
|
|
14
|
+
FlattenedWorkOrderRow,
|
|
15
|
+
FlattenedWorkOrderRowBase,
|
|
16
|
+
FlattenedWorkOrderPartFields,
|
|
17
|
+
FlattenedWorkOrderPartOperationFields,
|
|
18
|
+
FlattenedWorkOrderFields,
|
|
19
|
+
FlattenedWorkOrderOperationFields,
|
|
20
|
+
} from "./flattened-work-order.js";
|