/** * Quality Scorer * Calculates overall requirement quality score */ import { AmbiguityIssue } from './ambiguity-detector.js'; import { CompletenessIssue } from './completeness-checker.js'; import { GapIssue } from './gap-detector.js'; export interface QualityReport { overallScore: number; grade: 'A' | 'B' | 'C' | 'D' | 'F'; breakdown: { ambiguityScore: number; completenessScore: number; consistencyScore: number; }; summary: { totalRequirements: number; totalIssues: number; criticalIssues: number; majorIssues: number; minorIssues: number; }; ambiguityIssues: AmbiguityIssue[]; completenessIssues: CompletenessIssue[]; gapIssues: GapIssue[]; recommendations: string[]; } export interface ScoringWeights { ambiguity: number; completeness: number; consistency: number; } export declare class QualityScorer { private ambiguityDetector; private completenessChecker; private gapDetector; private weights; constructor(weights?: ScoringWeights, language?: 'vi' | 'en' | 'both'); /** * Generate comprehensive quality report */ generateReport(requirements: string[]): QualityReport; /** * Calculate ambiguity score (100 = no ambiguity) */ private calculateAmbiguityScore; /** * Calculate consistency score (100 = no gaps) */ private calculateConsistencyScore; /** * Calculate grade from score */ private calculateGrade; /** * Count issues by severity across all issue types */ private countBySeverity; /** * Generate actionable recommendations */ private generateRecommendations; /** * Quick score without full report */ quickScore(requirements: string[]): { score: number; grade: 'A' | 'B' | 'C' | 'D' | 'F'; }; /** * Check if requirements pass quality threshold */ passesThreshold(requirements: string[], threshold?: number): boolean; }