feat(native-alarms): per-binding IsMesReportable on native alarm source bindings (ScadaBridge#59)

TemplateNativeAlarmSource.IsMesReportable + tri-state InstanceNativeAlarmSourceOverride
.IsMesReportableOverride flatten onto ResolvedNativeAlarmSource; NativeAlarmActor stamps every
mirrored condition and InstanceActor the quiet-binding placeholder, so ScriptAlarm,
Alarms.MesReportableAsync() and the #60 wire fields carry it. Additive to the 900-999 severity band.
Migration AddNativeAlarmSourceMesReportable. Management commands, CLI --mes-reportable, Central UI
(template dialog checkbox, instance override select), Transport DTOs/importer/diff and the revision
hash (true-only, so existing hashes are unchanged) carry it.

Claude-Session: https://claude.ai/code/session_01GT67AEHd2Acv1YPwGfXEoV
This commit is contained in:
Joseph Doherty
2026-11-09 15:09:54 -05:00
parent 69a2017000
commit f98369a786
38 changed files with 2579 additions and 43 deletions
@@ -109,6 +109,8 @@ public class RevisionHashService
ConditionFilter = n.ConditionFilter,
ConnectionName = n.ConnectionName,
IsLocked = n.IsLocked,
// true-only (null when false) so existing revision hashes are unchanged.
IsMesReportable = n.IsMesReportable ? true : null,
SourceReference = n.SourceReference
})
.ToList()
@@ -296,6 +298,11 @@ public class RevisionHashService
/// </summary>
public bool IsLocked { get; init; }
/// <summary>
/// MES-reportable binding flag; null when false (the serializer drops nulls), so
/// pre-existing configurations hash identically.
/// </summary>
public bool? IsMesReportable { get; init; }
/// <summary>
/// The source reference (OPC UA SourceNode/notifier nodeId, or MxAccess object/area).
/// </summary>
public string SourceReference { get; init; } = string.Empty;