toga-ai 1.0.428 → 1.0.429
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.
|
@@ -6,7 +6,7 @@ project: Worker
|
|
|
6
6
|
client: nycdoe
|
|
7
7
|
type: client-feature
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-07-
|
|
9
|
+
updated: 2026-07-23
|
|
10
10
|
owners: [mhammontree, sking]
|
|
11
11
|
files:
|
|
12
12
|
- worker/crons/sync/nycdoe/import_asn.php
|
|
@@ -248,6 +248,45 @@ Vendor SFTP ───(legacy_import_asn.php, ser+non-ser)─┘ [UNIQUE ded
|
|
|
248
248
|
164785 (internalId 6971859 → `38S0500` synced, 15 ROs) and PO 165751 (`50M7280` + `A3L980`
|
|
249
249
|
NOT synced). PRs: library#831 (merge first) then worker#1670.
|
|
250
250
|
|
|
251
|
+
- **⚠ REGRESSION of the 2026-07-09 multi-PO fix — a cross-wired SO/PO stamp silently drops
|
|
252
|
+
install tickets (diagnosed 2026-07-23; deferred to a one-off backfill, cron NOT changed).**
|
|
253
|
+
The 2026-07-09 fix (library#831 + worker#1670) made Stage 5 resolve item receipts **only**
|
|
254
|
+
Sales-Order-wide via `App_NetSuite::listItemReceiptsCreatedFromSalesOrder($soId)` (which fans
|
|
255
|
+
across the POs from `listPurchaseOrdersCreatedFromSalesOrder($soId)`). It **replaced** —
|
|
256
|
+
rather than augmented — the old by-stamped-PO lookup (`listItemReceiptsCreateFromPurchaseOrder`).
|
|
257
|
+
So when an ASN item's stamped `netSuiteInternalPurchaseOrderId` is **not a child of** its
|
|
258
|
+
stamped `netSuiteInternalSalesOrderId`, the SO-wide fan-out never inspects the stamped PO,
|
|
259
|
+
finds zero receipts, and the cron **silently creates no repair order and raises no error** —
|
|
260
|
+
the same "serials never sync, no error" symptom as the bug it replaced, in a distinct case.
|
|
261
|
+
- **Fingerprint:** an item stamped an SO whose only child PO has no receipt, while the stamped
|
|
262
|
+
PO (often an internalId *lower* than the SO's, i.e. created earlier) carries the real receipt
|
|
263
|
+
with the matching serials.
|
|
264
|
+
- **Root cause of the cross-wired stamp (SME Skyler King confirmed) = a warehouse
|
|
265
|
+
manual-entry error, not automation.** Confirmed case ASN **26215** (customer PO
|
|
266
|
+
`S202641365`): original SO `6901611` processed only `DOE-30HSS1BB00` (qty 1), PO `6901612`,
|
|
267
|
+
item receipt `6910404` (ticketed fine, RO 811791). Two monitors `DOE-62C5GAR1US` (serial
|
|
268
|
+
`VKWD9092`) and `DOE-64B6MAR1UZ` (serial `V600F9M6`) were **manually** added to SO `6901611`
|
|
269
|
+
with a **manually** created PO `6910401`, received on item receipt `6910410`. Separately,
|
|
270
|
+
when the real ASN arrived, the automation created a **duplicate** SO `6996287` (auto-PO
|
|
271
|
+
`6996288`, never used to receive — the serials were already on `6910410`). Net: ASN items
|
|
272
|
+
53905/53914 ended stamped SO=`6996287` (the duplicate) but PO=`6910401` (the manual PO under
|
|
273
|
+
the *original* SO), so SO-wide resolution finds nothing.
|
|
274
|
+
- **SME-confirmed correct end-state:** the units belong to the **original** SO (`6901611`);
|
|
275
|
+
the automation-created duplicate SO `6996287` / PO `6996288` is a NetSuite cleanup item
|
|
276
|
+
(cancel). The owed installs (one repair order per received unit) are **independent** of the
|
|
277
|
+
NetSuite duplicate and are created **TOGa Desk-side only**. Warehouse process has since been
|
|
278
|
+
corrected by training.
|
|
279
|
+
- **Recovery (chosen fix — one-off, not a cron change):** a run-once backfill reuses
|
|
280
|
+
`doeCreateInstallationRepairOrder` verbatim from Stage 5 (`3_create_installation_ticket.php`)
|
|
281
|
+
but scoped to a single ASN (id via CLI arg), resolving receipts from the **UNION** of the
|
|
282
|
+
SO's child POs *and* the item's stamped PO. It is idempotent (only units with
|
|
283
|
+
`togadeskRepairOrderId IS NULL`), guards double dispatch (skips a serial that already has a
|
|
284
|
+
`repair_order` in `db_togadesk`), never adds new `AdvanceShippingNoticeUnits`, is
|
|
285
|
+
serialized-only, and makes no NetSuite/ServiceNow writes. Confirmed on ASN 26215 (created the
|
|
286
|
+
two owed ROs). A **permanent union fix in the cron** (resolve receipts from SO child POs plus
|
|
287
|
+
the stamped PO) was considered but **deferred** — the team chose the one-off because the
|
|
288
|
+
warehouse process error is now prevented by training.
|
|
289
|
+
|
|
251
290
|
## Debugging & DB topology (DOE 1.0 sync)
|
|
252
291
|
|
|
253
292
|
Reference for future DOE investigations — the 1.0 worker cannot run on a dev/Windows box;
|
|
@@ -265,6 +304,14 @@ use the toga DB MCP + `Logs.API` instead of running prod code locally.
|
|
|
265
304
|
6971859 returned `totalRecords=1`, only `38S0500`.)
|
|
266
305
|
- **`Bridge_NetSuite`** (legacy) has `SalesOrders` / `SalesOrderItems` / `SerialNumbers` but
|
|
267
306
|
**no `PurchaseOrders` table** — POs are pulled live from the NetSuite API.
|
|
307
|
+
- **Stuck-vs-received check, per ASN item:** compare
|
|
308
|
+
`listItemReceiptsCreatedFromSalesOrder($stampedSO)` against
|
|
309
|
+
`listItemReceiptsCreateFromPurchaseOrder($stampedPO)`, dumping each receipt line's `itemName`
|
|
310
|
+
plus its `inventoryAssignment` serials. If the SO-wide call returns 0 but the stamped PO
|
|
311
|
+
returns the receipt with the matching serials, it is the cross-wired-stamp regression above.
|
|
312
|
+
- **`App_Model_Core_AdvanceShippingNotice` does NOT map `dtCreatedInstallationTicket`** — its
|
|
313
|
+
`__get` throws "No field or quick query defined for key …". Read that column via **raw SQL**,
|
|
314
|
+
not the model.
|
|
268
315
|
|
|
269
316
|
## Operating rules when changing this integration
|
|
270
317
|
|
|
@@ -278,6 +325,17 @@ use the toga DB MCP + `Logs.API` instead of running prod code locally.
|
|
|
278
325
|
of the consumer query; `php -l` every touched file.
|
|
279
326
|
|
|
280
327
|
## Change history
|
|
328
|
+
- 2026-07-23 — Diagnosed a regression of the 2026-07-09 multi-PO fix: Stage 5's SO-wide receipt
|
|
329
|
+
resolution *replaced* the by-stamped-PO lookup, so a cross-wired stamp (an item's stamped PO
|
|
330
|
+
not a child of its stamped SO) silently drops install tickets with no error. Root cause of the
|
|
331
|
+
cross-wire = a warehouse manual-entry error (a duplicate SO was auto-created while the real
|
|
332
|
+
receipt sat under a manually-created PO on the original SO); SME Skyler King confirmed the
|
|
333
|
+
correct end-state (units on the original SO, duplicate SO cancelled, owed installs are TOGa
|
|
334
|
+
Desk-side only). Recovered stuck ASN 26215 with a one-off union-receipt backfill (union of SO
|
|
335
|
+
child POs + the stamped PO; idempotent; no NetSuite/ServiceNow writes) that created the two
|
|
336
|
+
owed ROs; a permanent union fix in the cron was considered but deferred (warehouse process now
|
|
337
|
+
corrected by training). Added a regression gotcha + two debugging notes. No production code
|
|
338
|
+
changed. (mhammontree; SME sking)
|
|
281
339
|
- 2026-07-09 — Fixed silent install-ticket drop when a NetSuite SO is fulfilled across
|
|
282
340
|
multiple POs: Stage 5 now resolves item receipts Sales-Order-wide via new helper
|
|
283
341
|
`App_NetSuite::listItemReceiptsCreatedFromSalesOrder` (fans across all POs from the SO,
|
package/package.json
CHANGED