general-eval-card / lib /na-utils.ts
Avijit Ghosh
unit tests added
a58dac7
// Lightweight helper to determine whether a category should be considered fully Not Applicable.
// It intentionally only treats the category as NA when the category-level field
// `additionalAspects` explicitly marks it as not applicable. Question-level/source
// markers are ignored for category selectability (they are relevant to question details).
export function naReasonForCategoryFromEval(
catEval: any,
benchmarkQuestionIds: string[] = [],
processQuestionIds: string[] = []
): string | undefined {
if (!catEval) return undefined
const isNonNAAnswer = (ans: any) => {
if (ans === undefined || ans === null) return false
if (Array.isArray(ans)) {
return ans.some((a) => {
const s = String(a || "").trim().toLowerCase()
return s !== "n/a" && !/not applicable/i.test(s) && s.length > 0
})
}
const s = String(ans).trim().toLowerCase()
return s !== "n/a" && !/not applicable/i.test(s) && s.length > 0
}
let anyNonNA = false
if (catEval.benchmarkAnswers) {
for (const k of benchmarkQuestionIds) {
if (isNonNAAnswer(catEval.benchmarkAnswers[k])) {
anyNonNA = true
break
}
}
}
if (!anyNonNA && catEval.processAnswers) {
for (const k of processQuestionIds) {
if (isNonNAAnswer(catEval.processAnswers[k])) {
anyNonNA = true
break
}
}
}
if (anyNonNA) return undefined
if (typeof catEval.additionalAspects === "string" && /not applicable/i.test(catEval.additionalAspects)) {
return catEval.additionalAspects
}
return undefined
}