/** * HRV 与压力指数转换工具 * * 提供统一的 HRV -> 压力指数映射及压力等级判定 */ export type StressLevel = 'low' | 'moderate' | 'high'; export interface StressLevelInfo { level: StressLevel; label: string; description: string; } const MIN_HRV = 30; const MAX_HRV = 130; /** * 将 HRV(ms)转换为压力指数(0-100,数值越高表示压力越大) */ export function convertHrvToStressIndex(hrv: number | null | undefined): number | null { if (hrv == null || hrv <= 0) { return null; } const clamped = Math.max(MIN_HRV, Math.min(MAX_HRV, hrv)); const normalized = 100 - ((clamped - MIN_HRV) / (MAX_HRV - MIN_HRV)) * 100; return Math.round(normalized); } /** * 根据压力指数获取压力等级信息 */ export function getStressLevelInfo(stressIndex: number | null): StressLevelInfo { if (stressIndex == null) { return { level: 'moderate', label: '压力未知', description: '暂无有效的 HRV 数据', }; } if (stressIndex >= 70) { return { level: 'high', label: '压力偏高', description: '建议立即放松,关注呼吸与休息', }; } if (stressIndex >= 40) { return { level: 'moderate', label: '压力适中', description: '保持当前节奏,注意劳逸结合', }; } return { level: 'low', label: '状态放松', description: '身心良好,继续保持', }; }