fb90d372c8
CollapseByExecutorEmail просто выкидывал дубликаты по email, оставляя первую строку как есть — если у неё PositionCode был пуст (исполнитель задан email/должностью), а у отброшенного дубликата задан (пришёл через HeadType), тот терялся молча. Теперь: PositionCode пустой у оставленной строки — переносится с дубликата. Задан у обеих и они РАЗНЫЕ (один и тот же человек получен через два несовместимых HeadType, например Chief и DirectionHead одновременно) — оставляем первый попавшийся и добавляем предупреждение с обоими значениями, а не выбираем молча. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>