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 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: String(item?.name || item?.criterion || item?.title || "评分项"), score: item?.score ?? item?.weight ?? "", description: String(item?.description || item?.detail || ""), }; }); } 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 assessmentReportData = safeParseJson(root.assessmentReportJson); return { help, assessment, helpReport: formatReport(help.report || help.content || help.suggestion), assessmentReport: formatReport(assessment.report || assessment.content || assessment.feedback), score: root.assessmentScore ?? assessment.score ?? assessmentReportData?.score ?? root.score ?? null, scoreCriteria: normalizeCriteria(assessmentReportData?.criteria || assessment.scoreCriteria || root.scoreCriteria), }; } module.exports = { formatReport, normalizeCriteria, normalizeEvaluationReports, normalizeOperation, safeParseJson, };