public interface IPromotionService { /// /// Approves a verified or awaiting-clinical-approval batch and promotes its draft data /// into live VigilCareClinical tables within a single atomic transaction. /// /// The batch to promote. /// The user performing the approval (separation-of-duties enforced). /// /// If true, outbox events are written for backfill observations so the alert engine processes them. /// If false (default), backfill observations are silently inserted with no alert path. /// Live-capture track always writes outbox events regardless of this flag. /// /// Optional key for idempotent promotion. If provided and already used, returns cached result. /// The promotion result with all created live IDs. Task ApproveAndPromoteAsync( Guid batchId, Guid approverUserId, bool enableRetroactiveAlerts, string? idempotencyKey); /// /// Returns the promotion result for an already-promoted batch. /// Task GetPromotionResultAsync(Guid batchId); }