1.1 KiB
Raw Blame History

Решение

Суммы выбранных строк считаются один раз до упаковки внутри тройки (rule_id, A, B) как чистая функция. elimination_amount сохраняет ранее согласованное значение абсолютного расхождения; новое eliminated_amount содержит min(ΣA, ΣB) при пороге не более 5 %, иначе 0, и всегда 0 для manual. Нулевая меньшая сторона даёт deviation_percent = null и нулевую элиминацию.

Упаковка не влияет на итог. Для обратной направленной пары клиент переставляет company_a_id и company_b_id. Эталонный Excel используется только для сверки точных встречных строк: он списывает полную сумму каждой стороны, поэтому его общий итог не равен системному правилу минимума.