function calculateProgress()

in src/service/ProgressCalculationService.ts [142:163]


function calculateProgress(startDate: Date, endDate: Date, subtasks: number[]): [storyProgress: number, status: Styles] {
  const today = new Date();
  const totalDays = dateDiff(startDate, endDate);
  const remainingDays = dateDiff(today, endDate) > 0 ? dateDiff(today, endDate) : 0;
  const totalSubtasks = subtasks.length;
  const completedSubtasks = subtasks.filter((t) => t === 100).length;

  const subtaskProgress = totalSubtasks > 0 ? completedSubtasks / totalSubtasks : 0;
  const timelineProgress = totalDays > 0 ? (remainingDays / totalDays) : 0;

  let status: ItemStatus;
  if (subtaskProgress === 0) {
    status = ItemStatus.NOT_STARTED;
  }
  if (subtaskProgress >= (1 - timelineProgress * 1.25)) {
    status = ItemStatus.ON_TRACK;
  } else if ((subtaskProgress >= (1 - timelineProgress * 1.5)) && (subtaskProgress < (1 - timelineProgress * 1.25))) {
    status = ItemStatus.AT_RISK;
  } else {
    status = ItemStatus.OFF_TRACK;
  } return [parseInt((subtaskProgress * 100).toFixed(2)), { ...statusStyles[status], name: status }];
}