export type BuildReviewProgressInput = { blocking: number; individualRequired: number; individualReviewed: number; groupRequired: number; reviewComplete: boolean; }; export type BuildReviewProgress = { blocking: number; individualRequired: number; individualReviewed: number; individualRemaining: number; groupRequired: number; groupReviewed: number; groupRemaining: number; required: number; reviewed: number; remaining: number; }; function count(value: number): number { return Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0; } export function calculateBuildReviewProgress(input: BuildReviewProgressInput): BuildReviewProgress { const blocking = count(input.blocking); const individualRequired = count(input.individualRequired); const groupRequired = count(input.groupRequired); const individualReviewed = input.reviewComplete ? individualRequired : Math.min(individualRequired, count(input.individualReviewed)); const groupReviewed = input.reviewComplete ? groupRequired : 0; const individualRemaining = individualRequired - individualReviewed; const groupRemaining = groupRequired - groupReviewed; return { blocking, individualRequired, individualReviewed, individualRemaining, groupRequired, groupReviewed, groupRemaining, required: individualRequired + groupRequired, reviewed: individualReviewed + groupReviewed, remaining: individualRemaining + groupRemaining }; }