Поставщик прислал счёт по почте. Через час отправил тот же документ ещё раз после сканирования с телефона. Файлы разные, checksum разный, изображение немного повернуто. Для учёта это один и тот же счёт.
Поэтому проверка дублей не может заканчиваться hash файла. Нужно определить, совпадает ли бизнес-документ: кто его выпустил, какой номер и дата указаны, какая сумма, какие позиции и не существует ли уже запись с тем же основанием. Поэтому вопрос «как в 1С найти дубли документов» начинается ещё до проведения: нужно определить воспроизводимый бизнес-ключ совпадения.
Я бы делал duplicate detection отдельным обязательным статусом до проведения, а не пытался исправлять двойную запись после факта.
File duplicate и business duplicate нужно разделять
Одинаковый файл определяется просто: checksum совпал, значит байты те же. Это полезно для повторной загрузки из одного канала и защиты от случайного двойного import.
Business duplicate сложнее. PDF могли пересохранить, подписать, отсканировать заново или прислать другим способом. Внешний вид и файл изменились, а хозяйственная операция осталась прежней.
Поэтому я бы хранил оба результата: `same_file` и `same_document_candidate`. Они имеют разные основания и разные правила дальнейшей обработки.
Проверяемые источники: 1С — 1С:Распознавание первичных документов · Google Cloud — Document AI overview
Первый бизнес-ключ — контрагент, номер и дата
Для многих первичных документов сильный кандидат определяется сочетанием поставщика, номера и даты. Контрагента лучше связывать по устойчивым реквизитам, а номер нормализовать без потери исходной строки.
Если такое сочетание уже существует в 1С, новый файл не должен автоматически создавать ещё один документ. Система сравнивает дополнительные признаки и показывает существующую запись.
Но один этот ключ не всегда абсолютен. У разных типов документов бывают особенности нумерации и исправлений. Поэтому правило нужно настраивать по конкретному классу первички.
Проверяемые источники: 1С — 1С:Распознавание первичных документов · 1С — Распознавание и автоматический ввод первичных документов
Сумма и позиции помогают отличить дубль от похожего документа
Два документа одного поставщика с близкими датами могут иметь одинаковую сумму. Это ещё не доказательство дубля. Я бы сравнивал валюту, НДС, количество позиций, артикулы или нормализованные наименования и итоговые значения.
Для точного совпадения реквизитов и позиций можно автоматически выставить высокий статус duplicate. Для частичного совпадения — `probable_duplicate` и показать сотруднику различия.
Важно не заставлять человека визуально сравнивать два PDF целиком. Лучше вывести таблицу отличий: номер, дата, сумма, три изменённые позиции, статус существующей записи.
Проверяемые источники: Google Cloud — Document AI overview · AWS — Tables — Amazon Textract
Исправленный документ не должен исчезнуть как обычный дубль
Поставщик мог прислать исправленную версию с тем же номером и изменённой суммой. Если система просто увидела совпадение номера и заблокировала файл, мы потеряли важное изменение.
Поэтому probable duplicate требует проверки различий. Для исправлений полезно создать связь с предыдущей версией, сохранить оба исходника и явно указать, какой документ является актуальным основанием для дальнейшего действия.
Статус `duplicate` должен означать, что новый файл не несёт отдельной хозяйственной операции. Всё остальное требует более точной классификации.
Проверяемые источники: 1С — Распознавание и автоматический ввод первичных документов
Параллельные загрузки требуют атомарной проверки
Есть техническая ситуация, которую легко пропустить. Один счёт одновременно пришёл из почты и ЭДО. Оба worker проверили базу до того, как другой успел создать запись. Каждый решил, что дубля нет.
Значит, duplicate check должен быть не только аналитическим, но и транзакционным. На устойчивом бизнес-ключе нужен уникальный constraint, блокировка или другой механизм, который не позволяет двум конкурентным операциям создать один объект дважды.
AI здесь не нужен. Это обычная гарантия учётной системы, и она надёжнее любой дополнительной проверки модели.
Перед проведением нужен воспроизводимый статус проверки дубля
Я бы использовал минимум три состояния: `no_match`, `exact_duplicate`, `probable_duplicate`. У каждого сохраняется основание: какой ключ сравнивался, какие существующие документы найдены и в чём различие.
`Exact_duplicate` завершает обработку без нового проведения. `Probable_duplicate` идёт человеку с таблицей сравнения. `No_match` позволяет продолжить остальные проверки документа.
Так duplicate detection становится частью audit trail. Через месяц можно ответить, почему конкретный счёт был пропущен или заблокирован, а не восстанавливать решение по догадке.
Проверяемые источники: 1С — 1С:Распознавание первичных документов · 1С — Распознавание и автоматический ввод первичных документов
Очередь дублей должна показывать сравнение, а не два изображения рядом
Сотруднику важна причина совпадения. Я бы выводил существующий документ, новый файл и таблицу реквизитов: поставщик, номер, дата, сумма, позиции, статус проведения и найденные отличия.
Для exact duplicate подтверждение человека обычно не нужно после достаточной проверки. Для probable duplicate интерфейс должен позволить выбрать: дубль, исправленная версия, отдельный документ. Решение сохраняется.
Если оператор каждый раз визуально ищет разницу между двумя PDF, алгоритм только нашёл кандидатов. Проверку он ещё не автоматизировал.
Проверяемые источники: 1С — 1С:Распознавание первичных документов · 1С — Распознавание и автоматический ввод первичных документов
Контрольные вопросы перед внедрением
Можно ли искать дубли документов только по hash файла?
Нет. Hash обнаруживает только идентичные файлы. Один бизнес-документ может быть пересохранён или отсканирован заново. Для учёта нужны реквизиты и сравнение содержимого.
Какие поля использовать для поиска дубля счёта?
Обычно полезны контрагент, номер, дата, сумма, валюта и позиции. Точный набор и приоритет зависят от типа документа и правил вашей учётной системы.
Что делать с похожим, но не идентичным документом?
Не проводить автоматически и не отбрасывать как дубль. Выставить probable duplicate, показать различия и сохранить решение сотрудника как основание следующего статуса.
Проверка дубля готова, когда система может назвать найденное существующее основание и перечислить совпавшие реквизиты. До такого статуса повторный счёт нельзя безопасно проводить и нельзя автоматически выбрасывать.
Для соседних проверок пригодятся для «как в 1С найти дубли документов»: Как передавать данные из PDF в 1С с подтверждением сотрудника · Как AI сравнивает договор, счёт и акт между собой · Как настроить роли и права доступа в автоматизации документов.
