Правила сопоставления с реестром¶
Правила сопоставления --- это набор инструкций, по которым программа ищет документы для каждой строки реестра. Пользователь создаёт правила в мастере настройки реестра; программа применяет их при поиске. Каждое правило определяет, какие поля документов сравнивать с колонками реестра, каким способом и с какими весами.
Подробное описание функций поиска --- в разделе Импорт и поиск по реестру.
Устройство правила¶
Каждое правило содержит:
- Название --- для отображения в результатах (например, «По номеру и дате», «По контрагенту и сумме»).
- Набор полей --- пары «колонка реестра → поле документа» с указанием способа сравнения и веса.
- Минимальный балл --- порог, ниже которого документ не считается совпавшим.
- Подправила (необязательно) --- дополнительные условия проверки.
Пример правила:
Название: "По номеру договора и дате"
Поля:
- колонка "Номер договора" → поле "from_content.contract_number"
способ: точный, вес: 40
- колонка "Дата договора" → поле "from_content.contract_date"
способ: точный, вес: 20
Минимальный балл: 0.6
Способы сравнения полей¶
Для каждого поля в правиле указывается способ сравнения (match_method):
| Способ | Применим к | Описание |
|---|---|---|
Точный (exact) |
Все типы | Значения должны совпасть после нормализации |
Приблизительный (fuzzy) |
Текст | Нечёткое сравнение с учётом опечаток и перестановок слов |
Вхождение (contains) |
Текст | Одна строка должна содержать другую |
Диапазонный (range) |
Даты, суммы | Допускается расхождение в пределах указанного допуска |
Подробнее о подсчёте баллов по каждому типу поля --- в разделе Система баллов.
Режимы привязки полей¶
При создании правила пользователь выбирает, откуда брать информацию о том, какие поля документа использовать:
- Из глобальных настроек (
preset) --- поля берутся из спискаsearch_fieldsв настройках программы. Этот режим удобен, когда во всех реестрах используются одни и те же поля. - Вручную (
custom) --- пользователь указывает путь к полю документа для каждой колонки реестра. Этот режим нужен, когда реестр содержит нестандартные поля.
Несколько правил¶
Реестр может содержать несколько правил сопоставления. Это полезно, когда документы разных типов имеют разный набор реквизитов:
- первое правило ищет по номеру договора и дате;
- второе --- по номеру акта и контрагенту;
- третье --- по сумме и дате.
Режимы применения¶
Параметр rule_mode определяет, как программа объединяет результаты нескольких правил:
Все совпадения (all_matches) --- применяются все правила, результаты объединяются. Если один документ найден по нескольким правилам, для каждого поля берётся лучший балл из всех правил:
Правило 1 нашло документ с баллом 0.8 (номер: 1.0, дата: 0.0)
Правило 2 нашло тот же документ с баллом 0.7 (дата: 1.0, контрагент: 0.5)
Объединённый результат: номер: 1.0, дата: 1.0, контрагент: 0.5
В результате документ помечается как найденный по обоим правилам (их названия и идентификаторы сохраняются в полях rule_names и rule_ids).
Первое совпадение (first_match) --- правила применяются последовательно. Как только для строки реестра хотя бы одно правило нашло совпадение, остальные правила для этой строки не применяются. Это ускоряет поиск, если первое правило покрывает большинство случаев.
Подправила¶
Каждое правило может содержать подправила (sub_rules). Подправило --- это дополнительное условие: если основное правило нашло документ, проверяются все подправила, и хотя бы одно из них должно сработать.
Пример использования:
Основное правило: по номеру договора (вес 60) и дате (вес 40), порог 0.6
Подправило 1: по контрагенту (вес 100), порог 0.7
Подправило 2: по сумме (вес 100), порог 0.8
Логика работы:
- Основное правило находит документ с баллом 0.75.
- Проверяется подправило 1: контрагент совпадает с баллом 0.85 (> 0.7) --- условие выполнено.
- Документ принимается.
Если бы контрагент не совпал, проверялось бы подправило 2. Если ни одно подправило не сработало --- документ отклоняется, несмотря на то что основное правило нашло совпадение.
Подправила позволяют добавить дополнительную проверку без увеличения числа полей в основном правиле. Это полезно, когда нужно убедиться, что найденный документ принадлежит правильному контрагенту или имеет подходящую сумму.
Предупреждения по суммам¶
Если в настройках реестра указана колонка суммы (sum_column_index), поиск генерирует предупреждения для найденных совпадений. Когда сумма документа меньше суммы строки реестра более чем на 1 %, к совпадению добавляется предупреждение типа amount_less:
Строка реестра: сумма 100 000
Найденный документ: сумма 85 000
Предупреждение: сумма документа меньше суммы строки реестра
Это помогает пользователю обнаружить ситуации, когда найденный документ покрывает не всю сумму.
Миграция со старого формата¶
В ранних версиях программы вместо правил использовался единственный набор полей (fields). При запуске поиска программа проверяет, есть ли у реестра правила. Если правил нет, но есть поля старого формата, выполняется миграция на лету: все поля оборачиваются в одно правило с названием «Основное правило» и минимальным баллом из настроек реестра.
Это обеспечивает обратную совместимость: реестры, настроенные до появления мультиправил, продолжают работать без ручных изменений.
Сохранение результатов¶
Для каждого найденного совпадения в строке реестра сохраняется информация о том, по каким правилам оно найдено:
| Поле | Описание |
|---|---|
rule_ids |
Список идентификаторов правил, по которым найден документ |
rule_names |
Список названий правил |
field_scores |
Баллы по отдельным полям (лучшие из всех правил) |
score |
Итоговый взвешенный балл |
Эта информация отображается в интерфейсе рядом с каждым совпадением, чтобы пользователь мог понять, какое именно правило привело к результату.