Fix % recommended: derive from boolean criteria when binaryDecision is null
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled
When scoringMode is not 'binary', binaryDecision is null even though jurors answer boolean criteria (e.g. "Do you recommend?"). Now falls back to checking boolean values in criterionScoresJson. Hides the recommendation line entirely when no boolean data exists. Fixed in both analytics.ts (observer) and project.ts (admin). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1190,7 +1190,23 @@ export const projectRouter = router({
|
||||
const globalScores = submittedEvaluations
|
||||
.map((e) => e.globalScore)
|
||||
.filter((s): s is number => s !== null)
|
||||
const yesVotes = submittedEvaluations.filter((e) => e.binaryDecision === true).length
|
||||
|
||||
// Count recommendations: check binaryDecision first, fall back to boolean criteria
|
||||
const yesVotes = submittedEvaluations.filter((e) => {
|
||||
if (e.binaryDecision != null) return e.binaryDecision === true
|
||||
const scores = e.criterionScoresJson as Record<string, unknown> | null
|
||||
if (!scores) return false
|
||||
const boolValues = Object.values(scores).filter((v) => typeof v === 'boolean')
|
||||
return boolValues.length > 0 && boolValues.every((v) => v === true)
|
||||
}).length
|
||||
|
||||
const hasRecommendationData = submittedEvaluations.some((e) => {
|
||||
if (e.binaryDecision != null) return true
|
||||
const scores = e.criterionScoresJson as Record<string, unknown> | null
|
||||
if (!scores) return false
|
||||
return Object.values(scores).some((v) => typeof v === 'boolean')
|
||||
})
|
||||
|
||||
stats = {
|
||||
totalEvaluations: submittedEvaluations.length,
|
||||
averageGlobalScore: globalScores.length > 0
|
||||
@@ -1200,7 +1216,9 @@ export const projectRouter = router({
|
||||
maxScore: globalScores.length > 0 ? Math.max(...globalScores) : null,
|
||||
yesVotes,
|
||||
noVotes: submittedEvaluations.length - yesVotes,
|
||||
yesPercentage: (yesVotes / submittedEvaluations.length) * 100,
|
||||
yesPercentage: hasRecommendationData
|
||||
? (yesVotes / submittedEvaluations.length) * 100
|
||||
: null,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user