feat(loader): canonical EQ-+uuid EquipmentIds (passes OtOpcUa full DraftValidator); clean by UnsLine scope

This commit is contained in:
Joseph Doherty
2026-06-07 11:18:39 -04:00
parent 4d57e34ff3
commit 05a4a547f4
+13 -5
View File
@@ -253,11 +253,13 @@ def cmd_populate_equipment(args):
# Drop any prior overlay (child rows first), then recreate. VirtualTag/Script go
# before Equipment (VirtualTag.EquipmentId logical-FKs Equipment); the stub driver
# keeps no Tags so the Tag delete is just defensive for older overlays.
# keeps no Tags so the Tag delete is just defensive for older overlays. Equipment is
# scoped by its overlay UnsLine ('nw-line-%') — NOT by the EquipmentId, which is now the
# canonical 'EQ-'+uuid form (see DraftValidator) and no longer carries an 'nw-' prefix.
cur.execute("DELETE FROM dbo.VirtualTag WHERE VirtualTagId LIKE %s", (EQ_ID_PREFIX + "%",))
cur.execute("DELETE FROM dbo.Script WHERE ScriptId LIKE %s", (EQ_ID_PREFIX + "%",))
cur.execute("DELETE FROM dbo.Tag WHERE DriverInstanceId=%s", (EQ_DRIVER,))
cur.execute("DELETE FROM dbo.Equipment WHERE DriverInstanceId=%s", (EQ_DRIVER,))
cur.execute("DELETE FROM dbo.Equipment WHERE UnsLineId LIKE 'nw-line-%'")
cur.execute("DELETE FROM dbo.UnsLine WHERE UnsLineId LIKE 'nw-line-%'")
cur.execute("DELETE FROM dbo.UnsArea WHERE UnsAreaId LIKE 'nw-area-%'")
cur.execute("DELETE FROM dbo.DriverInstance WHERE DriverInstanceId=%s", (EQ_DRIVER,))
@@ -284,8 +286,12 @@ def cmd_populate_equipment(args):
eq_n = vt_n = 0
for e in u["equipment"]:
eq_id = "nw-" + e["equipmentId"]
eq_uuid = str(uuid.uuid5(uuid.NAMESPACE_URL, "otopcua-nw-eq/" + e["equipmentId"]))
eq_uuid = uuid.uuid5(uuid.NAMESPACE_URL, "otopcua-nw-eq/" + e["equipmentId"])
# Canonical EquipmentId: matches OtOpcUa DraftValidator.DeriveEquipmentId
# ("EQ-" + EquipmentUuid.ToString("N")[..12].ToLowerInvariant()). uuid.UUID.hex is
# already lowercase, 32 hex chars, no dashes — .hex[:12] is the first 12.
eq_id = "EQ-" + eq_uuid.hex[:12].lower()
eq_uuid = str(eq_uuid)
cur.execute(
"INSERT INTO dbo.Equipment (EquipmentRowId, EquipmentId, EquipmentUuid, DriverInstanceId, UnsLineId, "
"Name, MachineCode, Manufacturer, Model, Enabled) VALUES (NEWID(), %s, %s, %s, %s, %s, %s, %s, %s, 1)",
@@ -331,10 +337,12 @@ def cmd_clean(args):
n = cur.rowcount
# Also drop the company-shape Equipment overlay (child rows first): VirtualTag and
# Script (both nweq-*) before Equipment, then any stub-driver Tag, then the rest.
# Equipment is scoped by its overlay UnsLine ('nw-line-%') — NOT by the EquipmentId,
# which is now the canonical 'EQ-'+uuid form (see DraftValidator) with no 'nw-' prefix.
cur.execute("DELETE FROM dbo.VirtualTag WHERE VirtualTagId LIKE %s", (EQ_ID_PREFIX + "%",))
cur.execute("DELETE FROM dbo.Script WHERE ScriptId LIKE %s", (EQ_ID_PREFIX + "%",))
cur.execute("DELETE FROM dbo.Tag WHERE DriverInstanceId=%s", (EQ_DRIVER,))
cur.execute("DELETE FROM dbo.Equipment WHERE DriverInstanceId=%s", (EQ_DRIVER,))
cur.execute("DELETE FROM dbo.Equipment WHERE UnsLineId LIKE 'nw-line-%'")
cur.execute("DELETE FROM dbo.UnsLine WHERE UnsLineId LIKE 'nw-line-%'")
cur.execute("DELETE FROM dbo.UnsArea WHERE UnsAreaId LIKE 'nw-area-%'")
cur.execute("DELETE FROM dbo.DriverInstance WHERE DriverInstanceId=%s", (EQ_DRIVER,))