Необходимо удалить сортировку по количеству ошибок, а сортировку при критичности переделать в фильтры с чекбоксами: высокая, средняя и низкая, которые могут работать, например если мне нужно увидеть только кртичные и средние ошибки. Вот код:
report.ejs:
        <!-- Панель управления: Поиск, Фильтрация и Сортировка -->
        <div class="control-panel">
            <div class="search-container">
                <input type="text" id="searchInput" placeholder="Поиск по задачам..." onkeyup="filterTasks()">
            </div>
            <div class="sort-container">
                <select id="filterSelect" onchange="filterTasks()">
                    <option value="">Критичность по умолчанию</option>
                    <option value="criticality-high">Высокая критичность</option>
                    <option value="criticality-medium">Средняя критичность</option>
                    <option value="criticality-low">Низкая критичность</option>
                </select>
                <select id="sortSelect" onchange="sortTasks()">
                    <option value="">Сортировка по умолчанию</option>
                    <option value="errorAsc">Ошибки: по возрастанию</option>
                    <option value="errorDesc">Ошибки: по убыванию</option>
                </select>
            </div>
        </div>


а вот функция для сортировки критичности:
// Функция для фильтрации задач
function filterTasks(): void {
  const searchInputElem = document.getElementById("searchInput") as HTMLInputElement;
  const filterSelectElem = document.getElementById("filterSelect") as HTMLSelectElement;
  if (!searchInputElem || !filterSelectElem) {
      console.warn("Search input or filter select element not found.");
      return;
  }

  const searchInput: string = searchInputElem.value.toLowerCase();
  const filterSelect: string = filterSelectElem.value;
  const auditTasks = document.getElementsByClassName("audit-task");
  const auditSections = document.getElementsByClassName("audit-section");
  const auditSubsections = document.getElementsByClassName("audit-subsection");

  // Фильтрация задач
  if (auditTasks) {
      Array.from(auditTasks).forEach((task) => {
          const taskElement = task as HTMLElement;
          const descriptionElem = taskElement.querySelector(".audit-header > div");
          const description = descriptionElem?.textContent?.toLowerCase() ?? "";
          const criticality = taskElement.getAttribute("data-criticality");
          const matchesSearch = description.includes(searchInput);
          const matchesFilter = filterSelect === "" || criticality === filterSelect;
          taskElement.style.display = (matchesSearch && matchesFilter) ? "" : "none";
      });
  }

  // Скрытие разделов без видимых задач
  Array.from(auditSections).forEach((section) => {
      const sectionElement = section as HTMLElement;
      const visibleTasksInSection = sectionElement.querySelectorAll('.audit-task:not([style*="display: none"])').length;
      sectionElement.style.display = (visibleTasksInSection === 0) ? "none" : "";
  });

  // Скрытие подпунктов без видимых задач
  Array.from(auditSubsections).forEach((subsection) => {
      const subsectionElement = subsection as HTMLElement;
      const visibleTasksInSubsection = subsectionElement.querySelectorAll('.audit-task:not([style*="display: none"])').length;
      subsectionElement.style.display = (visibleTasksInSubsection === 0) ? "none" : "";
  });

  // Сброс сортировки при фильтрации
  const sortSelectElem = document.getElementById("sortSelect") as HTMLSelectElement;
  if (sortSelectElem) {
      sortSelectElem.value = "";
      resetSort();
  }
}