Почему в системе появляются дубликаты и несовпадения
Дубликаты данных редко появляются потому, что кто-то просто дважды нажал кнопку «Создать».
В корпоративной инфраструктуре одна и та же сущность может проходить через несколько систем, подразделений и процессов. Клиент создаётся в CRM, затем появляется в 1С, его данные используются на сайте, в сервисе доставки и в аналитической системе. Товар приходит из ERP, дополнительно загружается на маркетплейс, редактируется в каталоге и участвует в складских операциях.
Каждая система хранит эту сущность по своим правилам.
В результате одна компания превращается в несколько записей, один товар получает несколько идентификаторов, а один бизнес-статус начинает называться по-разному.
Упрощённо проблема выглядит так:
[ ВОСПРИЯТИЕ ПОЛЬЗОВАТЕЛЯ ]
Для пользователя это один клиент.
[ СОСТОЯНИЕ СИСТЕМЫ ]
Для информационной системы — три разные записи.
Именно поэтому качество корпоративных данных — это не задача одного отдела и не разовая «чистка базы». Это архитектурная задача, связанная с идентификаторами, интеграциями, справочниками, правилами изменения данных и ответственностью систем.
Откуда вообще берутся дубликаты
Первопричина обычно не в самих данных.
Она в том, что разные системы по-разному понимают одну и ту же сущность.
Представим компанию:
ООО «Ромашка»
[ В СИСТЕМЕ CRM ]
ООО «Ромашка»
ИНН: 7701234567
[ В УЧЕТЕ 1С ]
Ромашка
ИНН: 7701234567
[ НА САЙТЕ ]
Ромашка ООО
[ В СТАРОЙ БАЗЕ ]
ООО РОМАШКА
Если система сопоставляет записи только по названию, она может решить, что это четыре разных организации.
- › Если сопоставлять только по телефону, проблемы появятся у компаний с несколькими номерами.
- › Если только по email — один адрес может использоваться несколькими сотрудниками или подразделениями.
Поэтому сопоставление сущностей почти никогда нельзя строить вокруг одного простого поля.
Дубликат — это не всегда полная копия
Это принципиально важный момент.
Две записи могут выглядеть совершенно по-разному и при этом описывать одного человека или организацию.
[ ЗАПИСЬ A ]
Иванов Иван Петрович
+7 999 123-45-67
ivanov@example.ru
[ ЗАПИСЬ B ]
Иванов И.П.
89991234567
ivanov@example.ru
Технически строки различаются.
Но вероятность того, что это один человек, очень высокая.
И наоборот, две записи могут выглядеть почти одинаково, но относиться к разным объектам:
[ КОНТРАГЕНТ 1 ]
ООО «Стройсервис»
ИНН 7701234567
[ КОНТРАГЕНТ 2 ]
ООО «Стройсервис»
ИНН 7707654321
Название одинаковое.
Юридические лица разные.
Поэтому задача дедупликации заключается не в поиске одинаковых строк.
Она заключается в определении:
какие записи описывают один реальный объект, а какие действительно являются разными объектами.
Дубликат — это не всегда полная копия
Это принципиально важный момент.
Две записи могут выглядеть совершенно по-разному и при этом описывать одного человека или организацию.
[ ЗАПИСЬ A ]
Иванов Иван Петрович
+7 999 123-45-67
ivanov@example.ru
[ ЗАПИСЬ B ]
Иванов И.П.
89991234567
ivanov@example.ru
Технически строки различаются.
Но вероятность того, что это один человек, очень высокая.
И наоборот, две записи могут выглядеть почти одинаково, но относиться к разным объектам:
[ КОНТРАГЕНТ 1 ]
ООО «Стройсервис»
ИНН 7701234567
[ КОНТРАГЕНТ 2 ]
ООО «Стройсервис»
ИНН 7707654321
Название одинаковое.
Юридические лица разные.
Поэтому задача дедупликации заключается не в поиске одинаковых строк.
Она заключается в определении:
какие записи описывают один реальный объект, а какие действительно являются разными объектами.
Самая важная вещь — идентификаторы
В зрелой системе у каждой сущности должен существовать устойчивый идентификатор.
[ СИСТЕМНЫЙ КЛЮЧ ]
customer_id = C-0001842
Но одного внутреннего идентификатора новой системы недостаточно, если объект приходит из других систем.
Тогда возникает соответствие:
Такая таблица соответствий позволяет понимать, что несколько технических идентификаторов относятся к одному бизнес-объекту.
Без неё интеграции начинают создавать новые записи при каждом обмене.
Нормализация и сопоставление — разные задачи
Их часто объединяют, хотя это два разных процесса.
[ НОРМАЛИЗАЦИЯ ]
«Как привести данные к единому техническому виду?»
[ СОПОСТАВЛЕНИЕ // MATCHING ]
«Являются ли эти две записи одним объектом?»
То есть:
Если перепутать эти этапы, система начинает принимать техническое сходство за бизнес-идентичность.
Для разных сущностей нужны разные правила
Нельзя создать одно универсальное правило дедупликации для всей компании.
[ ФИЗЛИЦО ]
[ ЮРИДИЧЕСКОЕ ЛИЦО ]
[ ТОВАР ]
[ СОТРУДНИК ]
Поэтому сначала нужно определить модель конкретной сущности, а уже потом правила её сопоставления.
Товар особенно легко превратить в несколько объектов
Допустим, в ERP есть:
[ СИСТЕМА ERP ]
Ноутбук Lenovo ThinkPad E14
[ НА САЙТЕ ]
Lenovo ThinkPad E14 Gen 5
[ НА СКЛАДЕ ]
LNV-E14-G5
[ В ФАЙЛЕ EXCEL ]
ThinkPad E14
Если в каждой системе используется собственный идентификатор, одна и та же модель может появиться в аналитике несколько раз.
[ ДИФФЕРЕНЦИАЦИЯ ВАРИАНТОВ ]
Ещё сложнее, если существуют варианты:
Lenovo E14 / 32 GB / 512 GB
Это уже не просто проблема названия.
Нужно определить, является ли это:
- › одним товаром с вариантами;
- › двумя отдельными SKU;
- › одной моделью и двумя комплектациями;
- › разными складскими позициями.
Такие решения должны быть отражены в модели данных.
Статусы тоже создают несовпадения
Представим, что CRM использует:
[ СИСТЕМА CRM ]
in_progress
won
lost
[ УЧЕТ ERP ]
В работе
Закрыт
Отменён
[ БАЗА САЙТА ]
processing
completed
cancelled
На первый взгляд достаточно написать таблицу соответствий:
new → Новый → created
Но возникает более сложный вопрос. Что означает won?
Это:
- › заказ создан;
- › заказ подтверждён;
- › деньги получены;
- › отгрузка выполнена?
У разных систем могут быть разные жизненные циклы.
Поэтому нормализация статусов должна учитывать бизнес-смысл, а не только перевод названий.
Единый справочник не означает, что все системы должны использовать одинаковые значения
Это важный архитектурный нюанс.
Не всегда нужно заставлять все существующие системы работать с одним набором статусов.
Можно построить слой соответствия:
При этом внутренняя терминология каждой системы сохраняется.
Главное — чтобы интеграционный слой понимал соответствия и не терял смысл.
Такой подход особенно полезен, когда изменить старую систему практически невозможно.
А кто вообще должен исправлять данные?
Это уже вопрос ответственности.
Допустим, система обнаружила:
[ КОЛЛИЗИЯ ПОД КЛЮЧУ ]
Два клиента
ИНН одинаковый
Кто должен решить, какую запись оставить?
Нельзя отвечать «IT».
IT может реализовать механизм.
Но бизнес должен определить, какая запись является правильной и кто отвечает за её актуальность.
Поэтому для ключевых данных полезно определить владельцев:
Техническая система может контролировать качество, но не должна самостоятельно придумывать бизнес-истину.
Источник истины должен быть один
Если одна и та же характеристика свободно изменяется в пяти системах, рано или поздно значения разойдутся.
Например:
[ CRM ]
Менеджер = Иванов
[ ERP ]
Менеджер = Петров
[ САЙТ ]
Менеджер = Иванов
Кто прав?
Если заранее не определить владельца поля, интеграция не сможет решить эту проблему.
Правильнее установить:
А не организовывать бесконечный обмен:
где каждая система может переписать данные другой.
Двусторонняя синхронизация требует особой осторожности
Представим:
↕
ERP
CRM изменила клиента.
Изменение ушло в ERP.
ERP сохранила его и отправила обратно.
Если архитектура не учитывает происхождение изменения, можно получить цикл:
Или более неприятную ситуацию — одна система постоянно перезаписывает другую.
Поэтому при проектировании обмена нужно понимать:
- › кто инициировал изменение;
- › кто является владельцем поля;
- › какое значение новее;
- › можно ли его изменять с другой стороны;
- › как определяется конфликт;
- › что происходит при одновременном редактировании.
Что делать с конфликтующими изменениями
Представим:
10:03 — ERP: клиент Иванов Пётр Петрович
10:04 — CRM: клиент Иванов Игоревич
Последняя запись не обязательно правильная.
Принцип «побеждает последнее изменение» работает далеко не всегда.
Для разных атрибутов могут действовать разные правила.
То есть конфликт решается на уровне конкретного поля или домена, а не только всей сущности.
Автоматическое объединение тоже имеет границы
Можно построить систему, которая автоматически ищет вероятные дубликаты.
Например:
+ Название похоже
+ Телефон совпадает
↓ Высокая вероятность
Но не все случаи стоит объединять автоматически.
Удобно использовать несколько уровней уверенности:
[ 95–100% ]
→ объединить автоматически
[ 70–95% ]
→ отправить на проверку
[ ниже 70% ]
→ считать разными
Конкретные пороги зависят от типа данных и цены ошибки.
[ СТОИМОСТЬ ОШИБКИ ]
Для каталога товаров ошибка может привести к неправильному объединению SKU.
Для юридических лиц — к ещё более серьёзным последствиям.
Поэтому алгоритм должен учитывать стоимость ложного совпадения и ложного разделения.
Почему «нечёткий поиск» не решает проблему
Fuzzy matching действительно полезен.
Он помогает обнаруживать:
ООО «Техносервис»
ООО Техно Сервис
Но он отвечает только на вопрос:
«Насколько похожи две строки?»
А бизнес-задача звучит иначе:
«Это один объект или разные?»
Похожесть — лишь один из признаков.
Надёжное сопоставление может выглядеть так:
Но даже здесь правила должны учитывать особенности конкретного сущности.
Дубликаты появляются и из-за неправильной интеграции
Иногда проблема вообще не в пользователях.
Например, CRM отправляет заказ:
Система создаёт заказ.
Ответ не успевает вернуться из-за сетевого сбоя.
CRM считает запрос неуспешным и отправляет его снова.
Если принимающая система не умеет распознавать повтор:
Запрос №2 → Заказ 58143
Хотя бизнес-заказ был один.
Поэтому для интеграций важна идемпотентность операций.
Например, передаётся внешний идентификатор:
При повторном запросе система видит:
CRM-84521 уже обработан
и не создаёт второй объект.
Это один из фундаментальных механизмов защиты данных при автоматическом обмене.
Удаление тоже может создавать несоответствия
Представим, клиент удалён в CRM.
Что должно произойти в остальных системах?
Удалить его физически?
Заблокировать?
Пометить архивным?
Оставить историю заказов?
Если удалить запись полностью, можно разрушить связи с документами.
Поэтому корпоративные системы часто используют не физическое удаление, а состояние:
При этом объект остаётся в истории, но перестаёт участвовать в новых операциях.
Это особенно важно для финансовых, складских и юридически значимых данных.
История изменений важнее текущего состояния
Допустим, сегодня клиент относится к категории:
VIP
Но три месяца назад он был:
STANDARD
Если хранить только текущее состояние, исторический отчёт может показать, что клиент всегда был VIP.
Это искажает аналитику.
Поэтому для значимых атрибутов иногда требуется хранить историю:
Тогда можно ответить не только:
но и:
«Что было на момент конкретной операции?»
Как строится качественный процесс очистки
Очистка данных обычно проходит не одной операцией.
Условно процесс можно представить так:
Профилирование особенно важно.
До исправления нужно понять масштаб проблемы:
- › сколько дубликатов;
- › какие поля чаще всего отличаются;
- › какие источники дают больше ошибок;
- › где возникают пустые значения;
- › какие справочники расходятся;
- › какие сущности невозможно сопоставить автоматически.
И только после этого выбирать способ исправления.
Нельзя просто удалить дубликаты
Представим две записи:
[ КЛИЕНТ A ]
[ КЛИЕНТ B ]
Если удалить одну запись, можно потерять важную информацию.
Поэтому объединение должно быть не:
A + B → удалить B
а:
Архивировать исходную запись
Такой процесс называют merge.
И он требует гораздо большей осторожности, чем обычная очистка таблицы.
Хорошая система должна предотвращать дубликаты, а не только искать их
Если компания каждый месяц проводит очередную «чистку базы», значит проблема решается слишком поздно.
Гораздо эффективнее поставить проверки на входе.
Например, при создании юридического лица:
Так дубликат не появляется в системе изначально.
Для разных сущностей правила могут быть разными.
Качество данных — это непрерывный процесс
Даже после первоначальной очистки проблема не исчезает.
- › Появляются новые пользователи.
- › Подключаются новые системы.
- › Меняются форматы API.
- › Добавляются филиалы.
- › Изменяются справочники.
- › Появляются новые бизнес-процессы.
Поэтому качество данных можно представить как цикл:
Если этот цикл не автоматизирован, база постепенно снова начинает деградировать.
Метрики качества позволяют увидеть проблему до пользователя
Для крупных систем полезно контролировать качество не субъективно, а количественно.
Например:
Пустые ИНН 0,2%
Несопоставленные товары 1,4%
Ошибки справочника 0,3%
Просроченные данные 0,8%
Можно установить допустимые пороги:
[ < 1% ]
→ норма
[ 1–2% ]
→ контроль
[ > 2% ]
→ требуется разбор
Конкретные значения зависят от бизнеса.
Главное — сделать качество данных измеряемым показателем, а не ощущение сотрудников.
Что должно происходить при обнаружении ошибки
Не каждая проблема должна автоматически исправляться.
Иногда система может решить проблему сама:
→ нормализовать
Иногда требуется правило:
→ объединить / проверить
А иногда нужен человек:
→ передать оператору
Поэтому полезно разделять автоматические и ручные решения:
Это позволяет не превращать автоматизацию качества данных в источник новых ошибок.
Где должна находиться логика качества
Если каждое приложение самостоятельно проверяет клиентов, товары и статусы, со временем правила начнут расходиться.
Лучше выделять общие механизмы:
Типичная схема, когда компания объединяет много систем.
Иначе каждая интеграция начинает изобретать собственную версию правил.
Дубликаты — это симптом архитектурной проблемы
Если в компании постоянно возникают:
- › повторные клиенты;
- › разные карточки одного товара;
- › конфликтующие статусы;
- › разные адреса;
- › несогласованные справочники;
- › расхождения между CRM и ERP;
не всегда стоит просто увеличивать объём очистки.
Возможно, проблема находится глубже:
В таком случае очередная очистка базы даст только временный эффект.
Нужно изменить сам способ движения данных.
Как выглядит зрелая модель управления данными
В зрелой architecture для каждой ключевой сущности можно ответить на несколько вопросов:
Если на эти вопросы есть однозначные ответы, вероятность хаотического размножения данных значительно снижается.
Единые данные — это не одинаковые базы
Иногда под «единой системой данных» ошибочно понимают необходимость физически хранить всё в одной базе.
Это не обязательно так.
- › CRM может оставаться CRM.
- › ERP — ERP.
- › WMS — WMS.
- › Сайт — сайтом.
Важно другое:
Системы могут оставаться независимыми, если между ними правильно определены идентификаторы, владельцы данных, правила обмена и преобразования.
Что в итоге делает данные действительно качественными
Одной очисткой базы проблему не решить.
Качественные данные появляются тогда, когда компания одновременно контролирует несколько уровней:
Каждый слой закрывает свою часть проблемы.
Если убрать один из них, система постепенно снова начинает накапливать расхождения.
От очистки данных к управлению ими
Дубликаты и несовпадения редко являются отдельной технической неисправностью.
Обычно они показывают, что информационный контур компании развивался постепенно: появлялись новые системы, филиалы, интеграции, справочники и процессы, а единые правила управления данными за ними не успевали.
Поэтому зрелый подход начинается не с вопроса:
«Как удалить дубликаты?»
А с другого:
«Почему две системы вообще смогли создать две версии одного объекта?»
Если ответ найден, можно устранить первопричину.
Нужно определить владельцев данных, назначить источники истины, сформировать устойчивые идентификаторы, normalise значения, построить правила сопоставления и контролировать обмен между системами.
Тогда архитектура постепенно меняется:
[ БЫЛО ]
[ СТАЛО ]
Именно это отличает разовую очистку базы от полноценного управления качеством данных.
Хорошая система не просто умеет находить дубликаты. Она устроена так, чтобы одни и те же данные не приходилось постоянно исправлять вручную.
API, Webhook или очередь сообщений?
Когда API есть, а интеграция всё равно не работает
Как соединить производство и корпоративные системы
Все инженерные материалы и экспертные статьи
Полный алфавитный справочник ИТ-терминов
🔒 Данные и доступ к системам заказчика обрабатываются в соответствии с согласованными требованиями к безопасности и конфиденциальности. Условия доступа, хранения и обработки данных определяются архитектурой проекта и договором.
Сайт носит исключительно информационный характер и не является публичной офертой в соответствии со статьёй 437 Гражданского кодекса РФ. Цены, состав и условия предоставления услуг уточняются при проектировании решения и фиксируются в договоре. Условия технического сопровождения и уровень сервиса могут дополнительно определяться отдельным соглашением (SLA).
Автоматизация бизнеса и ИИ-решения под ключ
Самозанятый Скопец Антон Викторович ИНН 741709260870