Краткий ответ
Историю переносят по отдельному плану: выбирают нужные сущности и период, сохраняют связи, проверяют пробную загрузку и сверяют результат. Исторические записи не должны незаметно запускать действия, предназначенные для новых событий.
Определите, зачем нужна история
Переносить все доступные записи не всегда полезно. Для работы менеджера может быть достаточно открытых сделок и недавних обращений, а для отчётности требуется другой период. Согласуйте задачи, ради которых сохраняются данные, и доступ к архиву. Решение о составе принимают владельцы процесса и данных, а не только разработчик интеграции.
Отдельно разберите вложения, комментарии и историю статусов. Их объём и качество могут существенно отличаться от карточек. Укажите, что переносится в рабочую систему, что остаётся в доступном архиве и что требует дополнительного согласования. Не обещайте полное восстановление прошлых событий, если источник хранит только текущее состояние.
Составьте карту связей
| Сущность | Важная связь | Риск потери |
|---|---|---|
| Контакт | Компания и обращения | Несколько карточек одного лица |
| Заказ | Строки и платежи | Неполный состав продажи |
| Документ | Версия и владелец | Файл без понятного назначения |
| Событие | Объект и время | Искажённая последовательность |
Используйте устойчивые исходные идентификаторы и таблицу соответствий. Названия и номера, которые пользователь может менять, не всегда подходят для связи. До загрузки определите порядок: сначала родительские сущности, затем зависимые. Сопоставление полей должно охватывать пустые значения, справочники и несовместимые форматы.
Отделите импорт от текущих событий
Исторический заказ не должен автоматически отправлять покупателю новое письмо или повторно создавать доставку. Подготовьте режим загрузки, в котором согласованные побочные действия отключены или явно управляются. Проверяйте это на пробной партии. Название операции «импорт» не гарантирует, что автоматизации принимающей системы не сработают.
Продумайте повторный запуск после сбоя. Часть записей может уже находиться в новой системе. Идемпотентность загрузки и журнал обработанных объектов помогают избежать дублей, но правила обновления существующих данных всё равно нужно согласовать. Новое значение из старого источника не должно безусловно перезаписывать актуальную правку сотрудника.
Выполните пробную загрузку
Выберите набор, содержащий обычные и сложные случаи: несколько контактов компании, отменённый заказ, частичную оплату и запись без обязательного поля. Сравните ожидаемый результат до массового переноса. Проверка только общего количества строк не обнаружит перепутанные связи или неверный часовой пояс.
Сверяйте количество, контрольные суммы там, где они осмысленны, распределение по статусам и отдельные карточки. Разницу объясняйте правилами преобразования. Если две исходные записи объединены по согласованному решению, это не ошибка количества. Но такое объединение должно быть воспроизводимым и отражённым в протоколе.
Учебный пример: история заказов
В учебном проекте нужно загрузить прошлые заказы и включить ежедневный обмен. Команда устанавливает временную границу: история до выбранного момента переносится пакетом, последующие изменения проходят регулярным процессом. Для заказов, изменённых во время переноса, предусмотрена отдельная сверка, чтобы не потерять оплату или обновлённый статус.
Пробный импорт показывает, что старые отменённые заказы вызывают стандартное уведомление. До массовой загрузки команда меняет режим обработки и повторяет проверку. Затем контролирует отсутствие повторных заказов на границе периодов. Пример подчёркивает, что успешное чтение API ещё не означает безопасную загрузку в рабочий процесс.
Зафиксируйте завершение переноса
Акт сверки содержит охваченный период, сущности, исключённые поля, преобразования и нерешённые записи. Назначьте владельца разбора исключений и срок доступности исходного архива. Не закрывайте старую систему сразу после появления первых карточек в новой, если проверка связанных документов ещё не завершена.
После запуска контролируйте поток изменений и расхождения с перенесённой историей. План возврата должен учитывать новые данные, появившиеся после переключения. Итог работы — прослеживаемая история и устойчивый обмен, а не только файл с отметкой об успешной загрузке. Это позволяет пользователям доверять данным и объяснять происхождение спорной записи.
Как не отправить клиентам уведомления за всю импортированную историю
Историческая загрузка должна отличаться от появления новой бизнес-операции. Укажите режим импорта и перечень побочных действий, которые он не запускает: письма, задачи менеджеру, списание квоты или новое событие аналитики. При этом обязательные связи и история происхождения должны сохраняться.
Проведите пробу на небольшой синтетической выборке, включая старый оплаченный заказ и отменённую запись. После повторного импорта число объектов не должно расти без причины. Затем включите текущий обмен с контрольной точки и проверьте границу двух потоков. Самая опасная зона — записи, изменившиеся во время переноса; им нужны правила сверки, а не предположение, что история после выгрузки больше не менялась.
Термины из материала
Применить к вашему проекту
Подготовим перенос истории и сверку данных перед включением регулярного обмена между системами.
Обсудить задачу