namespace FMDAL.Query.ScanEvent { // Confirmed against DB/Migrations/20260719_RAM_Phase2_Schema_SqlServer.sql (TSCANEVENT). // Raw per-scan capture log — insert-only, no UPDATE and no void method; matches AssetLedgerQB's // append-only principle but is even stricter since TSCANEVENT carries no STATUS column at all // (confirmed absent in the DDL) — a scan event, once captured, is never edited or voided, only // ever superseded by a later scan event row. public static class ScanEventQB { public const string GET_SCANEVENT = @"SELECT SE.SCANEVENTID AS ScanEventId, SE.SCANSESSIONID AS ScanSessionId, SE.SCANIDENTIFIERID AS ScanIdentifierId, SE.RAWSCANNEDVALUE AS RawScannedValue, SE.IDENTIFIERTYPE AS IdentifierType, SE.SCANDEVICEID AS ScanDeviceId, SE.SCANZONEID AS ScanZoneId, SE.OPERATORID AS OperatorId, SE.ENTITYTYPE AS EntityType, SE.ENTITYID AS EntityId, SE.SCANINTENT AS ScanIntent, SE.SCANRESULT AS ScanResult, SE.REJECTREASONCODE AS RejectReasonCode, SE.RSSI AS Rssi, SE.ISOFFLINE AS IsOffline, SE.DEVICETIMESTAMP AS DeviceTimestamp, SE.SERVERTIMESTAMP AS ServerTimestamp, SE.SYNCEDON AS SyncedOn, SE.OUID AS OUId, SE.TENANTID AS TenantId FROM TSCANEVENT SE WHERE SE.SCANEVENTID = @ScanEventId AND SE.TENANTID = @TenantId;"; public const string GET_SCANEVENT_LIST_BY_SESSION = @"SELECT SE.SCANEVENTID AS ScanEventId, SE.SCANSESSIONID AS ScanSessionId, SE.SCANIDENTIFIERID AS ScanIdentifierId, SE.RAWSCANNEDVALUE AS RawScannedValue, SE.IDENTIFIERTYPE AS IdentifierType, SE.SCANDEVICEID AS ScanDeviceId, SE.SCANZONEID AS ScanZoneId, SE.OPERATORID AS OperatorId, SE.ENTITYTYPE AS EntityType, SE.ENTITYID AS EntityId, SE.SCANINTENT AS ScanIntent, SE.SCANRESULT AS ScanResult, SE.REJECTREASONCODE AS RejectReasonCode, SE.RSSI AS Rssi, SE.ISOFFLINE AS IsOffline, SE.DEVICETIMESTAMP AS DeviceTimestamp, SE.SERVERTIMESTAMP AS ServerTimestamp, SE.SYNCEDON AS SyncedOn, SE.OUID AS OUId, SE.TENANTID AS TenantId FROM TSCANEVENT SE WHERE SE.SCANSESSIONID = @ScanSessionId AND SE.TENANTID = @TenantId ORDER BY SE.DEVICETIMESTAMP;"; public const string SAVE_SCANEVENT = @"INSERT INTO TSCANEVENT ( SCANEVENTID, SCANSESSIONID, SCANIDENTIFIERID, RAWSCANNEDVALUE, IDENTIFIERTYPE, SCANDEVICEID, SCANZONEID, OPERATORID, ENTITYTYPE, ENTITYID, SCANINTENT, SCANRESULT, REJECTREASONCODE, RSSI, ISOFFLINE, DEVICETIMESTAMP, SERVERTIMESTAMP, SYNCEDON, OUID, TENANTID) VALUES ( @ScanEventId, @ScanSessionId, @ScanIdentifierId, @RawScannedValue, @IdentifierType, @ScanDeviceId, @ScanZoneId, @OperatorId, @EntityType, @EntityId, @ScanIntent, @ScanResult, @RejectReasonCode, @Rssi, @IsOffline, @DeviceTimestamp, @ServerTimestamp, @SyncedOn, @OUId, @TenantId);"; } }