export interface FormulaValidationResult { /** 하드 에러(구문/미지 함수/순환참조)가 없으면 true. 경고는 valid 에 영향 없음. */ valid: boolean; errors: string[]; warnings: string[]; } /** * KPI formula 파싱/검증/매핑 유효성 검사 서비스 * - formula에서 Metric 코드(변수명) 추출 * - 각 Metric의 존재/매핑 유효성 검사 * - 구문 오류, 미정의 Metric, 매핑 오류 등 에러 리포팅 */ export declare class KpiFormulaService { /** * formula 문자열에서 Metric 코드(변수명) 추출 * @param formula KPI formula (예: 'defect_count / total_count * 100') * @returns string[] 추출된 Metric 코드 리스트 */ extractMetricCodes(formula: string): string[]; /** * 순수(DB 무관) 구문 검증 — calculator/validate 로 위임 (단위 테스트는 그쪽에서). */ validateFormulaSyntax(formula: string): import("../../calculator/validate.js").FormulaSyntaxResult; /** * formula 검증 + metric 참조/순환참조 검사. * * 정책: * - **에러(저장 거부)**: 구문 오류, 미지 함수, 순환참조. * - **경고(저장 허용)**: 미정의 metric, 데이터셋 필드 미매핑. (metric 시딩 순서 등 실무 유연성) * * @returns { valid, errors, warnings } — valid 는 errors 가 없을 때 true (warnings 무관). */ validateFormula(formula: string, visited?: Set): Promise; /** * 계층 구조 KPI의 값을 자식 KPI들로부터 집계 계산 * @param kpiId 부모 KPI ID * @param valueDate 계산 대상 날짜 * @param org 조직 단위 * @returns Promise 집계된 값 */ calculateHierarchicalValue(kpiId: string, valueDate: string, org?: string): Promise; /** * KPI가 순환 참조를 생성하는지 확인 * @param kpiId KPI ID * @param parentId 설정하려는 부모 KPI ID * @returns Promise 순환 참조 여부 */ hasCircularReference(kpiId: string, parentId: string): Promise; }