Інтеграція КЛАДР для адресних підсказок на сайті
КЛАДР (Класифікатор адрес Росії) — більш старий стандарт адресної бази порівняно з ФІАС/ГАР. Формально вважається застарілим: ФНС припинила його оновлення, рекомендуючи переходити на ФІАС. Проте на практиці КЛАДР до сих пір зустрічається в проектах — особливо у зв'язці з банківськими та державними системами, які ще не мігрували. DaData підтримує обидва стандарти та повертає коди КЛАДР у відповіді поряд з ФІАС-ідентифікаторами.
Структура КЛАДР
База КЛАДР розповсюджується у форматі DBF. Основні файли:
| Файл | Вміст |
|---|---|
KLADR.DBF |
Регіони, райони, міста, населені пункти |
STREET.DBF |
Вулиці |
HOUSE.DBF |
Дома |
DOMA.DBF |
Додаткові дані по домах |
Коди КЛАДР мають строгу структуру: 13 цифр для населених пунктів, 17 — для вулиць. За кодом можна однозначно відновити ієрархію адреси.
Завантаження в базу даних
Конвертація DBF в PostgreSQL через Python:
import dbfread
import psycopg2
conn = psycopg2.connect("dbname=mydb user=myuser")
cur = conn.cursor()
table = dbfread.DBF('KLADR.DBF', encoding='cp866')
for record in table:
cur.execute(
"INSERT INTO kladr_objects (code, name, socr, index, gninmb, uno, ocatd, status) "
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",
(
record['CODE'], record['NAME'], record['SOCR'],
record['INDEX'], record['GNINMB'], record['UNO'],
record['OCATD'], record['STATUS']
)
)
conn.commit()
Кодування DBF-файлів — CP866, без явного вказування отримаєте кракозябри. Повна база близько 1–2 ГБ, завантаження займає 20–40 хвилин.
Пошук по КЛАДР
Після завантаження структура таблиць дозволяє шукати по полю NAME з обрізкою активних записів (код не повинен закінчуватися нулями після певної позиції — признак застарілої запису):
SELECT
k.name,
k.socr,
k.code,
k.index AS postcode
FROM kladr_objects k
WHERE
k.name ILIKE :query || '%'
AND k.code NOT LIKE '%00000'
ORDER BY k.name
LIMIT 10;
Для вулиць запит аналогічний, але з таблиці kladr_streets з JOIN на kladr_objects за першими 13 цифрами коду.
Коли КЛАДР, а не ФІАС
Є кілька сценаріїв, де код КЛАДР потрібен принципово:
- Інтеграція з банківськими API (багато банків до сих пір приймають тільки КЛАДР-коди для перевірки юрадреси)
- Системи ФНС старого образця
- Деякі транспортні компанії та логістичні оператори
У таких випадках правильна стратегія — отримати адресу через сучасний інтерфейс (DaData з ФІАС), а у відповіді взяти поле kladr_id, яке DaData повертає для кожного адресного об'єкту.
{
"value": "г Москва, ул Тверская, д 1",
"data": {
"kladr_id": "7700000000000360004",
"fias_id": "5ee84ac0-eb57-4bff-b753-3e0f1ca1b95e",
"postal_code": "125009"
}
}
Таким чином користувач вводить адресу в сучасному інтерфейсі, а у БД зберігаються обидва ідентифікатори.
Терміни
Якщо завдання — підключити КЛАДР-підсказки через власну базу, повний цикл (завантаження, індексування, API, фронтенд) займає 1 робочий день. Якщо КЛАДР-коди потрібні тільки для сумісності з зовнішніми системами, а інтерфейс будується на DaData — достатньо половини дня на налаштування маппінгу полів.







