Сверка двух таблиц нужна, когда заказ есть в CRM, но отсутствует в отчёте склада, или сумма платежа отличается от суммы счёта. Главная сложность заключается в определении того, какие записи вообще относятся к одному объекту. ИИ может помочь составить правила сопоставления и объяснить расхождения, но не должен незаметно подменять точное совпадение похожестью названий.
Опишите договор сверки
У двух файлов должны быть одинаковые границы периода и понятный момент формирования. Вчерашняя выгрузка и сегодняшняя могут различаться совершенно законно. Запишите, по какому полю сравниваются сущности, какие колонки должны совпадать и какая точность допустима для чисел. Отдельно уточните статус отменённых и архивных записей.
Лучший ключ — стабильный идентификатор. Если его нет, составной ключ может включать номер документа, дату и организацию. Имя клиента обычно недостаточно. До объединения проверьте уникальность ключа в каждой таблице: повторяющиеся значения способны размножить строки и создать ложные расхождения сумм.
Пять шагов сверки
- Подготовьте копии файлов и приведите технический формат ключей к одному виду, сохраняя ведущие нули.
- Выделите пустые ключи и дубли в отдельные отчёты. Не пытайтесь молча назначить им случайные соответствия.
- Выполните полное внешнее объединение по согласованному ключу. Оно позволяет увидеть записи, присутствующие только с одной стороны.
- Для совпавших ключей сравните значимые поля. Различайте пустое значение, ноль и отсутствующую строку.
- Присвойте расхождениям категории и владельца дальнейшей проверки: задержка выгрузки, конфликт суммы, различие статуса или неизвестная причина.
Если используете Python, в документации pandas.merge описаны indicator для происхождения строки и validate для проверки типа связи. Там же отмечено особое поведение пустых ключей: они могут сопоставляться друг с другом. Поэтому такие записи разумно отделять до основного объединения.
Учебный пример
В файле A есть счета 101 на 900 рублей, 102 на 1 200 и 103 на 700. В файле B присутствуют 101 на 900, 102 на 1 250 и 104 на 400. Числа иллюстративные. Итог сверки: одно точное совпадение, один конфликт суммы, одна запись только в A и одна только в B. Разница по счёту 102 составляет 50 рублей, но причина пока неизвестна.
Нельзя назвать счёт 103 неоплаченным только потому, что его нет во втором файле. Возможно, второй файл отражает не платежи, а отгрузки, либо использует другое время отсечения. Сначала проверьте назначение источника. Хороший отчёт сохраняет исходные значения обеих сторон, а не показывает только вычисленную разницу.
Промпт для плана и отчёта
Помоги сверить таблицы A и B. Ключ: invoice_id, связь ожидается один к одному. Сравниваем amount и status. Сначала проверь пустые и повторяющиеся ключи. Не используй нечёткое сопоставление без отдельного списка кандидатов. Верни категории: совпало, только A, только B, конфликт полей. Сохрани значения обеих сторон и дельту суммы. Не объясняй причины без доказательств. Подготовь контрольные количества и вопросы владельцам источников.Как проверить полноту
После исключения проблемных ключей количество уникальных ключей A должно равняться сумме совпавших и присутствующих только в A. Аналогичная проверка нужна для B. Сверьте несколько записей каждой категории вручную. Проверьте, что округление выполняется в правильной валюте, а допуск не скрывает систематическую разницу.
Если приходится применять похожесть строк, создайте второй этап: кандидаты, показатель похожести и ручное решение. Совпадение «Альфа» с «Альфа-Сервис» нельзя принимать автоматически только из-за близкого написания. После подтверждения храните соответствие в справочнике, чтобы следующая сверка была повторяемой. Это полезнее, чем каждый раз заново просить модель догадаться.
Частые вопросы
Можно ли сверять по номеру строки?
Только если порядок является частью подтверждённого формата. Обычно сортировка и вставка одной строки нарушают такое соответствие, поэтому нужен устойчивый ключ.
Что делать со связью один ко многим?
Определите уровень сверки. Несколько платежей можно агрегировать до счёта, сохранив детализацию. Нельзя сравнивать итог счёта с каждой отдельной оплатой и считать все строки конфликтами.
Когда расхождение считается закрытым?
Когда установлена причина, назначено действие и сохранено подтверждение исправления либо допустимости различия. Исчезновение строки из нового отчёта само по себе ещё не объясняет прошлую ошибку.
Гайд подготовлен для Tarasov Code — проекта Ильи Тарасова и TarasovWeb.
