feat: сравнение полученных значений с введёнными

- после проверки DaData/ИИ программа сравнивает результат с тем,
  что заполнено в программе
- серьёзные расхождения выводятся КРАСНЫМИ БОЛЬШИМИ буквами:
  «ВНИМАНИЕ! НАЙДЕНЫ РАСХОЖДЕНИЯ: Руководитель (ФИО): было
  «Иванов И.И.», стало «Петров П.П.»»
- регистр/пунктуация (ИВАНОВ.И.И. vs Иванов И.И.) НЕ считаются
  расхождением; ИНН/КПП/ОГРН — любое отличие цифр = ошибка
- расхождения также пишутся в лог
This commit is contained in:
2026-08-03 14:35:28 +04:00
parent 50d3afdbf2
commit 208e449953
2 changed files with 79 additions and 1 deletions
+31 -1
View File
@@ -20,7 +20,7 @@ from . import (
from .verify import (
check_declension_morpher, check_company_dadata,
check_declension_ai, check_company_ai,
COMPANY_FIELDS,
COMPANY_FIELDS, compare_company_values,
)
from .api_settings import load_api_settings, save_api_settings
@@ -550,6 +550,36 @@ class DokoGenApp:
lines.append(f" {label}: {v}")
lines.append("\nНажмите «✓ Применить», чтобы подставить данные")
self._verify_log('\n'.join(lines))
# Сравнение полученных значений с введёнными (серьёзные расхождения — красным)
current = {
'full_name': self.model.full_name,
'short_name': self.model.short_name,
'address': self.model.address,
'inn': self.model.inn,
'kpp': self.model.kpp,
'ogrn': self.model.ogrn,
'ogrn_date': self.model.ogrn_date,
'chief_position': self.model.chief_position,
'chief_fio': self.model.chief_fio,
}
if 'full_name' in d:
new_vals = d # DaData — фактические данные
else:
new_vals = d.get('proposals') or {} # ИИ — предложения
diffs = compare_company_values(current, new_vals)
if diffs:
warn = "⚠ ВНИМАНИЕ! НАЙДЕНЫ РАСХОЖДЕНИЯ:\n"
for label, old_v, new_v in diffs:
warn += f"{label}: было «{old_v}», стало «{new_v}»\n"
self._verify_text.tag_configure('warn', foreground='red',
font=('Arial', 14, 'bold'))
self._verify_text.config(state=tk.NORMAL)
self._verify_text.insert(tk.END, '\n' + warn, 'warn')
self._verify_text.config(state=tk.DISABLED)
self.log(f"⚠ ВНИМАНИЕ: найдены расхождения ({len(diffs)}): " +
'; '.join(f"{l}: {o}{n}" for l, o, n in diffs[:3]))
# Общий лог с ответом сервиса
summary = ''
if 'full_name' in d: