This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
================
DaData Connector
================
.. |badge1| image:: https://img.shields.io/badge/maturity-Production-green.png
:target: https://odoo-community.org/page/development-status
|badge1|
Модуль интеграции с сервисом `DaData <https://dadata.ru>`_ для автоматического
заполнения реквизитов контрагентов по ИНН или ОГРН.
**Возможности:**
- Поиск юридических лиц и ИП по ИНН через API DaData
- Автоматическое заполнение реквизитов партнёра: название, адрес, КПП, ОКПО, ОКВЭД, ОГРН, организационно-правовая форма
- Создание контактного лица (руководителя) при наличии данных об управлении
- Виджет поиска ``dadata_search`` на полях ``vat`` и ``ogrn`` в форме партнёра
- Настройка токена DaData через Настройки → Общие настройки → Интеграции
**Таблица содержания**
.. contents::
:local:
Использование
=============
1. Перейдите в **Настройки → Общие настройки → Интеграции** и укажите токен DaData.
2. Откройте форму контрагента.
3. Введите ИНН в поле **Tax ID** (или ОГРН в поле **ОГРН**).
4. Нажмите кнопку с лупой рядом с полем.
5. В открывшемся диалоге проверьте найденные данные и нажмите **Да** для применения.
Конфигурация
============
Токен DaData задаётся через системный параметр ``dadata_connector.dadata_token``
или через интерфейс настроек.
Получить токен можно в личном кабинете `dadata.ru <https://dadata.ru>`_.
Известные ограничения
=====================
- Поиск работает только для российских юридических лиц и ИП.
- Требуется установленная Python-библиотека ``dadata==21.10.1``.
- Модуль зависит от ``l10n_ru_doc`` для отображения российских реквизитов.
Тесты
=====
Запуск::
python odoo-bin -d <db> --test-tags dadata_connector
**common.py** — базовый класс ``DadataConnectorCommon`` и фикстуры:
- ``DADATA_LEGAL_RESPONSE`` — эталонный ответ API для юридического лица (ПАО)
- ``DADATA_INDIVIDUAL_RESPONSE`` — эталонный ответ API для индивидуального предпринимателя
- ``DadataConnectorCommon.setUpClass`` — создаёт тестового партнёра и прописывает тестовый токен в системные параметры
**test_res_partner.py** — тесты модели ``res.partner``:
- ``test_get_dadata_token_returns_token`` — токен возвращается, если системный параметр задан
- ``test_get_dadata_token_raises_when_missing`` — ``ValidationError`` при отсутствии токена
- ``test_parse_legal_entity_basic_fields`` — парсинг ИНН, ОГРН, КПП, ОКПО, ОКВЭД, названия, города, индекса и улицы для юрлица
- ``test_parse_legal_entity_company_form`` — код ОПФ ``12300`` маппится в ``plc``
- ``test_parse_legal_entity_wizard_data`` — данные для wizard: статус, тип организации, название, адрес
- ``test_parse_legal_entity_management`` — извлечение имени и должности руководителя
- ``test_parse_legal_entity_fts_registration`` — серия и номер свидетельства ФНС склеиваются через пробел
- ``test_parse_legal_entity_country_and_state`` — страна резолвится по ISO-коду из ``res.country``
- ``test_parse_individual_name`` — ФИО ИП собирается из частей ``fio``
- ``test_parse_individual_no_kpp`` — КПП не попадает в результат для ИП
- ``test_parse_individual_no_management`` — ключ ``management`` отсутствует, если данных нет
- ``test_parse_individual_no_fts_registration`` — ``sp_register_number`` отсутствует при ``fts_registration: null``
- ``test_get_legal_entity_data_returns_action`` — при ``widget=True`` возвращается ``ir.actions.act_window`` с wizard (DaData замокан)
- ``test_get_legal_entity_data_returns_dict_when_no_widget`` — при ``widget=False`` возвращается словарь с реквизитами
- ``test_get_legal_entity_data_raises_when_empty`` — ``ValidationError`` при пустом ответе DaData
- ``test_get_legal_entity_data_raises_on_http_error`` — ``ValidationError`` при ``HTTPStatusError`` от DaData
- ``test_get_view_sets_dadata_search_widget_on_vat`` — ``_get_view`` проставляет ``widget="dadata_search"`` на поле ``vat``
**test_wizard.py** — тесты ``res.partner.auto_data.wizard``:
- ``test_wizard_creation`` — wizard создаётся с корректными значениями полей
- ``test_button_yes_returns_close_action`` — ``button_yes`` возвращает ``act_window_close`` с флагом ``update: True``
- ``test_wizard_status_selection_values`` — все пять значений статуса принимаются без ошибок
- ``test_wizard_organization_type_individual`` — тип ``individual`` сохраняется корректно
Авторы
======
* MK.lab
Разработчики
============
* MK.lab
Changelog
=========
19.0.2026.04.10
~~~~~~~~~~~~~~~
* Портирование на Odoo 19
* Замена ``_lt`` на ``_t`` (убран в Odoo 18+)
* Виджет переименован в ``dadata_search`` во избежание конфликтов
* Переопределение ``_get_view`` для перекрытия ``partner_autocomplete``
* Удалено поле ``psrn_sp`` из логики парсинга