@machinemetrics/mm-erp-sdk 0.9.4 → 0.9.5
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/README.md +54 -43
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/services/mm-api-service/index.d.ts +3 -3
- package/dist/services/mm-api-service/index.d.ts.map +1 -1
- package/dist/services/mm-api-service/index.js +1 -1
- package/dist/services/mm-api-service/index.js.map +1 -1
- package/dist/services/mm-api-service/mes-machine-settings.d.ts +46 -0
- package/dist/services/mm-api-service/mes-machine-settings.d.ts.map +1 -0
- package/dist/services/mm-api-service/mes-machine-settings.js +124 -0
- package/dist/services/mm-api-service/mes-machine-settings.js.map +1 -0
- package/dist/services/mm-api-service/mm-api-service.d.ts +28 -13
- package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -1
- package/dist/services/mm-api-service/mm-api-service.js +43 -47
- package/dist/services/mm-api-service/mm-api-service.js.map +1 -1
- package/dist/services/mm-api-service/types/mm-response-interfaces.d.ts +4 -16
- package/dist/services/mm-api-service/types/mm-response-interfaces.d.ts.map +1 -1
- package/dist/services/mm-api-service/types/mm-response-interfaces.js.map +1 -1
- package/dist/services/mm-api-service/types/receive-types.d.ts +19 -0
- package/dist/services/mm-api-service/types/receive-types.d.ts.map +1 -1
- package/dist/services/mm-api-service/types/receive-types.js +22 -2
- package/dist/services/mm-api-service/types/receive-types.js.map +1 -1
- package/dist/types/erp-connector.d.ts +8 -2
- package/dist/types/erp-connector.d.ts.map +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/labor-import-from-erp.d.ts +68 -0
- package/dist/utils/labor-import-from-erp.d.ts.map +1 -0
- package/dist/utils/labor-import-from-erp.js +194 -0
- package/dist/utils/labor-import-from-erp.js.map +1 -0
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts +4 -2
- 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 +17 -15
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js.map +1 -1
- package/dist/utils/standard-process-drivers/labor-ticket-normalization.d.ts +6 -0
- package/dist/utils/standard-process-drivers/labor-ticket-normalization.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/labor-ticket-normalization.js +12 -0
- package/dist/utils/standard-process-drivers/labor-ticket-normalization.js.map +1 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +11 -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 +42 -4
- package/dist/utils/standard-process-drivers/mm-entity-processor.js.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +22 -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 +84 -0
- package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +1 -1
- package/dist/utils/standard-process-drivers/timesheet-erp-synchronizer.d.ts +12 -0
- package/dist/utils/standard-process-drivers/timesheet-erp-synchronizer.d.ts.map +1 -0
- package/dist/utils/standard-process-drivers/timesheet-erp-synchronizer.js +79 -0
- package/dist/utils/standard-process-drivers/timesheet-erp-synchronizer.js.map +1 -0
- package/package.json +9 -3
- package/src/index.ts +22 -1
- package/src/services/mm-api-service/index.ts +5 -3
- package/src/services/mm-api-service/mes-machine-settings.test.ts +174 -0
- package/src/services/mm-api-service/mes-machine-settings.ts +169 -0
- package/src/services/mm-api-service/mm-api-service.ts +58 -60
- package/src/services/mm-api-service/types/mm-response-interfaces.ts +4 -17
- package/src/services/mm-api-service/types/receive-types.ts +22 -3
- package/src/types/erp-connector.ts +12 -2
- package/src/utils/index.ts +19 -0
- package/src/utils/labor-import-from-erp.test.ts +116 -0
- package/src/utils/labor-import-from-erp.ts +310 -0
- package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +20 -14
- package/src/utils/standard-process-drivers/labor-ticket-normalization.ts +15 -0
- package/src/utils/standard-process-drivers/mm-entity-processor.ts +61 -8
- package/src/utils/standard-process-drivers/standard-process-drivers.ts +134 -1
- package/src/utils/standard-process-drivers/timesheet-erp-synchronizer.ts +102 -0
- package/dist/utils/resource-group.d.ts +0 -11
- package/dist/utils/resource-group.d.ts.map +0 -1
- package/dist/utils/resource-group.js +0 -71
- package/dist/utils/resource-group.js.map +0 -1
- package/src/utils/resource-group.ts +0 -105
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ERPObjType } from "../../types/erp-types.js";
|
|
2
|
-
import { IERPLaborTicketHandler } from "../../types/erp-connector.js";
|
|
2
|
+
import { IERPLaborTicketHandler, IERPTimesheetHandler } from "../../types/erp-connector.js";
|
|
3
3
|
import type { FlattenedWorkOrderRow } from "../../types/flattened-work-order.js";
|
|
4
4
|
import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager.js";
|
|
5
|
-
import { IToRESTApiObject, MMSendWorkOrderBatch } from "../../services/mm-api-service/index.js";
|
|
5
|
+
import { IToRESTApiObject, MMSendWorkOrderBatch, MMSendLaborTicket } from "../../services/mm-api-service/index.js";
|
|
6
|
+
import { type FilterLaborTicketsForMmImportOptions, type FilterLaborTicketsForMmImportResult } from "../labor-import-from-erp.js";
|
|
6
7
|
/**
|
|
7
8
|
* The result of writing entities to the MachineMetrics API on complete success.
|
|
8
9
|
*/
|
|
@@ -53,6 +54,11 @@ export declare class StandardProcessDrivers {
|
|
|
53
54
|
static syncLaborTicketsToERP(connectorType: string, connector: IERPLaborTicketHandler, options?: {
|
|
54
55
|
onlyClosed?: boolean;
|
|
55
56
|
}): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Synchronizes timesheet rows (employee clock in/out) from MachineMetrics to an ERP system.
|
|
59
|
+
* Run after {@link syncLaborTicketsToERP} in the same job so labor is written/closed before clock-out.
|
|
60
|
+
*/
|
|
61
|
+
static syncTimesheetsToERP(connectorType: string, handler: IERPTimesheetHandler): Promise<void>;
|
|
56
62
|
/**
|
|
57
63
|
* Retries labor tickets that have failed to be created or updated in the ERP during the sync:
|
|
58
64
|
*
|
|
@@ -61,6 +67,20 @@ export declare class StandardProcessDrivers {
|
|
|
61
67
|
* which are then deleted from the list of failed labor ticket ids.
|
|
62
68
|
*/
|
|
63
69
|
static retryFailedLaborTickets(connectorType: string, connector: IERPLaborTicketHandler): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Filters ERP-mapped labor tickets for MM FK/import rules, then writes them via {@link writeEntitiesToMM}.
|
|
72
|
+
*/
|
|
73
|
+
static writeLaborTicketsToMmFromErpImport(tickets: MMSendLaborTicket[], filterOptions: FilterLaborTicketsForMmImportOptions, batchCacheManager?: BatchCacheManager | null, writeOptions?: {
|
|
74
|
+
connectorType?: string;
|
|
75
|
+
}): Promise<WriteEntitiesToMMResult & {
|
|
76
|
+
filter: FilterLaborTicketsForMmImportResult;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* Best-effort advance of the {@code labor_tickets / export} checkpoint past the just-finished
|
|
80
|
+
* import window. Failures here are logged and swallowed — the to-erp ledger/signature dedupe
|
|
81
|
+
* is the real correctness guarantee; this is a belt-and-suspenders skip-window optimization.
|
|
82
|
+
*/
|
|
83
|
+
static advanceLaborTicketsExportCheckpoint(connectorType: string, timestampIso: string): Promise<void>;
|
|
64
84
|
/**
|
|
65
85
|
* Writes a batch of records to MM for a specific entity type by:
|
|
66
86
|
* 1. Deduplicating against cached records (localDedupeCount)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-process-drivers.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/standard-process-drivers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"standard-process-drivers.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/standard-process-drivers.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,11 @@ import { ERPObjType } from "../../types/erp-types.js";
|
|
|
2
2
|
import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager.js";
|
|
3
3
|
import { MMSendPart, MMSendPartOperation, MMSendWorkOrder, MMSendWorkOrderOperation, } from "../../services/mm-api-service/index.js";
|
|
4
4
|
import { LaborTicketERPSynchronizer } from "./labor-ticket-erp-synchronizer.js";
|
|
5
|
+
import { TimesheetERPSynchronizer } from "./timesheet-erp-synchronizer.js";
|
|
5
6
|
import { MMEntityProcessor } from "./mm-entity-processor.js";
|
|
7
|
+
import { filterLaborTicketsForMmImport, } from "../labor-import-from-erp.js";
|
|
8
|
+
import { MMApiClient } from "../../services/mm-api-service/mm-api-service.js";
|
|
9
|
+
import { sdkLogger as logger } from "../../services/reporting-service/logger.js";
|
|
6
10
|
export class MMBatchValidationError extends Error {
|
|
7
11
|
upsertedEntities;
|
|
8
12
|
localDedupeCount;
|
|
@@ -39,6 +43,13 @@ export class StandardProcessDrivers {
|
|
|
39
43
|
static async syncLaborTicketsToERP(connectorType, connector, options) {
|
|
40
44
|
return LaborTicketERPSynchronizer.syncToERP(connectorType, connector, options);
|
|
41
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Synchronizes timesheet rows (employee clock in/out) from MachineMetrics to an ERP system.
|
|
48
|
+
* Run after {@link syncLaborTicketsToERP} in the same job so labor is written/closed before clock-out.
|
|
49
|
+
*/
|
|
50
|
+
static async syncTimesheetsToERP(connectorType, handler) {
|
|
51
|
+
return TimesheetERPSynchronizer.syncToERP(connectorType, handler);
|
|
52
|
+
}
|
|
42
53
|
/**
|
|
43
54
|
* Retries labor tickets that have failed to be created or updated in the ERP during the sync:
|
|
44
55
|
*
|
|
@@ -49,6 +60,79 @@ export class StandardProcessDrivers {
|
|
|
49
60
|
static async retryFailedLaborTickets(connectorType, connector) {
|
|
50
61
|
return LaborTicketERPSynchronizer.retryFailed(connectorType, connector);
|
|
51
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Filters ERP-mapped labor tickets for MM FK/import rules, then writes them via {@link writeEntitiesToMM}.
|
|
65
|
+
*/
|
|
66
|
+
static async writeLaborTicketsToMmFromErpImport(tickets, filterOptions, batchCacheManager, writeOptions) {
|
|
67
|
+
const filter = await filterLaborTicketsForMmImport(tickets, filterOptions);
|
|
68
|
+
if (filter.accepted.length === 0) {
|
|
69
|
+
return {
|
|
70
|
+
message: "No labor tickets passed FK/import filters",
|
|
71
|
+
upsertedEntities: 0,
|
|
72
|
+
localDedupeCount: 0,
|
|
73
|
+
apiDedupeCount: 0,
|
|
74
|
+
filter,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// Pre-write the labor sync ledger BEFORE the MM POST. The post-write marker in
|
|
78
|
+
// _handleResponse is kept as a safety net but cannot be relied on if the POST hangs
|
|
79
|
+
// or the worker dies. Pre-marking guarantees the next to-erp cycle sees these tickets.
|
|
80
|
+
if (writeOptions?.connectorType) {
|
|
81
|
+
await MMEntityProcessor.markLaborTicketsInLedger(filter.accepted, writeOptions.connectorType, "labor-ledger-mark:pre-write");
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
logger.warn("writeLaborTicketsToMmFromErpImport: no connectorType provided; skipping labor sync ledger pre-marking. The next to-erp cycle will reprocess these tickets.");
|
|
85
|
+
}
|
|
86
|
+
logger.info("writeLaborTicketsToMmFromErpImport: sending accepted labor tickets to MM API", { count: filter.accepted.length });
|
|
87
|
+
const write = await this.writeEntitiesToMM(ERPObjType.LABOR_TICKETS, filter.accepted, batchCacheManager, writeOptions);
|
|
88
|
+
// Capture "now" right after the MM POST returns. Anything MM updated as a side-effect
|
|
89
|
+
// of our writes carries an updatedAt <= this instant, so advancing the labor_tickets
|
|
90
|
+
// export checkpoint to it lets the next to-erp cycle skip the tickets we just wrote
|
|
91
|
+
// (the dedupe-by-signature path can drift due to MM-side normalization). Real-time
|
|
92
|
+
// edits to those tickets in MM still arrive via NATS, so the skipped polling window
|
|
93
|
+
// is acceptable.
|
|
94
|
+
const checkpointAfterWriteIso = new Date().toISOString();
|
|
95
|
+
logger.info("writeLaborTicketsToMmFromErpImport: MM API write finished", {
|
|
96
|
+
upsertedEntities: write.upsertedEntities,
|
|
97
|
+
localDedupeCount: write.localDedupeCount,
|
|
98
|
+
apiDedupeCount: write.apiDedupeCount,
|
|
99
|
+
});
|
|
100
|
+
if (writeOptions?.connectorType) {
|
|
101
|
+
await this.advanceLaborTicketsExportCheckpoint(writeOptions.connectorType, checkpointAfterWriteIso);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
logger.warn("writeLaborTicketsToMmFromErpImport: no connectorType provided; skipping labor_tickets export-checkpoint advance. The next to-erp cycle will still see these tickets in its updates feed.");
|
|
105
|
+
}
|
|
106
|
+
return { ...write, filter };
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Best-effort advance of the {@code labor_tickets / export} checkpoint past the just-finished
|
|
110
|
+
* import window. Failures here are logged and swallowed — the to-erp ledger/signature dedupe
|
|
111
|
+
* is the real correctness guarantee; this is a belt-and-suspenders skip-window optimization.
|
|
112
|
+
*/
|
|
113
|
+
static async advanceLaborTicketsExportCheckpoint(connectorType, timestampIso) {
|
|
114
|
+
const mmApiClient = new MMApiClient();
|
|
115
|
+
try {
|
|
116
|
+
await mmApiClient.saveCheckpoint({
|
|
117
|
+
system: connectorType,
|
|
118
|
+
table: "labor_tickets",
|
|
119
|
+
checkpointType: "export",
|
|
120
|
+
checkpointValue: { timestamp: timestampIso },
|
|
121
|
+
});
|
|
122
|
+
logger.info("advanceLaborTicketsExportCheckpoint: labor_tickets export checkpoint advanced", { connectorType, checkpointTimestamp: timestampIso });
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
logger.warn("advanceLaborTicketsExportCheckpoint: failed to advance labor_tickets export checkpoint; to-erp will fall back to ledger/signature dedupe", { connectorType, checkpointTimestamp: timestampIso, error });
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
try {
|
|
129
|
+
await mmApiClient.destroy();
|
|
130
|
+
}
|
|
131
|
+
catch (destroyError) {
|
|
132
|
+
logger.warn("advanceLaborTicketsExportCheckpoint: failed to destroy MMApiClient", { error: destroyError });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
52
136
|
/**
|
|
53
137
|
* Writes a batch of records to MM for a specific entity type by:
|
|
54
138
|
* 1. Deduplicating against cached records (localDedupeCount)
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"version":3,"file":"standard-process-drivers.js","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/standard-process-drivers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IERPTimesheetHandler } from "../../types/erp-connector.js";
|
|
2
|
+
/**
|
|
3
|
+
* Synchronizes timesheet rows (clock in/out) from MachineMetrics to an ERP system.
|
|
4
|
+
* Simpler than labor tickets: no local ledger; bounded multi-pass retry like legacy epicor-integration.
|
|
5
|
+
*
|
|
6
|
+
* Callers should run labor ticket sync to completion before invoking this, so shop-floor labor
|
|
7
|
+
* is written/closed before employee-level clock-out.
|
|
8
|
+
*/
|
|
9
|
+
export declare class TimesheetERPSynchronizer {
|
|
10
|
+
static syncToERP(connectorType: string, handler: IERPTimesheetHandler): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=timesheet-erp-synchronizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timesheet-erp-synchronizer.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/timesheet-erp-synchronizer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAKzE;;;;;;GAMG;AACH,qBAAa,wBAAwB;WACtB,SAAS,CACpB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC;CAkFjB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { sdkLogger as logger } from "../../services/reporting-service/logger.js";
|
|
2
|
+
import { MMApiClient } from "../../services/mm-api-service/mm-api-service.js";
|
|
3
|
+
import { summarizeError } from "../error-utils.js";
|
|
4
|
+
const MAX_PASSES = 10;
|
|
5
|
+
/**
|
|
6
|
+
* Synchronizes timesheet rows (clock in/out) from MachineMetrics to an ERP system.
|
|
7
|
+
* Simpler than labor tickets: no local ledger; bounded multi-pass retry like legacy epicor-integration.
|
|
8
|
+
*
|
|
9
|
+
* Callers should run labor ticket sync to completion before invoking this, so shop-floor labor
|
|
10
|
+
* is written/closed before employee-level clock-out.
|
|
11
|
+
*/
|
|
12
|
+
export class TimesheetERPSynchronizer {
|
|
13
|
+
static async syncToERP(connectorType, handler) {
|
|
14
|
+
const mmApiClient = new MMApiClient();
|
|
15
|
+
try {
|
|
16
|
+
await mmApiClient.initializeCheckpoint({
|
|
17
|
+
system: connectorType,
|
|
18
|
+
table: "timesheets",
|
|
19
|
+
checkpointType: "export",
|
|
20
|
+
checkpointValue: {
|
|
21
|
+
timestamp: new Date().toISOString(),
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
let timesheetSyncTime = new Date().toISOString();
|
|
25
|
+
const processedTimesheets = [];
|
|
26
|
+
const failedTimesheets = [];
|
|
27
|
+
let attempt = 0;
|
|
28
|
+
const fetchPending = async () => {
|
|
29
|
+
const rows = await mmApiClient.fetchTimesheetUpdates({
|
|
30
|
+
system: connectorType,
|
|
31
|
+
checkpointType: "export",
|
|
32
|
+
});
|
|
33
|
+
return [...rows].sort((a, b) => Number(a.timesheetRef) - Number(b.timesheetRef));
|
|
34
|
+
};
|
|
35
|
+
let timesheetsPendingUpdate = await fetchPending();
|
|
36
|
+
while (timesheetsPendingUpdate.length > 0) {
|
|
37
|
+
attempt += 1;
|
|
38
|
+
if (attempt > MAX_PASSES) {
|
|
39
|
+
logger.warn(`syncTimesheetsToERP: Stopping after ${MAX_PASSES} passes; remaining pending=${timesheetsPendingUpdate.length}`);
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
for (const timesheet of timesheetsPendingUpdate) {
|
|
43
|
+
try {
|
|
44
|
+
await handler.processTimesheetInERP(timesheet);
|
|
45
|
+
processedTimesheets.push(timesheet);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
logger.error("syncTimesheetsToERP: Failed to process timesheet", {
|
|
49
|
+
timesheetRef: timesheet.timesheetRef,
|
|
50
|
+
error: summarizeError(error),
|
|
51
|
+
});
|
|
52
|
+
failedTimesheets.push(timesheet);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
timesheetSyncTime = new Date().toISOString();
|
|
56
|
+
const allPendingTimesheets = await fetchPending();
|
|
57
|
+
const allAttemptedTimesheets = [...processedTimesheets, ...failedTimesheets];
|
|
58
|
+
timesheetsPendingUpdate = allPendingTimesheets.filter((ts) => !allAttemptedTimesheets.some((attempted) => String(attempted.timesheetRef) === String(ts.timesheetRef)));
|
|
59
|
+
}
|
|
60
|
+
await mmApiClient.saveCheckpoint({
|
|
61
|
+
system: connectorType,
|
|
62
|
+
table: "timesheets",
|
|
63
|
+
checkpointType: "export",
|
|
64
|
+
checkpointValue: {
|
|
65
|
+
timestamp: timesheetSyncTime,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
logger.info("syncTimesheetsToERP: Completed", {
|
|
69
|
+
processed: processedTimesheets.length,
|
|
70
|
+
failed: failedTimesheets.length,
|
|
71
|
+
checkpointTimestamp: timesheetSyncTime,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await mmApiClient.destroy();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=timesheet-erp-synchronizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timesheet-erp-synchronizer.js","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/timesheet-erp-synchronizer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
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.9.
|
|
4
|
+
"version": "0.9.5",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "machinemetrics",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
9
9
|
"source": "src/index.ts",
|
|
10
10
|
"type": "module",
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
11
14
|
"engines": {
|
|
12
15
|
"node": ">=20"
|
|
13
16
|
},
|
|
14
17
|
"scripts": {
|
|
15
18
|
"build": "tsc --project tsconfig.build.json",
|
|
16
19
|
"start": "tsc --project tsconfig.build.json --watch",
|
|
17
|
-
"type-check": "tsc --noEmit"
|
|
20
|
+
"type-check": "tsc --noEmit",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest"
|
|
18
23
|
},
|
|
19
24
|
"dependencies": {
|
|
20
25
|
"@azure/msal-node": "^2.12.0",
|
|
@@ -46,7 +51,8 @@
|
|
|
46
51
|
"@types/node": "^20.0.0",
|
|
47
52
|
"@types/xxhashjs": "^0.2.4",
|
|
48
53
|
"prettier": "^3.6.2",
|
|
49
|
-
"typescript": "^5.8.3"
|
|
54
|
+
"typescript": "^5.8.3",
|
|
55
|
+
"vitest": "^3.0.5"
|
|
50
56
|
},
|
|
51
57
|
"files": [
|
|
52
58
|
"dist",
|
package/src/index.ts
CHANGED
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// Core interfaces and types
|
|
7
|
-
export type {
|
|
7
|
+
export type {
|
|
8
|
+
IERPConnector,
|
|
9
|
+
IERPTimesheetHandler,
|
|
10
|
+
} from "./types/erp-connector.js";
|
|
8
11
|
export { ERPObjType } from "./types/erp-types.js";
|
|
9
12
|
export type { ERPPagination, ERPResponse, ERPObject } from "./types/erp-types.js";
|
|
10
13
|
|
|
@@ -27,6 +30,7 @@ export type { ERPApiConfig } from "./services/erp-api-services/types.js";
|
|
|
27
30
|
export { MMApiClient } from "./services/mm-api-service/index.js";
|
|
28
31
|
export { MMReceiveLaborTicket } from "./services/mm-api-service/index.js";
|
|
29
32
|
export { MMReceiveWorkOrder } from "./services/mm-api-service/index.js";
|
|
33
|
+
export { MMReceiveTimesheet } from "./services/mm-api-service/index.js";
|
|
30
34
|
export type {
|
|
31
35
|
MMReceiveLaborTicketReason,
|
|
32
36
|
MMReceiveLaborTicketWorkOrderOperation,
|
|
@@ -114,6 +118,23 @@ export {
|
|
|
114
118
|
export type { WriteEntitiesToMMResult } from "./utils/index.js";
|
|
115
119
|
export { MMBatchValidationError } from "./utils/index.js";
|
|
116
120
|
|
|
121
|
+
export {
|
|
122
|
+
getMesLaborImportResourceIds,
|
|
123
|
+
getMappedOperatorErpIdsForImport,
|
|
124
|
+
normalizeLaborTicketWorkOrderOpKey,
|
|
125
|
+
buildSyncedWorkOrderOperationKeySet,
|
|
126
|
+
resolveSyncedWorkOrderOperationKeysForLaborImport,
|
|
127
|
+
filterLaborTicketsForMmImport,
|
|
128
|
+
collectMesSchedulableErpResourceIds,
|
|
129
|
+
fetchMesSchedulableErpResourceIds,
|
|
130
|
+
} from "./utils/index.js";
|
|
131
|
+
export type {
|
|
132
|
+
MesMachineSettingRow,
|
|
133
|
+
SyncedWorkOrderOperationRow,
|
|
134
|
+
FilterLaborTicketsForMmImportOptions,
|
|
135
|
+
FilterLaborTicketsForMmImportResult,
|
|
136
|
+
} from "./utils/labor-import-from-erp.js";
|
|
137
|
+
|
|
117
138
|
// API services
|
|
118
139
|
export type { APIResponse } from "./services/erp-api-services/types.js";
|
|
119
140
|
export { RestAPIService } from "./services/erp-api-services/rest/rest-api-service.js";
|
|
@@ -24,7 +24,6 @@ import type {
|
|
|
24
24
|
MM207LaborTicketResponse,
|
|
25
25
|
MM500NonLaborTicketException,
|
|
26
26
|
MM500LaborTicketException,
|
|
27
|
-
MMGraphQLResourceResponse,
|
|
28
27
|
MMGraphQLWorkOrderResponse,
|
|
29
28
|
MMMachineGroupsResponse,
|
|
30
29
|
MMMappedErpResourceRow,
|
|
@@ -63,7 +62,6 @@ export type {
|
|
|
63
62
|
MM207LaborTicketResponse,
|
|
64
63
|
MM500NonLaborTicketException,
|
|
65
64
|
MM500LaborTicketException,
|
|
66
|
-
MMGraphQLResourceResponse,
|
|
67
65
|
MMGraphQLWorkOrderResponse,
|
|
68
66
|
MMMachineGroupsResponse,
|
|
69
67
|
MMMappedErpResourceRow,
|
|
@@ -72,7 +70,11 @@ export type {
|
|
|
72
70
|
/**
|
|
73
71
|
* Types related to entities received from the MM API
|
|
74
72
|
*/
|
|
75
|
-
export {
|
|
73
|
+
export {
|
|
74
|
+
MMReceiveLaborTicket,
|
|
75
|
+
MMReceiveWorkOrder,
|
|
76
|
+
MMReceiveTimesheet,
|
|
77
|
+
} from "./types/receive-types.js";
|
|
76
78
|
export type {
|
|
77
79
|
MMReceiveLaborTicketReason,
|
|
78
80
|
MMReceiveLaborTicketWorkOrderOperation,
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
collectMesSchedulableErpResourceIds,
|
|
4
|
+
mapMesMachineSettingsToMappedErpResourceRows,
|
|
5
|
+
} from "./mes-machine-settings.js";
|
|
6
|
+
import type { MesMachineSettingRow } from "./mes-machine-settings.js";
|
|
7
|
+
|
|
8
|
+
describe("mapMesMachineSettingsToMappedErpResourceRows", () => {
|
|
9
|
+
it("maps rows with machineRef and laborResourceId", () => {
|
|
10
|
+
const rows: MesMachineSettingRow[] = [
|
|
11
|
+
{
|
|
12
|
+
machineRef: 10,
|
|
13
|
+
laborResourceId: "RES-A",
|
|
14
|
+
name: "Cell 1",
|
|
15
|
+
type: "manual",
|
|
16
|
+
machineGroupId: "grp-1",
|
|
17
|
+
isResourceGroup: false,
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
expect(mapMesMachineSettingsToMappedErpResourceRows(rows)).toEqual([
|
|
21
|
+
{
|
|
22
|
+
machineRef: 10,
|
|
23
|
+
resourceId: "RES-A",
|
|
24
|
+
name: "Cell 1",
|
|
25
|
+
type: "manual",
|
|
26
|
+
machineGroupId: "grp-1",
|
|
27
|
+
isResourceGroup: false,
|
|
28
|
+
},
|
|
29
|
+
]);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("parses numeric string machineRef", () => {
|
|
33
|
+
expect(
|
|
34
|
+
mapMesMachineSettingsToMappedErpResourceRows([
|
|
35
|
+
{ machineRef: "42", laborResourceId: "x" },
|
|
36
|
+
])
|
|
37
|
+
).toEqual([
|
|
38
|
+
{
|
|
39
|
+
machineRef: 42,
|
|
40
|
+
resourceId: "x",
|
|
41
|
+
name: null,
|
|
42
|
+
type: null,
|
|
43
|
+
machineGroupId: null,
|
|
44
|
+
isResourceGroup: false,
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("trims laborResourceId and rejects blank", () => {
|
|
50
|
+
expect(
|
|
51
|
+
mapMesMachineSettingsToMappedErpResourceRows([
|
|
52
|
+
{ machineRef: 1, laborResourceId: " id " },
|
|
53
|
+
])
|
|
54
|
+
).toEqual([
|
|
55
|
+
expect.objectContaining({ resourceId: "id", machineRef: 1 }),
|
|
56
|
+
]);
|
|
57
|
+
|
|
58
|
+
expect(
|
|
59
|
+
mapMesMachineSettingsToMappedErpResourceRows([
|
|
60
|
+
{ machineRef: 1, laborResourceId: "" },
|
|
61
|
+
])
|
|
62
|
+
).toHaveLength(0);
|
|
63
|
+
|
|
64
|
+
expect(
|
|
65
|
+
mapMesMachineSettingsToMappedErpResourceRows([
|
|
66
|
+
{ machineRef: 1, laborResourceId: " " },
|
|
67
|
+
])
|
|
68
|
+
).toHaveLength(0);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("excludes rows without finite machineRef", () => {
|
|
72
|
+
expect(
|
|
73
|
+
mapMesMachineSettingsToMappedErpResourceRows([
|
|
74
|
+
{ laborResourceId: "a" },
|
|
75
|
+
{ machineRef: NaN, laborResourceId: "a" },
|
|
76
|
+
{ machineRef: null, laborResourceId: "a" },
|
|
77
|
+
])
|
|
78
|
+
).toHaveLength(0);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("excludes rows without laborResourceId", () => {
|
|
82
|
+
expect(
|
|
83
|
+
mapMesMachineSettingsToMappedErpResourceRows([
|
|
84
|
+
{ machineRef: 1 },
|
|
85
|
+
{ machineRef: 1, laborResourceId: null },
|
|
86
|
+
])
|
|
87
|
+
).toHaveLength(0);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("defaults optional group and name when absent", () => {
|
|
91
|
+
expect(
|
|
92
|
+
mapMesMachineSettingsToMappedErpResourceRows([
|
|
93
|
+
{ machineRef: 2, laborResourceId: "Z" },
|
|
94
|
+
])
|
|
95
|
+
).toEqual([
|
|
96
|
+
{
|
|
97
|
+
machineRef: 2,
|
|
98
|
+
resourceId: "Z",
|
|
99
|
+
isResourceGroup: false,
|
|
100
|
+
machineGroupId: null,
|
|
101
|
+
name: null,
|
|
102
|
+
type: null,
|
|
103
|
+
},
|
|
104
|
+
]);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it("supports isResourceGroup true", () => {
|
|
108
|
+
expect(
|
|
109
|
+
mapMesMachineSettingsToMappedErpResourceRows([
|
|
110
|
+
{ machineRef: 1, laborResourceId: "G", isResourceGroup: true },
|
|
111
|
+
])
|
|
112
|
+
).toEqual([
|
|
113
|
+
expect.objectContaining({ isResourceGroup: true, resourceId: "G" }),
|
|
114
|
+
]);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
describe("collectMesSchedulableErpResourceIds", () => {
|
|
119
|
+
it("includes laborResourceId only when set", () => {
|
|
120
|
+
expect(
|
|
121
|
+
collectMesSchedulableErpResourceIds([
|
|
122
|
+
{ laborResourceId: "LAB-1" },
|
|
123
|
+
{ laborResourceId: null },
|
|
124
|
+
])
|
|
125
|
+
).toEqual(["LAB-1"]);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it("includes scheduledAs entries", () => {
|
|
129
|
+
expect(
|
|
130
|
+
collectMesSchedulableErpResourceIds([
|
|
131
|
+
{
|
|
132
|
+
scheduledAs: [" S1 ", "S2", null, 99],
|
|
133
|
+
},
|
|
134
|
+
])
|
|
135
|
+
).toEqual(["S1", "S2", "99"]);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it("merges laborResourceId and scheduledAs across rows", () => {
|
|
139
|
+
expect(
|
|
140
|
+
collectMesSchedulableErpResourceIds([
|
|
141
|
+
{ laborResourceId: "A", scheduledAs: ["B"] },
|
|
142
|
+
{ scheduledAs: ["C"] },
|
|
143
|
+
{ laborResourceId: "D" },
|
|
144
|
+
])
|
|
145
|
+
).toEqual(["A", "B", "C", "D"]);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it("dedupes case-insensitively and keeps first-seen casing", () => {
|
|
149
|
+
expect(
|
|
150
|
+
collectMesSchedulableErpResourceIds([
|
|
151
|
+
{ laborResourceId: "Res1", scheduledAs: ["res1", "RES1"] },
|
|
152
|
+
{ laborResourceId: "rEs1" },
|
|
153
|
+
])
|
|
154
|
+
).toEqual(["Res1"]);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("ignores null, empty scheduledAs, and non-array scheduledAs", () => {
|
|
158
|
+
expect(
|
|
159
|
+
collectMesSchedulableErpResourceIds([
|
|
160
|
+
{ laborResourceId: "", scheduledAs: null },
|
|
161
|
+
{ scheduledAs: undefined as unknown as null },
|
|
162
|
+
{ scheduledAs: "not-an-array" as unknown as string[] },
|
|
163
|
+
])
|
|
164
|
+
).toEqual([]);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it("skips blank scheduledAs elements", () => {
|
|
168
|
+
expect(
|
|
169
|
+
collectMesSchedulableErpResourceIds([
|
|
170
|
+
{ scheduledAs: ["x", " ", ""] },
|
|
171
|
+
])
|
|
172
|
+
).toEqual(["x"]);
|
|
173
|
+
});
|
|
174
|
+
});
|