export type ScoreDirection = 'risk' | 'protective' | 'ability' | 'trait' | 'mixed'; export interface AssessmentProfile { id: string; name: string; createdAt: string; updatedAt: string; } export interface ScoreThreshold { min: number; label: string; note?: string; } export interface ScoreMetric { key: string; label: string; value: number; min?: number; max?: number; level?: string; direction?: ScoreDirection; highScoreMeaning?: string; thresholds?: ScoreThreshold[]; } export interface ScoreSummary { primary?: ScoreMetric; metrics: ScoreMetric[]; note?: string; questionnaireVersion: string; scoreVersion: string; min: number; max?: number; reverseItems: number[]; direction: ScoreDirection; highScoreMeaning: string; thresholds: ScoreThreshold[]; scoringStatus: 'structured' | 'raw'; } export interface RecordedAnswer { questionId: number; question: string; value: string; answer: string; } export interface AssessmentRecord { id: string; profileId: string; questionnaireId: string; questionnaireTitle: string; questionnaireVersion: string; scoreVersion: string; category: string; completedAt: string; answers: RecordedAnswer[]; scoreSummary: ScoreSummary; analysisText?: string; retestSuitable?: boolean; recommendedInterval?: '1年' | '3个月' | '一次即可'; } export interface EncryptedRecordPayload { format: 'mindscope-encrypted-record'; version: 1; algorithm: 'AES-GCM'; keyScope: 'device' | 'anonymous-profile'; kdf?: 'PBKDF2-SHA256'; iterations?: number; salt?: string; iv: string; data: string; } export interface EncryptedAssessmentRecord { id: string; profileId: string; questionnaireId: string; questionnaireTitle: string; questionnaireVersion: string; scoreVersion: string; category: string; completedAt: string; encrypted: true; payload: EncryptedRecordPayload; } export interface EncryptedMindScopeBackup { format: 'mindscope-encrypted-backup'; version: 1; algorithm: 'AES-GCM'; iterations: number; salt: string; iv: string; data: string; } export interface MindScopeBackup { format: 'mindscope-backup'; version: 1; exportedAt: string; profiles: AssessmentProfile[]; records: AssessmentRecord[]; }