function safeParseJson(value) { if (typeof value !== "string" || !value.trim()) return null; try { const parsed = JSON.parse(value); return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : null; } catch (error) { return null; } } function criterionDisplayName(value) { const name = String(value || "").trim(); return name || "评分项"; } function formatReport(value) { if (value == null) return ""; const parsed = typeof value === "string" ? safeParseJson(value) : value; if (parsed == null) return typeof value === "string" ? value : ""; try { return JSON.stringify(parsed, null, 2); } catch (error) { return String(value); } } function normalizeCriteria(value) { if (!Array.isArray(value)) return []; return value.map((item) => { if (typeof item === "string") return { name: item, score: "", description: "" }; return { name: criterionDisplayName(item?.name || item?.criterion || item?.title), score: item?.score ?? item?.weight ?? "", maxScore: item?.maxScore ?? item?.max ?? "", description: String(item?.rationale || item?.description || item?.detail || ""), }; }); } function normalizeTextList(value) { if (!Array.isArray(value)) return []; return value.map((item) => String(item || "").trim()).filter(Boolean); } function normalizeOperation(operation, root, type) { const value = operation && typeof operation === "object" ? operation : {}; const prefix = type === "help" ? "help" : "assessment"; const flatReportKey = type === "help" ? "helpReportJson" : "assessmentReportJson"; return { ...value, status: String(value.status || root?.[`${prefix}Status`] || "PENDING").toUpperCase(), report: value.report || root?.[flatReportKey] || root?.[`${prefix}Report`] || "", scoreCriteria: value.scoreCriteria || root?.scoreCriteria || [], }; } function normalizeEvaluationReports(evaluation) { const root = evaluation && typeof evaluation === "object" ? evaluation : {}; const help = normalizeOperation(root.help || root.helpEvaluation, root, "help"); const assessment = normalizeOperation(root.assessment || root.assessmentEvaluation, root, "assessment"); const assessmentReportValue = assessment.report || assessment.content || assessment.feedback; const assessmentReportData = safeParseJson(root.assessmentReportJson) || safeParseJson(assessmentReportValue) || {}; return { help, assessment, helpReport: formatReport(help.report || help.content || help.suggestion), assessmentReport: formatReport(assessmentReportValue), score: root.assessmentScore ?? assessment.score ?? assessmentReportData?.score ?? root.score ?? null, scoreCriteria: normalizeCriteria(assessmentReportData?.criteria || assessment.scoreCriteria || root.scoreCriteria), assessmentSummary: String(assessmentReportData?.overallComment || assessmentReportData?.summary || "").trim(), strengths: normalizeTextList(assessmentReportData?.strengths), improvements: normalizeTextList(assessmentReportData?.improvements), }; } export { formatReport, normalizeCriteria, normalizeEvaluationReports, normalizeOperation, safeParseJson };