Создайте таблицу Excel Tasks с указанными столбцами и уникальным TaskID, который не меняется при перемещении задачи. Используйте контролируемые списки для Owner, Priority, Status и IsMilestone. Проверяйте, что Done требует CompletedDate, Blocked — BlockerReason и NextReviewDate, а DependencyTaskID существует в Tasks. Оставьте Status вводимым пользователем; добавьте вычисляемый формулой столбец Health.
Логика Health: если Status равен Done или Cancelled, вернуть Closed; если DueDate пуст, вернуть Review; если DueDate<TODAY(), вернуть Overdue; если DueDate<=TODAY()+3, вернуть Due soon; если Status равен Blocked, вернуть Blocked; иначе вернуть On track. Если команда хочет, чтобы препятствия имели приоритет, поместите проверку Blocked перед проверками дат. Добавляйте DaysPastDue только для открытой просроченной работы и не рассчитывайте процент выполнения по календарному времени.
Создайте сводные таблицы по ProjectID и Owner с количеством открытых, просроченных, скоро наступающих, заблокированных и завершённых задач; перечисляйте просроченные задачи высокого приоритета, а не скрывайте их в итогах. Добавьте представление Milestones с сортировкой по DueDate. Каждый вторник добавляйте ProjectID, TaskID, Status, DueDate, Health, Owner и SnapshotDate в таблицу History, чтобы изменения сроков оставались видимыми. Проверки среды: дубликаты ID, отсутствующие ответственные или даты, недопустимые зависимости, устаревший LastUpdated, заблокированные элементы без даты проверки и сверка итогов сводки с отфильтрованными строками задач.