@@ -395,6 +395,9 @@ export default function ParticipanteProyectoPage() {
395395 )
396396 }
397397
398+ const activeReviewerRole = project ?. isFinalist ? "judge" : "admin"
399+ const phaseReviews = reviews . filter ( ( r ) => r . reviewerRole === activeReviewerRole && ! r . disqualified )
400+
398401 return (
399402 < ProtectedRoute allowedRoles = { [ "participant" ] } >
400403 < DashboardLayout title = { t . dashboard . sidebar . myProject } >
@@ -425,13 +428,10 @@ export default function ParticipanteProyectoPage() {
425428 ) }
426429 </ div >
427430
428- { showScoresToTeams && reviews . length > 0 && (
431+ { showScoresToTeams && phaseReviews . length > 0 && (
429432 < div className = "space-y-6" >
430433 { scoringCriteria . length > 0 && ( ( ) => {
431- const relevantPhaseReviews = reviews . filter ( r =>
432- ( project ?. isFinalist ? r . reviewerRole === "judge" : r . reviewerRole === "admin" ) && ! r . disqualified
433- )
434- if ( relevantPhaseReviews . length === 0 ) return null
434+ if ( phaseReviews . length === 0 ) return null
435435
436436 return (
437437 < GlassCard className = "border-brand-yellow/20 bg-brand-yellow/5" >
@@ -443,13 +443,15 @@ export default function ParticipanteProyectoPage() {
443443 </ div >
444444
445445 < div className = "grid grid-cols-1 gap-2" >
446- { scoringCriteria . map ( ( c ) => {
447- const avgRaw = relevantPhaseReviews . reduce ( ( sum , r ) => sum + ( r . rawScores ?. [ c . id ] || 0 ) , 0 ) / relevantPhaseReviews . length
446+ { scoringCriteria . filter ( c => ( c . targetRole || "judge" ) === ( project ?. isFinalist ? "judge" : "admin" ) ) . map ( ( c ) => {
447+ const avgRaw = phaseReviews . reduce ( ( sum , r ) => sum + ( r . rawScores ?. [ c . id ] || 0 ) , 0 ) / phaseReviews . length
448+ const rubricWeight = Number ( c . weight ) > 0 ? Number ( c . weight ) : 1
449+ const weightedScore = ( avgRaw / 10 ) * rubricWeight
448450 return (
449451 < div key = { c . id } className = "flex flex-col gap-1 bg-black/20 p-3 rounded border border-white/5" >
450452 < div className = "flex justify-between items-center" >
451453 < span className = "text-xs font-bold text-brand-cyan" > { c . name } </ span >
452- < span className = "text-sm font-bold text-brand-yellow" > { Math . round ( avgRaw * 10 ) / 10 } / 10 </ span >
454+ < span className = "text-sm font-bold text-brand-yellow" > { Math . round ( weightedScore * 10 ) / 10 } / { rubricWeight } </ span >
453455 </ div >
454456 < div className = "w-full h-1 bg-white/5 rounded-full mt-1 overflow-hidden" >
455457 < div
@@ -464,10 +466,10 @@ export default function ParticipanteProyectoPage() {
464466 < div className = "mt-4 pt-4 border-t border-brand-yellow/20 flex justify-between items-center" >
465467 < div className = "flex flex-col" >
466468 < span className = "text-xs font-pixel text-brand-yellow uppercase" > { locale === "es" ? "Puntaje Final" : "Final Score" } </ span >
467- < span className = "text-xs text-brand-cyan/40" > Calculated from { relevantPhaseReviews . length } reviews</ span >
469+ < span className = "text-xs text-brand-cyan/40" > Calculated from { phaseReviews . length } reviews</ span >
468470 </ div >
469471 < div className = "text-3xl font-bold text-brand-yellow font-pixel" >
470- { Math . round ( relevantPhaseReviews . reduce ( ( sum , r ) => sum + ( r . totalScore || 0 ) , 0 ) / relevantPhaseReviews . length ) }
472+ { Math . round ( phaseReviews . reduce ( ( sum , r ) => sum + ( r . totalScore || 0 ) , 0 ) / phaseReviews . length ) }
471473 </ div >
472474 </ div >
473475 </ div >
@@ -477,8 +479,7 @@ export default function ParticipanteProyectoPage() {
477479 } ) ( ) }
478480
479481 { ( ( ) => {
480- const phaseComments = reviews
481- . filter ( r => ( project ?. isFinalist ? r . reviewerRole === "judge" : r . reviewerRole === "admin" ) )
482+ const phaseComments = phaseReviews
482483 . map ( r => r . comment )
483484 . filter ( c => c && c . trim ( ) )
484485 if ( phaseComments . length === 0 ) return null
0 commit comments