Короткий ответ: перед импортом разделите точные повторы, конфликтующие записи одного ID и просто похожие компании. В этом практикуме локальный скрипт разбирает десять вымышленных строк, а ИИ помогает составить план проверки. На выходе — HTML-отчёт и JSON с причинами. Ничего в рабочей CRM не меняется.
Почему «убрать дубли» — недостаточное задание
Маркетолог выгрузил обращения, менеджер добавил ответственных, затем две таблицы объединили. В файле одна сделка повторилась без изменений, у другой появились разные ответственные и этапы. Ещё у одной компании есть два отдельных проекта. Если просто удалить совпадения по названию компании, можно потерять нормальную сделку. Если оставить последнюю строку каждого ID, можно незаметно выбрать неверного ответственного.
Мы сделали отдельный учебный файл с такими ситуациями. В нём нет телефонов, почты и клиентских данных. Все названия компаний, сделки и обозначения сотрудников вымышлены. external_id здесь означает внешний идентификатор сделки в одной исходной системе. Это правило примера, а не утверждение о полях вашей CRM.

1. Скачайте файлы и запустите проверку
Скачать учебный комплект ZIP. Распакуйте его: внутри demo.csv, изменённый пример changed.csv, скрипт check_import.py, тесты, промпт и готовые отчёты. Учебный CSV доступен отдельно.
Откройте терминал в распакованной папке crm-import-check и выполните команды ниже. Проверено 12 октября 2026 года на macOS arm64, Python 3.9.6. Это фактическая среда проверки, а не рекомендация устанавливать старый Python. Сторонние библиотеки, ключи API и доступ к CRM не нужны. Windows в этом выпуске не проверялась.
python3 check_import.py demo.csv --out my-result
python3 -m unittest -v
Первая команда создаёт новую папку my-result. Откройте my-result/report.html в браузере. Вторая запускает двенадцать проверок. Если папка результата уже существует, скрипт остановится: выберите новое имя, например --out my-result-2. Он намеренно не перезаписывает предыдущую попытку.
Код подготовлен с помощью ИИ и действительно выполнен локально. Скачиваемые результаты получены этим скриптом; промпт ниже предназначен для вашего повторения. Отдельный ответ стороннего ИИ-чата здесь не выдаётся за проведённый эксперимент.
2. Договоритесь о правилах до очистки
| Что найдено | Правило этой практики | Что делать дальше |
|---|---|---|
| Один ID и одинаковые пять полей | Первое вхождение — кандидат, остальные — точные повторы | Проверить происхождение повтора; исходник сохраняется |
| Один ID, разные значения полей | Вся группа — конфликт | Сверить историю и источник, не выбирать последнюю строку автоматически |
| Пустой ID | Отдельная категория «нет ID» | Найти исходную запись или выяснить, новая ли это сделка |
| Одна компания, разные ID | Не объединять по названию | Проверить предмет сделки и правила идентификации |
| Пробелы в начале или конце поля | Остановить автоматическую классификацию строки; проверить связанную группу ID | Не нормализовать ключ молча |
Сравнение ID чувствительно к регистру: L-001 и l-001 различаются. Скрипт не знает, равны ли они в вашей системе. Поэтому изменение регистра должно быть отдельным согласованным правилом, а не незаметной «помощью» ИИ.
CSV здесь использует UTF-8 и запятую как разделитель. Заголовки и порядок полей: external_id,company,deal,owner,stage. При другом заголовке, количестве колонок или пустом файле проверка останавливается. Если ваша выгрузка разделена точкой с запятой, сначала подготовьте отдельную копию в нужном формате. Не заменяйте символы по всему файлу: запятые могут быть частью значений.
3. Сверьте результат по исходным записям
В нашем запуске получилось: 6 кандидатов + 1 точный повтор + 2 конфликтные записи + 1 запись без ID = 10. Это число записей файла, а не число клиентов или новых сделок. «Кандидат» означает только, что по нашим правилам внутри файла не найден блокирующий конфликт. Он ещё может существовать в CRM или не пройти её обязательные поля.
- Записи 2 и 3, L-001. Совпадают все пять полей. Запись 3 отмечена точным повтором записи 2.
- Записи 4 и 5, L-002. В первой ответственный «Менеджер B», этап
new; во второй «Менеджер C» иqualified. Обе записи остаются на проверке. Из файла нельзя узнать, какая версия правильная. - Запись 6. ID пустой. Скрипт не придумывает ключ по названию компании.
- Записи 7 и 8. У «Города света» две разные сделки: настройка аналитики и обучение маркетолога. ID L-004 и L-005 различаются. Они показаны как похожие компании, но не удалены и не объединены.
Номер записи включает заголовок как запись 1. Если внутри ячейки CSV есть перенос строки, номер записи не совпадает с номером физической строки в редакторе. Для проверки открывайте сам CSV, а не ищите число вслепую в текстовом файле.
4. Проверьте, что скрипт замечает новое противоречие
В changed.csv изменён ровно один ответственный: во втором вхождении L-001 стоит «Менеджер Z». Запустите отдельную попытку:
python3 check_import.py changed.csv --out my-changed-result
Ожидается 5 кандидатов, 0 точных повторов, 4 конфликтные записи и 1 без ID. Раньше безопасная по правилам пара теперь целиком конфликтует. Это полезный отрицательный тест: инструмент, который по-прежнему просто удаляет второе вхождение, пропускает изменение данных.
Независимая повторная проверка дала 33 успешных условия контроля; ожидания рассчитаны отдельным кодом без импорта функций инструмента. Двенадцать включённых в комплект тестов также проверяют пробелы в ключе, разный регистр ID, неверные колонки, пустой файл, сохранность исходных данных и экранирование HTML в отчёте. Это ограниченная проверка правил нашего инструмента; она не подтверждает совместимость с импортом конкретной CRM.
5. Попросите ИИ составить план ручной проверки
Передайте учебные demo.csv и report.json из своей папки результата доступному ИИ-сервису. Для рабочей попытки используйте разрешённую обезличенную копию и подходящее вашей организации окружение. Скачать полный копируемый промпт.
Ты проверяешь учебную выгрузку перед импортом в CRM.
Работай только с приложенными CSV и report.json.
CRM не открывай и не меняй.
Правила: external_id — ID сделки в одной системе.
Все поля совпадают у одного ID — точный повтор.
Любое поле различается у одного ID — конфликт всей группы.
Нет ID — нужен вопрос. Одна компания с разными ID
не доказывает дубль. Не исправляй ключи молча.
Сверь каждую строку с CSV и сумму категорий.
Дай: номера записей → исходные значения → причина →
что человек должен проверить в CRM.
Объясни, почему L-004 и L-005 нельзя склеить.
Не выдумывай историю сделки или правильного ответственного.
В конце три вопроса: является ли ID ключом в целевой CRM;
какие записи уже существуют; какие поля обновит импорт.
Не создавай файл «готово к импорту».
Примите ответ только если он ссылается на конкретные записи, сохраняет оба варианта L-002 и не обвиняет сотрудников в ошибке без истории. Хорошая формулировка: «Сверить ответственного и этап по карточке L-002». Плохая: «Назначить Менеджера C, потому что его строка последняя».
6. Что проверить перед настоящим импортом
Этот отчёт помогает разбирать файл, но не разрешает загружать его в рабочую CRM. Сначала проверьте, какой ключ сопоставления использует конкретный импорт, какие записи уже есть, как он обращается с пустыми полями и обновляет ли ответственных. Сохраните резервную копию и проверьте несколько разрешённых учебных записей в отдельной среде. Файл с реальными контактами для повторения этой статьи не нужен.
После импорта контроль — это чтение самих созданных и обновлённых записей, а не только сообщение «успешно». Выберите по одному примеру: новая запись, существующая, конфликтная и повтор. Сверьте их ID и поля с утверждённым планом. В этом выпуске реальный импорт не выполнялся, поэтому показан только локальный результат.
Когда состав базы уже проверен, следующий практикум поможет найти сделки без следующего шага. Если нужен разбор вашего процесса — опишите задачу CRM: вместе определим один участок для проверки и критерий результата. Не присылайте пароли и выгрузку клиентских контактов в форму.
Источники и границы проверки
Технические детали сверены 12 октября 2026 года: официальная документация Python csv объясняет работу DictReader, заголовков и разделителей; документация json — запись структурированного отчёта; unittest — запуск тестов. Это давно существующие инструменты, а не новая функция CRM или новость про ИИ.
Подготовлено и проверено 12 октября 2026 года. Данные учебные. Новые сделки, экономия времени, снижение ошибок и рост продаж в рабочей базе этим примером не измерялись.