feat: загрузка доходов организации из DaData (показатель 8)

- verify.py: get_company_finance_dadata(inn, token) — findById/party,
  возвращает finance (последний отчётный год) + finance_history (по годам)
- ui.py: кнопка «🌐 Загрузить доходы из DaData (по ИНН)» в блоке
  «Доходы за 5 лет (показатель 8)» — по ИНН организации подтягивает
  доходы за последние 5 лет и заполняет income_year_1..5
- если в тарифе DaData нет финансовой отчётности — понятное сообщение,
  доходы заполняются вручную
This commit is contained in:
2026-08-04 23:20:04 +04:00
parent 7742cb1e10
commit c1ad496319
2 changed files with 105 additions and 0 deletions
+32
View File
@@ -251,6 +251,38 @@ def check_declension_morpher(text):
# ============================================================
# DADATA — проверка организации по ИНН (нужен API-ключ)
# ============================================================
def get_company_finance_dadata(inn, token):
"""Доходы организации по годам через DaData (findById/party → finance/finance_history).
Возвращает (dict, ошибка): dict вида
{'finance': {...}, 'history': [{'year': 2023, 'income': 123456, ...}, ...]}
finance — показатели за последний отчётный год;
history — история по годам (если доступна в тарифе DaData).
"""
if not token:
return None, "Не задан API-ключ DaData (Файл → Настройки → API)"
inn = (inn or '').replace(' ', '')
if not inn or not inn.isdigit():
return None, "Введите ИНН для загрузки доходов"
headers = {
'Content-Type': 'application/json',
'Authorization': f'Token {token}',
}
js, err = _http_json(DADATA_URL, data={'query': inn}, headers=headers)
if err:
return None, err
suggestions = (js or {}).get('suggestions') or []
if not suggestions:
return None, f"DaData: организация с ИНН {inn} не найдена"
d = suggestions[0].get('data') or {}
return {
'finance': d.get('finance') or {},
'history': d.get('finance_history') or [],
'inn': d.get('inn', inn),
'name': (d.get('name') or {}).get('short_with_opf') or suggestions[0].get('value', ''),
}, None
def check_company_dadata(inn, token):
"""Проверка организации по ИНН/ОГРН через DaData.