Clarify campaign review interventions

This commit is contained in:
2026-08-03 07:22:27 +02:00
parent 5df26be074
commit 1d6c745991
11 changed files with 416 additions and 18 deletions
@@ -0,0 +1,49 @@
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
};
}