Guid по фиас как найти

Для нахождения Кода дома по ФИАС необходимо выполнить следующие пункты:

1. Перейти по ссылке http://fias.nalog.ru/.

2. Перейти по ссылке “Расширенный поиск” (рис.1).

Рисунок 1. Главная страница сайта fias.nalog.ru

3. В новой вкладке ввести адрес дома (район, город, улица, дом) -> “Найти” (рис.2).

4. В нижней части вкладки высветится строка с кодом ФИАС (рис.3).

Рисунок 2. Поиск кода дома по ФИАС

Рисунок 3. Результаты поиска кода дома по ФИАС

Как перейти от КЛАДР к ФИАС и ничего себе не сломать

Время на прочтение
7 мин

Количество просмотров 99K

ГНИВЦ ФНС сообщает, что с начала 2018 года КЛАДР перестанет существовать и скачать его будет нельзя.

Дисклеймер:
Если вы совсем не поняли, что означают эти наборы букв, ничего страшного. Ниже мы расскажем о реалиях работы с адресами в России. Если вам это неинтересно, почитайте про топографические каламбуры.

Правильные адреса нужны компаниям, которые любят своих клиентов. Знакомые банки, страховые и интернет-магазины, которые сейчас используют справочник КЛАДР, спрашивают нас, что же делать дальше. Поэтому мы запарились и написали пошаговое руководство по переходу

с одних букв на другие

от КЛАДР к ФИАС.

Зачем нужны классификаторы адресов

Компаниям нужны адреса клиентов, чтобы рассылать письма, указывать в договорах и соглашениях. Но мало просто отправить письмо: желательно, чтобы его получили и прочитали. Поэтому адреса должны быть правильными и понятными.

Как вы думаете, какой государственный орган наиболее заинтересован в том, чтобы вы получали от него письма? Правильно! Налоговая. Поэтому ФНС России много лет разрабатывает и поддерживает ведомственные общероссийские классификаторы адресов. И так как более полных справочников нет, их стали использовать повсеместно.

Сначала был КЛАДР, и было в нем 6 уровней:

Регион → Район → Город → Населенный пункт → Улица → Дом со строениями и корпусами

С 2012 года в эксплуатацию ввели новый классификатор — ФИАС. Про основные отличия мы писали три года назад в статье «ФИАС или КЛАДР: выбираем справочник адресов». В ФНС к разработке нового классификатора подошли основательнее и постарались учесть все

грабли

минусы КЛАДР. Из интересного добавили дату начала и окончания записи, ввели фиксированный ID для каждого дома (предполагается, что он не будет меняться).

До сих пор продолжают обновляться оба классификатора, но поддерживать совместимость становится сложнее. В прошлом году в ФИАС начали добавлять новые уровни. Например, планировочные структуры — это всякие дачные товарищества и микрорайоны, в классификаторе их уже больше 81 000. В конечном итоге в ФНС приняли логичное решение прекратить поддержку КЛАДР и удалить его в конце 2017 года.

Как адреса хранятся в ФИАС и КЛАДР

Мы видели много способов хранения адресов в структуре КЛАДР. В основном они сводятся к двум вариантам:

  1. Код КЛАДР до улицы + домовая часть вида «дом 1 строение 3 квартира 33», так как части домов в классификаторе хранятся как диапазоны
  2. Адрес в виде текста — одним полем или разбитый по структуре КЛАДР.

Так как в ФИАС нет части домов, мы рекомендуем хранить адрес как:

  1. Код ФИАС до улицы + дом + квартира для идентификации адреса (подробные рекомендации).
  2. Адрес одной строкой в формате ФИАС. При этом лучше сохранять исходный адрес. ФИАС — это все-таки справочник налоговой, и там есть не всё.

То есть задача миграции сводится к тому, чтобы перевести код или текстовый адрес в формате КЛАДР в код ФИАС.

Классификационные коды выглядят так:

  • КЛАДР: СС+РРР+ГГГ+ППП+УУУУ+ДДДД;
  • ФИАС: СС+РРР+ГГГ+ППП+СССС+УУУУ+ДДДД (или ЗЗЗЗ)+ОООО.

Смотрится страшно, рассмотрим пример: Ленинградская обл, Всеволожский р-н, деревня Кудрово, мкр Новый Оккервиль. Адрес реально существует, вот он на Яндекс.Картах. Классификационный код КЛАДР и ФИАС на первый взгляд для него выглядит одинаково: 470050000550023. Разложим его на составляющие.

Раскладываем адрес по уровням ФИАС и КЛАДР

Из примера видно, что даже в простых ситуациях между классификаторами возникает недопонимание. Но есть еще один очень важный момент.

Классификационный код отражает текущую структуру адреса, а она может измениться. Например, у Оккервиля изменится район и весь код станет недействительным, мы его уже не найдем.

Чтобы избавиться от этого, в ФИАС добавили еще идентификационный код ФИАС. Это глобальный идентификатор для каждого объекта: города, улицы, района и т. д. Выглядит он как набор букв и цифр, который формируется по стандарту GUID (Globally Unique Identifier). Типичный GUID в ФИАС выглядит так: f77948dc-7bc8-42cb-979e-2c958d162d63.

Код КЛАДР → идентификационный код ФИАС

Если адрес у вас хранится как код КЛАДР улицы + домовая часть («дом 1 строение 3 квартира 44»), то для него все относительно просто.


Таблица ADDROBJ хранит все адресные объекты с их идентификаторами

Для работы понадобится таблица ADDROBJ из выгрузки ФИАС в формате xml или dbf. В ней хранятся все объекты (города, улицы и т. д.) подряд с уникальными идентификаторами GUID.

Будем использовать следующие колонки:

  • код КЛАДР (PlainCode);
  • наименование и тип текстом (FormalName и ShortName);
  • актуальность объекта (CurrStatus);
  • почтовый индекс (PostalCode);
  • собственный и родительский идентификатор ФИАС (AoGuid и ParentGuid);
  • уровень (AoLevel).

Пример: Москва, ул Александра Солженицына. Код КЛАДР: 77000000000151900.

Шаг 1. Выделяем из кода КЛАДР код до улицы, то есть берем первые 15 цифр: 77000000000151900.

  • Если КЛАДР меньше 15 цифр, берем 11 и дополняем нулями — это код до населённого пункта: 770000000000000;
  • Меньше 11 цифр — берем 8: 77000000000000000;
  • Меньше 8 — берем 5: 77000000000000000;
  • Меньше 5 — берем 2 цифры кода региона: 77000000000000000.

Шаг 2. Ищем код КЛАДР в поле PlainCode. Если нашлась одна запись, то сохраняем значение поля AoGuid и пропускаем следующий пункт. Но по нашему коду 770000000001519 находится три записи, нужна дополнительная проверка.

Шаг 3. Находим актуальную запись. Значение поля CurrStatus = 0 означает, что запись актуальна. Выбираем ее и сохраняем значение поля AoGuid. Идентификационный код ФИАС найден!

  • Александра Солженицына, CurrStatus = 2;
  • Коммунистическая Б., CurrStatus = 1;
  • Александра Солженицына, CurrStatus = 0, AuGuid = f77948dc-7bc8-42cb-979e-2c958d162d63.

В качестве бонуса соберем текстовый адрес по найденному AoGuid:

  • берем PostalCode — это почтовый индекс: 109004
  • добавляем ShortName и FormalName: 109004, ул. Александра Солженицына
  • если объект является регионом (поле AoLevel = 1), то адрес готов. Но в нашем случаем AoLevel = 7 — это улица. Поэтому ищем родительский элемент по полю ParentGuid и повторяем предыдущий пункт;
  • для улицы Александра Солженицына родительская запись сразу имеет уровень региона — это Москва. Сохраняем ShortName и FormalName и собираем адрес: 109004, г. Москва, ул. Александра Солженицына

Но можно поступить еще проще и воспользоваться готовым сервисом. DaData.ru умеет подсказывать адреса в конкретных регионах, районах, городах и населенных пунктах. Понимает названия («Петергоф»), коды КЛАДР («7800000800000») и ФИАС («8f238984-812b-4bb1-850b-49749fb5c56d»).

Строчный адрес КЛАДР → код ФИАС

Самый простой вариант — воспользоваться DaData.ru. Сервис сделает все за вас автоматически. Но можно и развлекаться самостоятельно.

Адреса одной строкой

Если адреса у вас хранятся одной строкой, вроде этой:
г Москва, улица Большая Коммунистическая, дом 3, то поздравляем, это самая интересная задача. Нужно писать свой адресный парсер, который будет разделять строку в формате КЛАДР на части, искать каждый ее компонент в ФИАС с учетом опечаток, сокращений, исторических названий и определять по ним ФИАС-код. Легче это сделать уже готовым адресным парсером. Как выбрать алгоритм для адресного фильтра, мы рассказывали раньше.

Адреса по КЛАДР

Если адреса у вас хранятся разложенными по КЛАДР, то задача немного проще.

Примерно так выглядит адрес, разложенный по КЛАДР

Код ФИАС можно собрать, используя всё ту же таблицу ADDROBJ. Но в этом случае двигаться по уровням нужно от большего к меньшему.

Шаг 1. Берем название региона и ищем его в поле FormalName таблицы ADDROBJ.

FormalName = Москва
AoGuid = 0c5b2444-70a0-4932-980c-b4dc0d3f02b5

Шаг 2. Идем дальше по уровням вниз и ищем по FormalName с фиксированным родителем — найденным AoGuid на предыдущем шаге. В нашем случае уровни «город» и «населенный пункт» пустые, а следующий непустой уровень — улица.

ParentGuid = 0c5b2444-70a0-4932-980c-b4dc0d3f02b5,
FormalName = Коммунистическая Б. → AoGuid=f77948dc-7bc8-42cb-979e-2c958d162d63

Шаг 3. Если дошли до улицы, то можно найти и дом. Для этого в таблице HOUSE ищем номер дома с фиксированным AoGuid улицы. ФИАС не полон домами, поэтому не расстраивайтесь, если нужный номер не найдется.

AoGuid = f77948dc-7bc8-42cb-979e-2c958d162d63,
дом номер 3
HouseGuid = bce8be1f-f2f7-4cce-836e-08daac0b931e

Подводные камни

Может ли что-то пойти не так? Конечно. Например, по названию может легко найтись несколько объектов. «Москва, Тверская» — это про площадь или про улицу? Тогда нужно сравнивать типы, но не все так просто.

Таблица SOCRBASE хранит полные и сокращенные типы объектов

Тип по КЛАДР может быть сокращенным и полным: «ул» — «Улица», «х» — «Хутор». В ФИАС в явном виде хранится только сокращенный тип (в поле ShortName). Полный тип в сокращенный можно превратить с помощью таблицы SOCRBASE, в ней для каждого уровня хранится соответствие сокращённых и полных типов.

§ § §

И напоследок хорошая новость для тех, кому лень запариваться всем перечисленным. В ближайшее время мы планируем выпустить ФИАС в формате КЛАДР для тех, кто не успеет перейти на формат ФИАС до конца года. Следите за новостями 🙂

P.S. Благодарю за неоценимую помощь в создании этой статьи моих коллег по HFLabs Михаила Березина, Елену Расторгуеву и Антона Жиянова.

Общая информация

В базе у каждого объекта есть два ГУИДа:

  • уникальный ГУИД, это первичный ключ.
  • ФИАС ГУИД, который соответсвует реальному объекту.

По одному ФИАС ГУИДу может быть несколько записей, каждый со своим ключом, но актуальной (с флагом актуальности) будет только одна. По возможности берется актуальная.

Все функции API находятся в /api/address/.

Address

API Description
GET api/address/GetAddressByFiasGuid?guid={guid}

Получение данных обо всех родительских указанному объектах (т.е. цепочку от корня до указанного).

GET api/address/GetXmlAddressByFiasGuid?guid={guid}

Получение цепочки, которая заканчивается указанным объектом, в формате XML.

GET api/address/FindAddress?searchString={searchString}&level={level}&count={count}&parentGuid={parentGuid}

Поиск объектов адреса.

GET api/address/GetFullFiasAddress?guid={guid}

Возвращает объект, содержащий весь адрес.

GET api/address/FindAddressObject?formalName={formalName}&prevLevel={prevLevel}&shortName={shortName}

Поиск объекта адреса по параметрам.

Пример использования


Попробуем найти некоторый адрес с помощью этого сервиса.

Сначала получим список всех корневых узлов (по хорошему это должны быть области и автономные округа, города федерального значения):

/api/address/FindAddress?searchString=&level=&count=&parentGuid=

Результат:

[{
		"fiasGuid": "db9c4f8b-b706-40e2-b2b4-d31b98dcd3d1",
		"formalName": "Красноярский",
		"shortName": "край"

        ...
        ...
        ...

		"fiasGuid": "6f2cbfd8-692a-4ee4-9b16-067210bde3fc",
		"formalName": "Башкортостан",
		"shortName": "Респ"
	}, {
		"fiasGuid": "d8327a56-80de-4df2-815c-4f6ab1224c50",
		"formalName": "Адыгея",
		"shortName": "Респ"
	}
]

Попробуем найти Калужскую область:

/api/address/FindAddress?searchString=Калуж&level=&count=&parentGuid=

                [{"fiasGuid":"18133adf-90c2-438e-88c4-62c41656de70","formalName":"Калужская","shortName":"обл"}]

Дочерние объекты Калужской области содержащие “кир”:

/api/address/FindAddress?searchString=кир&level=&count=&parentGuid=b502ae45-897e-4b6f-9776-6ff49740b537

[{
		"fiasGuid": "aafd4756-144b-451a-a3a7-93605cf77e98",
		"formalName": "Кирпичный",
		"shortName": "пер"
	}, {
		"fiasGuid": "239b8705-0b53-4a98-8eb2-346814382422",
		"formalName": "Кирова",
		"shortName": "ул"
	}, {
		"fiasGuid": "daec73dd-a5b5-44dc-a13f-dbe14039730f",
		"formalName": "Кирова",
		"shortName": "пер"
	}, {
		"fiasGuid": "0a5c14f1-c169-49f0-9066-02ddebb532e2",
		"formalName": "Кирпичная",
		"shortName": "ул"
	}, {
		"fiasGuid": "346d7e07-cd5d-44cf-ae77-2133f5e4ecae",
		"formalName": "Белокирпичная",
		"shortName": "ул"
	}, {
		"fiasGuid": "68ea7d9f-4c6c-4e85-8263-346f6c6a2d2e",
		"formalName": "Азаровский Кирпичный Завод",
		"shortName": "п"
	}, {
		"fiasGuid": "22a9f7f2-645d-430d-a086-64998b499c6f",
		"formalName": "Кирпичный з-д МПС",
		"shortName": "ул"
	}
]

Дочерние объекты Калуги начинающиесе на “ки”:

/api/address/FindAddress?searchString=ки&level=&count=&parentGuid=b502ae45-897e-4b6f-9776-6ff49740b537

[{
		"fiasGuid": "aafd4756-144b-451a-a3a7-93605cf77e98",
		"formalName": "Кирпичный",
		"shortName": "пер"
	}, {
		"fiasGuid": "cac18222-b5dc-4510-a405-8312db6e1e9b",
		"formalName": "Киевский",
		"shortName": "пер"
	}, {
		"fiasGuid": "239b8705-0b53-4a98-8eb2-346814382422",
		"formalName": "Кирова",
		"shortName": "ул"
	}, {
		"fiasGuid": "9d89f22c-41e3-45e9-af9c-4b6b0b6ebf90",
		"formalName": "Киевский",
		"shortName": "проезд"
	}, {
		"fiasGuid": "2f873a18-bead-4258-aab8-1ab52376d28b",
		"formalName": "Кибальчича",
		"shortName": "ул"
	}, {
		"fiasGuid": "daec73dd-a5b5-44dc-a13f-dbe14039730f",
		"formalName": "Кирова",
		"shortName": "пер"
	}, {
		"fiasGuid": "0a5c14f1-c169-49f0-9066-02ddebb532e2",
		"formalName": "Кирпичная",
		"shortName": "ул"
	}, {
		"fiasGuid": "06e6b466-6c3e-476b-9b11-8fd479191c76",
		"formalName": "Киевка 2-я",
		"shortName": "ул"
	}, {
		"fiasGuid": "ba9a0d0b-c92d-44f0-a0a9-dd46407e58cf",
		"formalName": "Киевка",
		"shortName": "ул"
	}, {
		"fiasGuid": "0a634c94-349c-40f7-9e63-0ee970730caf",
		"formalName": "Киевская",
		"shortName": "ул"
	}, {
		"fiasGuid": "22a9f7f2-645d-430d-a086-64998b499c6f",
		"formalName": "Кирпичный з-д МПС",
		"shortName": "ул"
	}
]

Теперь соберем полный адрес для ул.Кирова (этот запрос довольно долгий, поскольку приходится идти по цепочке и каждый раз обращаться к базе):

/api/address/GetAddressByFiasGuid?guid=239b8705-0b53-4a98-8eb2-346814382422

{
	"representation": "Калужская обл, Калуга г, Кирова ул",
	"fiasGuid": "239b8705-0b53-4a98-8eb2-346814382422",
	"fiaslevel": 7,
	"region": {
		"fiasGuid": "18133adf-90c2-438e-88c4-62c41656de70",
		"formalName": "Калужская",
		"shortName": "обл"
	},
	"area": {},
	"city": {
		"fiasGuid": "b502ae45-897e-4b6f-9776-6ff49740b537",
		"formalName": "Калуга",
		"shortName": "г"
	},
	"intraurbanTerritory": {},
	"place": {},
	"street": {
		"fiasGuid": "239b8705-0b53-4a98-8eb2-346814382422",
		"formalName": "Кирова",
		"shortName": "ул"
	},
	"unparsed": []
}

То же самое в XML. На самом деле формат ответа – JSON. Приходит строка – представление адреса в XML. (кавычки в ней будут экранированы, см. пример ответа в описании метода):

/api/address/FindAddress?searchString=ки&level=&count=&parentGuid=b502ae45-897e-4b6f-9776-6ff49740b537

<АдресРФ>
    <ИдФиас>239b8705-0b53-4a98-8eb2-346814382422</ИдФиас>
    <СубъектРФ>Калужская обл</СубъектРФ>
    <Город>Калуга г</Город>
    <Улица>Кирова ул</Улица>
    <ОКТМО>29701000</ОКТМО>
    <ОКАТО>29401000000</ОКАТО>
</АдресРФ>

Описание классов API

AddressResult

Тип данных Параметр Описание
String code Код ошибки или состояния, 1 – успешное выполнение
String message Текст сообщения об ошибке
IEnumerable<AddressItem> addressItems Список объектов типа AddressItem

AddressItem

Тип данных Параметр Описание
String value Наименование части адреса и тип
String fullValue Полное наименование адреса
String postIndex Почтовый индекс
String regionCode Код региона
IEnumerable<AddressPart> addressParts Список объектов типа AddressPart

AddressPart

Тип данных Параметр Описание
Int level Уровень части адреса по ФИАС
String name Наименование части адреса
String type Наименование типа части адреса
String shortType Сокращенное наименование типа части адреса
String fiasGuid Уникальный идентификатор адресного объекта по ФИАС
String parentFiasGuid Уникальный идентификатор адресного объекта предка по ФИАС
String kladrCode Код по КЛАДР
String oktmo Код ОКТМО
Int centerStatus Признак центра – определяет, является ли данный адресный объект центром административно –
территориального образования: столицей республики, центром края, области, района и т.п.
0 – объект не является центром административно-территориального образования;
1 – объект является центром района;
2 – объект является центром (столицей) региона;
3 – объект является одновременно и центром района и центром региона.

AddressObjectResult

Тип данных Параметр Описание
String code Код ошибки или состояния, 1 – успешное выполнение
String message Текст сообщения об ошибке
AddressObject addressObject Объект адреса

AddressObject

AddressInfoResult

Тип данных Параметр Описание
String code Код ошибки или состояния, 1 – успешное выполнение
String message Текст сообщения об ошибке
AddressInfo addressInfo Дополнительная информация адреса

AddressInfo

Тип данных Параметр Описание
String fiasGuid Уникальный идентификатор адресного объекта по ФИАС.
String parentFiasGuid Уникальный идентификатор адресного объекта предка по ФИАС.
String postIndex Почтовый индекс
String regionCode Код региона
String address Адрес в административном формате
String munAddress Адрес в муниципальном формате
String postAddress Адрес в формате Почты России
String insertDate Дата добавления объекта в ФИАС
String updateDate Дата обновления объекта в ФИАС
String region Наименование региона
String area Наименование района
String munDistrict Муниципальный район или Городской округ
String munSettlement Поселение
String city Наименование города
String place Наименование населённого пункта
String plan Наименование элемента планировочной структуры
String street Наименование улицы
String house Номер дома
String build Номер корпуса
String structure Номер строения
String room Помещение или комната
String stead Номер земельного участка
String oktmo Код ОКТМО
String okato Код ОКАТО
String cadNum Кадастровый номер
String ifnsFl ИФНСФЛ
String ifnsUl ИФНСЮЛ
String terrIfnsFl Территориальный ИФНСФЛ
String terrIfnsUl Территориальный ИФНСЮЛ
String normDoc Нормативный документ или его guid из ФИАС
Int divType Тип деления по ФИАС
0 – не определено
1 – муниципальное
2 – административное
String operStatus Причина обновления объекта в ФИАС
String hStatus Состояние объекта
String estStatus Признак владения
String strStatus Признак строения
Int centerStatus Признак центра (см. AddressPart)

HouseResult

Тип данных Параметр Описание
String code Код ошибки или состояния, 1 – успешное выполнение
String message Текст сообщения об ошибке
IEnumerable<HouseItem> houseItems Список объектов типа HouseItem

HouseItem

Тип данных Параметр Описание
String value Номер дома и/или корпуса и/или строения
String postIndex Почтовый индекс
String fiasGuid Уникальный идентификатор адресного объекта по ФИАС.
Может принимать значение null, если такой объект (номер дома) существует только с указанием корпуса и/или строения
Int buildCount Кол-во корпусов
Int structureCount Кол-во строений

SteadResult

Тип данных Параметр Описание
String code Код ошибки или состояния, 1 – успешное выполнение
String message Текст сообщения об ошибке
IEnumerable<SteadItem> steadItems Список объектов типа SteadItem

SteadItem

Тип данных Параметр Описание
String value Номер участка
String postIndexe Почтовый индекс
String fiasGuid Уникальный идентификатор адресного объекта по ФИАС.

RoomResult

Тип данных Параметр Описание
String code Код ошибки или состояния, 1 – успешное выполнение
String message Текст сообщения об ошибке
IEnumerable<RoomItem> roomItems Список объектов типа RoomItem

RoomItem

Тип данных Параметр Описание
String value Номер помещения / квартиры
String postIndex Почтовый индекс
String fiasGuid Уникальный идентификатор адресного объекта по ФИАС.

КЛАДР → ФИАС → ГАР

В России единый справочник адресов ведет Налоговая служба. Адреса из муниципальных образований по всей стране стекаются в налоговую, где их записывают в специальную базу.

Налоговая служба предоставляет справочник адресов всем желающим в виде выгрузок. Есть три разных формата выгрузок:

КЛАДР. Самый старый формат. Больше не принимается гос. органами, но по-прежнему выгружается. Включает только административно-территориальное деление.

ФИАС. Основной формат до августа 2021 года. Больше не выгружается. Включает только административно-территориальное деление.

ГАР. Основной формат с сентября 2021 года. Включает муниципальное и административно-территориальное деление.

«Дадата» работала на основе выгрузки ФИАС, но в октябре 2021 перешла на ГАР. При этом используется только административно-территориальное деление. Формат данных, которые отдает «Дадата», при этом не изменился.

Муниципальное деление поддержим в 2022 году.

Посмотреть адреса в ГАР можно на сайте налоговой.

ФИАС ID и ГАР ID

Чтобы уникально идентифицировать каждый адрес в справочнике, налоговая назначает ему ID. Например, у адреса «г Москва, ул Сухонская» такой идентификатор (этот формат называется GUID):

95dbf7fb-0dd4-4a04-8100-4f6c847564b5

В ГАР идентификаторы в формате GUID сохранились без изменений (теперь они называются Object GUID), но дополнительно к ним добавились целочисленные идентификаторы (Object ID). Например, у адреса «г Москва, ул Сухонская» теперь два идентификатора — один GUID (как был в ФИАС) и один ID (целочисленный):

95dbf7fb-0dd4-4a04-8100-4f6c847564b5
1404570

«Дадата» пока продолжит использовать идентификатор в формате GUID. Целочисленные идентификаторы возможно добавим в 2022 году.

Добавить комментарий