
Модуль l10n_ru_inn подключает к Odoo сервис DaData.ru — автозаполнение реквизитов контрагента по ИНН, банка по БИК и подсказки при вводе адреса. Интересна тут не сама идея (она очевидна), а то, как она реализована: без единого нового поля ввода для поиска.
Не новый виджет, а подмена источника данных
В Odoo уже есть штатный механизм автодополнения контрагента — то самое поле, где можно начать вводить ИНН или название компании и получить подсказки. По умолчанию оно обращается к платному сервису Odoo IAP (Enrichment/Autocomplete), который не заточен под российские реквизиты. Модуль перехватывает ровно этот же механизм — методы autocomplete_by_vat, autocomplete_by_name и enrich_by_duns в res.partner — и для российского ИНН (10 или 12 цифр) отправляет запрос в DaData вместо IAP. Для пользователя ничего не меняется: то же поле, тот же интерфейс, просто подсказки теперь настоящие и бесплатные (в рамках лимита DaData), а не «нет данных».
Что заполняется по ИНН
Из ответа DaData вытаскиваются не только имя и ИНН, а полный набор реквизитов юрлица: краткое и полное наименование, КПП, ОГРН, ОКПО, код ОКВЭД (сопоставляется с записью в справочнике l10n_ru.okved), организационно-правовая форма ОКОПФ (аналогично сопоставляется со справочником), статус организации — действует ли она или уже ликвидирована — и отдельно адрес по ЕГРЮЛ, который для юрлица часто не совпадает с фактическим адресом доставки.
Адрес — отдельный виджет
Для поля «Улица» на форме партнёра с российской компанией модуль подключает собственный виджет dadata_address, который на лету запрашивает у DaData подсказки по адресам (`suggest/address`) и разбирает структурированный ответ на улицу с домом, город, регион и индекс — включая сопоставление региона и страны с соответствующими записями в Odoo, чтобы поля выбора страны/региона заполнялись сами, а не оставались пустыми.
Банк — по кнопке «Заполнить по БИК»
На карточке банка похожая логика: ввёл БИК, нажал «Заполнить по БИК» — и подтягиваются платёжное наименование банка, сам БИК, корреспондентский счёт, SWIFT, адрес, телефон и статус банка по данным ЦБ РФ (действующий/ликвидирован). Отдельная модель хранит эти специфичные для российской банковской системы поля, которых нет в стандартном res.bank.
И ещё: статусы не протухают молча
Данные о контрагенте, полученные один раз при создании карточки, со временем могут устареть — организация может быть ликвидирована уже после того, как с ней начали работать. Для этого в модуле есть отдельное (по умолчанию выключенное) еженедельное крон-задание, которое проходит по существующим контрагентам и обновляет их статус в ЦБ/ЕГРЮЛ через тот же API DaData.
Итог
Один API-ключ DaData на компанию (Настройки → Компания → DaData), обёрнутый в аккуратный HTTP-клиент с таймаутом и понятными сообщениями об ошибке вместо голого стектрейса — и весь стандартный процесс ввода контрагента в Odoo начинает работать по российским реквизитам так, как будто это было заложено в системе изначально.