import { Domain } from '@things-factory/shell'; import { User } from '@things-factory/auth-base'; import { KpiScores } from './kpi-grade.types'; export declare enum KpiStatus { DRAFT = "DRAFT", RELEASE = "RELEASE", ARCHIVED = "ARCHIVED" } export declare enum KpiVizType { CARD = "CARD", GAUGE = "GAUGE", PROGRESS = "PROGRESS", BAR = "BAR", LINE = "LINE", PIE = "PIE", DONUT = "DONUT", RADAR = "RADAR", BULLET = "BULLET", THERMOMETER = "THERMOMETER", SPEEDOMETER = "SPEEDOMETER", ICON = "ICON", BADGE = "BADGE", TEXT = "TEXT", TABLE = "TABLE" } export declare enum KpiPeriodType { DAY = "DAY", WEEK = "WEEK", MONTH = "MONTH", QUARTER = "QUARTER", YEAR = "YEAR", RANGE = "RANGE", ALLTIME = "ALLTIME" } /** * KPI scoreType — value → score 변환 방식 * * 미설정(null)이면 score 변환이 정의되지 않은 상태. * * DIRECT — value = score, 별도 변환 없음. * value 자체가 최종 성과 점수로 사용됨. * 예: Y1~Y6(영역별 성과), Z(전체스코어) — formula로 계산된 value가 곧 score. * 예: X14(일정성과 수준 평가) — 감리자가 입력한 1~5점이 곧 score. * * FORMULA — scoreFormula 수식으로 value → score 변환. * KPI 엔티티의 scoreFormula 필드에 정의된 수식을 적용. * 예: "1 - value / 0.82", "if(value >= 90, 100, 70)" * * LOOKUP — grade table(1D 배열)로 raw value → 0~1 score 변환. * KPI 엔티티의 grades 필드에 {minValue, maxValue, score} 배열로 정의. * value가 속하는 구간의 score를 반환. * 예: X11(연면적 대비 공사기간), X33(검측 불합격률), X34(품질 SL-PA) * * CUSTOM — 2D 룩업 등 애플리케이션에서 정의하는 특수 변환. * grades에 다차원 lookup 구조가 저장됨. * 예: X13(일정 이탈 수준) — 공정률(%) × 편차율(%) → 1~5점 */ export declare enum KpiScoreType { DIRECT = "DIRECT", FORMULA = "FORMULA", LOOKUP = "LOOKUP", CUSTOM = "CUSTOM" } /** * KPI valueType — value 획득 방식 * * KPI의 value(측정값/입력값)를 어떤 방식으로 얻는지를 정의한다. * scoreType(value→score 변환)과는 독립적인 개념. * * MEASURED — 외부 시스템(API, DB 연계)에서 자동 수집한 정량 측정값. * 연속 실수값이며, 단위와 범위가 KPI마다 다름. * 예: X11(연면적 대비 공사기간), X33(검측 불합격률), X41(재해율), X61(투입인력 생산성) * 보통 scoreType=LOOKUP과 함께 사용하여 grade table로 score 변환. * * ASSESSED — 감리자/평가자가 직접 입력한 정성 평가. * 배점 기준(1~5점 척도)에 따라 수동 입력됨. * 예: X14(일정성과 수준 평가), X23(비용성과), X35(품질성과), X44(안전성과) * 보통 scoreType=DIRECT와 함께 사용 (value가 곧 score). * * CALCULATED — 산식(formula 필드)으로 하위 KPI들의 가중합 등을 자동 계산. * KPI 엔티티의 formula 필드에 정의된 수식을 기반으로 서버에서 연산. * 예: Y1(일정성과) = X11*0.3 + X12*0.4 + X13/5*0.15 + X14/5*0.15 * 예: Z(전체스코어) = Y1~Y6의 가중 평균 * 보통 scoreType=DIRECT와 함께 사용 (계산 결과가 곧 score). * * COMPOSITE — 다차원 입력의 복합 결과. * 단일 raw value가 아닌 복수의 입력(공정률, 편차율 등)을 조합하여 산출. * 예: X13(일정 이탈 수준) — 공정률(%) × 공기편차(%) 2D 룩업 → 1~5점 * 보통 scoreType=CUSTOM과 함께 사용. */ export declare enum KpiValueType { MEASURED = "MEASURED", ASSESSED = "ASSESSED", CALCULATED = "CALCULATED", COMPOSITE = "COMPOSITE" } export declare class Kpi { readonly id: string; version?: number; domain?: Domain; domainId?: string; name?: string; description?: string; parent?: Kpi; parentId?: string; children?: Kpi[]; isLeaf?: boolean; formula?: string; active?: boolean; state?: KpiStatus; vizType?: KpiVizType; vizMeta?: any; schedule?: string; scheduleId?: string; timezone?: string; periodType: KpiPeriodType; weight?: number; scoreType?: KpiScoreType; valueType?: KpiValueType; grades?: KpiScores; scoreFormula?: string; createdAt?: Date; updatedAt?: Date; deletedAt?: Date; creator?: User; creatorId?: string; updater?: User; updaterId?: string; thumbnail?: string; }