Почему похожее название ещё не означает тот же товар

Поставщик пишет «винт М6×30, нержавеющая сталь, уп. 100», в справочнике компании значится «винт DIN 912 M6х30 A2, штука», а в соседней строке — похожий винт длиной 35 мм. Человеку различие заметно. Поиску по строкам и тем более языковой модели оно может показаться мелочью. Если автоматически подставить неверный SKU в заказ или накладную, ошибка попадёт в остатки, закупочную цену и последующие отгрузки.

Задача не в том, чтобы ИИ красиво переписал номенклатуру. Нужно связать внешнюю строку с внутренней карточкой товара, сохранить исходное обозначение поставщика и доказать, почему связь верна. Это разбор архитектуры, а не отчёт о результатах конкретной компании: экономия времени и доля ошибок зависят от качества вашего справочника.

Начинайте с идентификатора и единицы измерения

Первый слой — точные соответствия. Если в документах есть артикул производителя, код поставщика или GTIN, сопоставьте его с таблицей проверенных связей. GS1 определяет GTIN как уникальный идентификатор торговой единицы; при этом уровень упаковки имеет значение. Код коробки не следует без проверки считать кодом одной штуки. Внутренний SKU остаётся вашим идентификатором: один внешний код может требовать явной связи с ним и коэффициента пересчёта.

Минимальная карточка для сверки содержит исходную строку, поставщика, его код, производителя, GTIN при наличии, категорию, размер и материал, единицу измерения, количество в упаковке, внутренний SKU и статус связи. Не выбрасывайте оригинальный текст после нормализации: по нему закупщик позднее объяснит спорный выбор. У версий справочника и правил тоже должна быть дата, иначе повторная обработка документа может дать другой результат без понятной причины.

Сначала нормализуйте безопасные вещи: пробелы, регистр, общепринятые варианты единиц, формат десятичного разделителя. Не удаляйте размер, марку, ёмкость, число штук в упаковке и другие признаки, меняющие сам товар. «10 шт.» и «100 шт.» похожи лексически, но не в закупке. Сопоставление строки стоит разделить на три состояния: подтверждённый SKU, несколько кандидатов, нет подходящего товара. Последнее — повод завести новую карточку через обычную процедуру, а не выдумать ближайший аналог.

Поиск кандидатов — не разрешение на проводку

Когда точного кода нет, строится короткий список кандидатов. В уже используемой базе PostgreSQL расширение pg_trgm умеет оценивать сходство строк и поддерживает индексируемый поиск. Для разовой очистки файла OpenRefine предлагает кластеризацию и согласование записей; его документация прямо описывает согласование как полуавтоматический процесс с человеческим подтверждением. Эти инструменты помогают найти варианты, но не знают ваши коммерческие правила.

Сравнивайте кандидатов в пределах категории и производителя, затем проверяйте обязательные атрибуты: диаметр, длину, объём, материал, единицу и упаковку. Численный скоринг полезен для сортировки очереди, но высокий балл сходства не отменяет жёсткого несоответствия. Условие «размер различается» должно блокировать автоматическое принятие независимо от красивого названия. Порог уверенности подбирают на своих исторических документах; универсального процента для всех каталогов нет.

Локальная языковая модель уместна там, где названия неструктурированы: она может предложить извлечённые атрибуты, синонимы или объяснение различий между двумя карточками. Ей передают только разрешённый фрагмент документа и ограниченный список кандидатов. Ответ проверяют схемой, допустимыми значениями и правилами единиц. Модель не должна создавать SKU, менять коэффициенты упаковки, проводить документ или тихо исправлять цену. Внутрик, которому дали право «сразу всё починить», способен с одинаковым энтузиазмом объединить болт и почти такой же болт; кнопку подтверждения оставьте человеку.

Где проходит граница интеграции с учётной системой

Практичный поток выглядит так:

  • загрузить файл поставщика или документ через существующий канал импорта, не меняя исходник;
  • выделить точные совпадения по утверждённым кодам и показать причину совпадения;
  • для оставшихся строк получить кандидатов и отметить несовместимые атрибуты;
  • передать спорные строки ответственному сотруднику с двумя карточками рядом;
  • записать утверждённую связь «поставщик — внешний код — внутренний SKU — упаковка — дата»;
  • сформировать черновик для ERP и применять запись только после штатного контроля прав и документа.

Важны права доступа: закупщик видит свои заявки, владелец справочника утверждает новые связи, а сервис импорта имеет минимальные права. Журнал должен хранить исходную строку, предложенных кандидатов, итоговый выбор, автора и время. Ошибку нужно уметь отменить до проведения документа. Если ERP поддерживает тестовый контур или черновик, начните с него; иначе выгружайте проверенный файл для штатного ручного импорта.

Не обязательно разворачивать отдельный сервис ради пилота. Достаточно выгрузки справочника, файла поставщика и рабочей таблицы согласования в уже разрешённом контуре. При регулярном потоке можно использовать существующую базу и изолированную схему или таблицы с отдельными ролями и квотами. Выбор новой инфраструктуры имеет смысл только после проверки нагрузки, требований к данным и уже доступных сервисов.

Экономика: считайте исключения, а не число вызовов модели

Стоимость проекта складывается из очистки справочника, настройки правил, интеграции, проверки спорных строк и сопровождения новых товарных карточек. Сама генерация ответа — только одна строка затрат. Показатель «совпало 95% названий» бесполезен, если оставшиеся 5% дают самые дорогие ошибки. Лучше измерять долю строк, принятых по точному коду, долю отправленных человеку, время разбора одной спорной строки и число ошибочных проводок, найденных до и после пилота.

Для модельного расчёта возьмите 200 строк закупок за месяц и измерьте вручную среднее время сверки на небольшой выборке. Отдельно засеките обработку тех же строк через прототип, добавьте часы на исправление справочника и контроль. Разницу переводите в деньги по полной стоимости рабочего времени, а стоимость ошибок считайте только по собственным подтверждённым случаям. Это именно модель с допущениями, не обещание сокращения штата и не универсальная окупаемость.

Небольшой следующий шаг

Возьмите два-три недавних документа разных поставщиков и 100–200 строк без чувствительных данных вне разрешённого контура. Разметьте вручную верные SKU и типы расхождений. Затем проверьте, сколько строк решают точные коды, сколько — поиск кандидатов и где полезно извлечение атрибутов локальной моделью. До подключения к ERP отдельно проверьте десять наиболее рискованных пар: близкие размеры, разные упаковки, похожие марки и старые артикулы. Если правила и человек не могут объяснить выбор, автоматическое совпадение рано отправлять в учёт.