0
Answered

data.okpo - почему это пустым возвращает в jQuery-плагине?

good_40 3 years ago updated by Антон 3 years ago 15

Остальное все работает!

Answer

Answer

Логика работы следующая:

  • мы берем адреса из ЕГРЮЛ, который берем от ФНС;
  • обрабатываем адреса, приводим в красивый вид и обогащаем данными (подставляем коды ФИАС, КЛАДР, разбиваем по гранулярным полям в объект address.data для удобства);
  • к сожалению, не все адреса можно однозначно и уверенно разобрать по ряду причин (например, адрес написан некорректно, не существует, под один адрес подходит несколько реально существующих адресов);
  • адреса, которые мы не смогли обработать, оставляем в исходном виде. Это ровно то, что вы видите на скриншотах.

То есть гранулярный распарсенный адрес в ответе от DaData будет выглядеть так:

...
"address": {          
          "value": "г Москва, ул Селезневская, д 11А стр 2, оф 715",
          "unrestricted_value": "г Москва, ул Селезневская, д 11А стр 2, оф 715",
          "data": {
            "postal_code": "127473",
            "country": "Россия",
            "region_fias_id": null,
            "region_kladr_id": null,
            "region_with_type": "г Москва",
            "region_type": "г",
            "region_type_full": "город",
            "region": "Москва",
            "area_fias_id": null,
            "area_kladr_id": null,
            "area_with_type": null,
            "area_type": null,
            "area_type_full": null,
            "area": null,
            "city_fias_id": null,
            "city_kladr_id": null,
            "city_with_type": "г Москва",
            "city_type": "г",
            "city_type_full": "город",
            "city": "Москва",
            "city_area": null,
            "city_district": null,
            "settlement_fias_id": null,
            "settlement_kladr_id": null,
            "settlement_with_type": null,
            "settlement_type": null,
            "settlement_type_full": null,
            "settlement": null,
            "street_fias_id": null,
            "street_kladr_id": null,
            "street_with_type": "ул Селезневская",
            "street_type": "ул",
            "street_type_full": "улица",
            "street": "Селезневская",
            "house_fias_id": null,
            "house_kladr_id": null,
            "house_type": "д",
            "house_type_full": "дом",
            "house": "11А",
            "block_type": "стр",
            "block_type_full": null,
            "block": "2",
            "flat_type": "оф",
            "flat_type_full": null,
            "flat": "715",
            "flat_area": null,
            "square_meter_price": null,
            "flat_price": null,
            "postal_box": null,
            "fias_id": "ae68f233-8788-4a5f-9ec9-23d28ec1c172",
            "fias_level": null,
            "kladr_id": "7700000000005970009",
            "capital_marker": null,
            "okato": "45286585000",
            "oktmo": "45382000",
            "tax_office": "7707",
            "tax_office_legal": null,
            "timezone": null,
            "geo_lat": null,
            "geo_lon": null,
            "beltway_hit": null,
            "beltway_distance": null,
            "qc_geo": null,
            "qc_complete": null,
            "qc_house": null,
            "unparsed_parts": null,
            "qc": null
          }
        }
...

А адрес одной строкой не будет иметь гранулярных полей:

"address": {          
          "value": "199178 ГОРОД САНКТ-ПЕТЕРБУРГ ЛИНИЯ 13-Я В.О. ДОМ 72 ЛИТ.А ОФ 14-Н",
          "unrestricted_value": "199178 ГОРОД САНКТ-ПЕТЕРБУРГ ЛИНИЯ 13-Я В.О. ДОМ 72 ЛИТ.А ОФ 14-Н",
          "data": null
        }

Вытащить индекс из гранулярного адреса просто – возьмите значение поля address.data.postal_code.

С адресом одной строкой все сложнее – можно взять первые 6 цифры из этой строчки, но мы не можем гарантировать, что там всегда будет индекс.

Answered

Так задумано — это поле не заполняется. Не отдаем ОКПО, потому что перешли на ЕГРЮЛ от ФНС, а в нем нет этих данных.

Ок, это ладно...

Индекса в адресе почти всегда нет при подсказке по организациям...

С другой стороны, у Вас есть инструмент узнать индекс по адресу.

Не пробовали как-то связать все это для наилучшего результата?

Может есть готовое решение?


Индекса нет, если адрес записан одной строкой. Но для большинства случаев есть гранулярный адрес, и индекс можно взять из поля data.address.postal_code.

Так а если все же индекс уже есть в адресе, то получится 2?

Или простенькую функцию сравнения/замены самому написать?)

Такой ситуации не может быть :)

У нас либо адрес одной строкой (где индекс может быть или не быть), либо гранулярный адрес с индексом.

Просто я видел в одной строке адреса, который из налоговой - индекс... когда есть, когда нету...

Можете, пожалуйста, привезти пример? Посмотрим, в чем дело.

Не могу.. не помню как это выскочило... Может это в адресах банков было...

Но все равно в одной строке.

А вот пример, пожалуйста! У некоторых индекс есть в одной строке! https://yadi.sk/i/EFuamBeXsN5vw

Кстати, а как разложить data.address.data? Вытащить индекс оттуда? Спасибо.

Answer

Логика работы следующая:

  • мы берем адреса из ЕГРЮЛ, который берем от ФНС;
  • обрабатываем адреса, приводим в красивый вид и обогащаем данными (подставляем коды ФИАС, КЛАДР, разбиваем по гранулярным полям в объект address.data для удобства);
  • к сожалению, не все адреса можно однозначно и уверенно разобрать по ряду причин (например, адрес написан некорректно, не существует, под один адрес подходит несколько реально существующих адресов);
  • адреса, которые мы не смогли обработать, оставляем в исходном виде. Это ровно то, что вы видите на скриншотах.

То есть гранулярный распарсенный адрес в ответе от DaData будет выглядеть так:

...
"address": {          
          "value": "г Москва, ул Селезневская, д 11А стр 2, оф 715",
          "unrestricted_value": "г Москва, ул Селезневская, д 11А стр 2, оф 715",
          "data": {
            "postal_code": "127473",
            "country": "Россия",
            "region_fias_id": null,
            "region_kladr_id": null,
            "region_with_type": "г Москва",
            "region_type": "г",
            "region_type_full": "город",
            "region": "Москва",
            "area_fias_id": null,
            "area_kladr_id": null,
            "area_with_type": null,
            "area_type": null,
            "area_type_full": null,
            "area": null,
            "city_fias_id": null,
            "city_kladr_id": null,
            "city_with_type": "г Москва",
            "city_type": "г",
            "city_type_full": "город",
            "city": "Москва",
            "city_area": null,
            "city_district": null,
            "settlement_fias_id": null,
            "settlement_kladr_id": null,
            "settlement_with_type": null,
            "settlement_type": null,
            "settlement_type_full": null,
            "settlement": null,
            "street_fias_id": null,
            "street_kladr_id": null,
            "street_with_type": "ул Селезневская",
            "street_type": "ул",
            "street_type_full": "улица",
            "street": "Селезневская",
            "house_fias_id": null,
            "house_kladr_id": null,
            "house_type": "д",
            "house_type_full": "дом",
            "house": "11А",
            "block_type": "стр",
            "block_type_full": null,
            "block": "2",
            "flat_type": "оф",
            "flat_type_full": null,
            "flat": "715",
            "flat_area": null,
            "square_meter_price": null,
            "flat_price": null,
            "postal_box": null,
            "fias_id": "ae68f233-8788-4a5f-9ec9-23d28ec1c172",
            "fias_level": null,
            "kladr_id": "7700000000005970009",
            "capital_marker": null,
            "okato": "45286585000",
            "oktmo": "45382000",
            "tax_office": "7707",
            "tax_office_legal": null,
            "timezone": null,
            "geo_lat": null,
            "geo_lon": null,
            "beltway_hit": null,
            "beltway_distance": null,
            "qc_geo": null,
            "qc_complete": null,
            "qc_house": null,
            "unparsed_parts": null,
            "qc": null
          }
        }
...

А адрес одной строкой не будет иметь гранулярных полей:

"address": {          
          "value": "199178 ГОРОД САНКТ-ПЕТЕРБУРГ ЛИНИЯ 13-Я В.О. ДОМ 72 ЛИТ.А ОФ 14-Н",
          "unrestricted_value": "199178 ГОРОД САНКТ-ПЕТЕРБУРГ ЛИНИЯ 13-Я В.О. ДОМ 72 ЛИТ.А ОФ 14-Н",
          "data": null
        }

Вытащить индекс из гранулярного адреса просто – возьмите значение поля address.data.postal_code.

С адресом одной строкой все сложнее – можно взять первые 6 цифры из этой строчки, но мы не можем гарантировать, что там всегда будет индекс.

address.data.postal_code - пробовал... из подсказок для организаций. Пусто там.

А как именно вытаскиваете? Пришлите код, посмотрим, в чем дело.

if (data.address.postal_code)
$("#address").val(data.address.postal_code);
else {
if (data.address)
$("#address").val(data.address.value);
}

Нужно вытаскивать data.address.data.postal_code.