using AnalyticsDAL.DTO.KPIEvaluation; using GB5Shared.DTO.Framework.Login; namespace AnalyticsDAL.CustomCode.KPIEvaluation { // Thin read/write primitives only -- the actual BI-engine call (IAnalysisAggregationService) // and formula evaluation live in KPIEvaluationBLL, since DAL must never call up into BLL // (CLAUDE.md layering rule). public interface IKPIEvaluationDAL { Task> GetAccessibleOuIds(int userId, LoginDTO login, CancellationToken ct); Task<(DateTime PeriodFromDate, DateTime PeriodToDate)?> GetPeriodRange(int periodDetailId, LoginDTO login, CancellationToken ct); Task ResolveDateKey(DateTime date, LoginDTO login, CancellationToken ct); Task ResolveLatestFFinanceDateKeyOnOrBefore(int ouId, int toDateKey, LoginDTO login, CancellationToken ct); Task> GetComputableKpis(List kpiIds, LoginDTO login, CancellationToken ct); Task> GetAllComputableKpiIds(LoginDTO login, CancellationToken ct); Task> GetMeasureAdditivity(LoginDTO login, CancellationToken ct); Task> GetStatusBands(List kpiIds, LoginDTO login, CancellationToken ct); Task GetPreviousActual(int kpiId, int periodDetailId, int ouId, LoginDTO login, CancellationToken ct); Task GetPreviousPeriodDetailId(int periodDetailId, LoginDTO login, CancellationToken ct); Task GetLatestPostedPeriodDetailId(int ouId, LoginDTO login, CancellationToken ct); Task DeleteExistingValues(int periodDetailId, int ouId, LoginDTO login, CancellationToken ct); Task InsertValue(int kpiId, int periodDetailId, int ouId, int dimOuId, decimal? actual, decimal? target, byte? trend, int? statusId, LoginDTO login, CancellationToken ct); Task> GetKpiValues(List kpiIds, int periodDetailId, int ouId, LoginDTO login, CancellationToken ct); } }