using GB5Shared.DTO.Framework.Login; namespace WiBLL.WiSkillGap; public interface IWiSkillGapBLL { Task GetSkillGapForRoster(int productionLineId, DateOnly rosterDate, int shiftId, LoginDTO login, CancellationToken ct); Task GetLineDigitalTwin(int productionLineId, DateOnly shiftDate, int shiftId, LoginDTO login, CancellationToken ct); Task GetPlantOverview(DateOnly shiftDate, int shiftId, LoginDTO login, CancellationToken ct); /// /// Deliberately triggered action (not run on every GetSkillGapForRoster fetch, to avoid /// spamming Training Need creation on every screen view): recomputes this roster's skill gap /// and publishes one "wi.skillgap.detected" Dapr event per employee/skill pairing whose /// enforcement is Warn or Block and status isn't Met — TMS subscribes and auto-raises a /// Training Need for it. Returns a JSON summary of how many gaps were published. /// Task RaiseTrainingNeedsForRosterGaps(int productionLineId, DateOnly rosterDate, int shiftId, LoginDTO login, CancellationToken ct); }