diff --git a/docs/requirements/Component-Commons.md b/docs/requirements/Component-Commons.md index 6f4b8a6..3811dd5 100644 --- a/docs/requirements/Component-Commons.md +++ b/docs/requirements/Component-Commons.md @@ -87,6 +87,7 @@ Commons must define repository interfaces that consuming components use for data - `IExternalSystemRepository` — External system definitions, method definitions, database connection definitions. - `INotificationRepository` — Notification lists (including the `Type` field), recipients, SMTP configuration. - `INotificationOutboxRepository` — The `Notifications` table: insert-if-not-exists ingest on `NotificationId`, due-row polling (`Pending` rows and `Retrying` rows past `NextAttemptAt`), status transitions, KPI aggregate queries, and the bulk delete of terminal rows used by the daily purge job. +- `ISiteCallAuditRepository` — The `SiteCalls` table: insert-if-not-exists ingest on `TrackedOperationId`, upsert-on-newer-status from telemetry and reconciliation pulls, KPI aggregate queries, and the bulk delete of terminal rows used by the daily purge job. - `ISiteRepository` — Sites, data connections, and their site assignments. - `ICentralUiRepository` — Read-oriented queries spanning multiple domain areas for display purposes. @@ -171,6 +172,7 @@ ScadaLink.Commons/ │ │ ├── IExternalSystemRepository.cs │ │ ├── INotificationRepository.cs │ │ ├── INotificationOutboxRepository.cs +│ │ ├── ISiteCallAuditRepository.cs │ │ ├── ISiteRepository.cs │ │ └── ICentralUiRepository.cs │ └── Services/ # REQ-COM-4a: Cross-cutting service interfaces diff --git a/docs/requirements/HighLevelReqs.md b/docs/requirements/HighLevelReqs.md index 4299a4c..a97e107 100644 --- a/docs/requirements/HighLevelReqs.md +++ b/docs/requirements/HighLevelReqs.md @@ -231,7 +231,7 @@ Scripts executing on a site for a given instance can: - **Write** attribute values on that instance. For attributes with a data source reference, the write goes to the Data Connection Layer which writes to the physical device; the in-memory value updates when the device confirms the new value via the existing subscription. For static attributes, the write updates the in-memory value and **persists the override to local SQLite** — the value survives restart and failover. Persisted overrides are reset when the instance is redeployed. - **Call other scripts** on that instance via `Instance.CallScript("scriptName", params)`. Calls use the Akka ask pattern and return the called script's return value. Script-to-script calls support concurrent execution. - **Call shared scripts** via `Scripts.CallShared("scriptName", params)`. Shared scripts execute **inline** in the calling Script Actor's context — they are compiled code libraries, not separate actors. -- **Call external system API methods** in two modes: `ExternalSystem.Call()` for synchronous request/response, or `ExternalSystem.CachedCall()` for fire-and-forget with store-and-forward on transient failure (see Section 5). +- **Call external system API methods** in two modes: `ExternalSystem.Call()` for synchronous request/response, or `ExternalSystem.CachedCall()` for deferred delivery — it returns a `TrackedOperationId` tracking handle immediately and store-and-forwards the call on transient failure (see Section 5). - **Send notifications** (see Section 6). - **Access databases** by requesting an MS SQL client connection by name (see Section 5.5).