{% extends 'base.html' %} {% block title %}Предварительная база деклараций{% endblock title %} {% block content %}
Каждый год российские чиновники публикуют декларации о доходах и имуществе. Форматы документов могут быть разными - Excel, Word, PDF, HTML. Для качественного использования публикуемых данных требуется их приведение в единый машиночитаемый формат и дальнейшая обработка (связывание отдельных записей в цепочку, относящуюся к одному должностному лицу). Для краткости мы будем называть декларантами или персонами всех должностных лиц, которые публикуют сведения о своих доходах.
Первая часть этого процесса - парсинг исходных файлов. Из входных формата Excel, Word, PDF, HTML данные переводятся в формат json. Разработка парсера ведется, в том числе в открытом режиме в репозитории на Гитхабе .
В сведениях о доходах и имуществе, публикуемых в соответствии с действующим антикоррупционным законодательством, указывается следующая информация:
Пример входной таблицы [1]:
Один json-файл имеет следующую структуру:
{
“persons”: [массив всех декларантов, найденных в документе ],
“document”: {описание документа, который был распарсен}
}
В поле document идёт описание документа, который был обработан парсером в процессе парсинга. В нём могут быть следующие поля:
В поле persons находится массив всех персон (декларантов, найденных в документе).
Основные поля каждого элемента этого массива:Отдельно, требования по данным указаны ниже, вместе с описанием методов парсинга.
Встречается два основных способа написания в декларациях:
Обычно эта информация записана в одной ячейке таблицы. Если ФИО содержит больше трех слов, так его и оставлять - это разрешено.
Парсинг ФИО осложняется тем, что иногда в этой же ячейке идет информация о должности декларанта (поле role).
Отдел, в котором работает декларант, может находиться в отдельном столбце, а может стоять выше по таблице, когда декларанты идут группами, где каждая группа декларантов работает в одном отделе:
В последнем случае у всех декларантов одной группы будет одинаково заполнено поле person/department. Поле person/department может отсутствовать, тогда считается, что все декларанты работают в головной организации, которая опубликовала этот документ.
В поле person/role записывается должность, на которой работает декларант. Обычно эта должность идет в отдельном столбце (см. примеры выше).
Для будущего анализа результатов парсинга нужно указать место в документе, где именно была обнаружена данная секция:
Иногда в документе перед каждой персоной в отдельном столбце указан её порядковый номер в данном документе. В таких случаях этот номер надо указать в данном поле. Пример (первый столбец):
Иногда порядковый номер указывается для департамента и объединяет несколько персон. В таких случаях это поле не нужно заполнять.
Все объекты владения (доход, транспортное средство или недвижимость) содержат поля relative с допустимыми значениями: "Супруг(а)", "Ребенок" или null. Это поле обозначает, к кому относится данная запись, например, что машина супруги Значение null означает, что эта запись относится к основному декларанту.
Сумма годового дохода обычно указывается в отдельной ячейке. Почти всегда есть доход основного декларанта. Кроме
этого, в декларациях записана информация о доходах супруг(ов). Для каждого дохода вносится следующая запись:
{
“size”: number
“size_raw”: string
“relative”: relative_type
}
Поле size - это доход чиновника в рублях, иногда они пишут с точностью до копейки, тогда возникает не целочисленное, а число с плавающей точкой - это разрешено.
Поле size_raw - исходное сырое строковое значение ячейки с суммой дохода.
Во входных таблицах доход чаще всего встречается в виде числа с плавающей точкой, иногда с “руб.” или “р.” на конце, что нужно отбросить, так как по JSON схеме поле size должно быть number.
Внимание! Иногда сумма обозначается в тысячах рублей, что может быть указано как после цифры, так и в заголовке столбца. В таком случае приведенное в исходном файле число надо умножить на 1000. Существует еще формат “11 рублей 50 копеек", который надо преобразовать к флоату (11.50).
Также иногда в декларациях встречается комментарий к источнику дохода, обычно указываемый рядом с суммой дохода в скобках, например, “часть дохода получена от продажи дома”. Эти строки надо внести в поле "/persons/incomes/comment".
В случае, когда доходы не указаны совсем, следует оставить пустым список в JSON “/persons/incomes”.
Транспортные средства обычно указываются в отдельных столбцах, и могут быть преобразованы в следующие поля:
{
“relative”: relative_type
“text” : string,
“type_raw”: string,
“manufacture_year”: number,
“own_type_raw”:string
}
В большинстве случаев в транспортных средствах заполняется только поле text и поле relative. Разделение информации о машинах на отдельных элементы оставлен на последующие этапы. Пример записи о транспортном средстве:
"vehicles": [
{
"text": "а/м легковой Тойота Ланд Крузер Прадо",
"relative": null
. }
Может быть и несколько транспортных средств в одной ячейке:
"vehicles": [
{
"text": "а/м легковой Ауди; Квадроцикл Ямаха",
"relative": "Супруг(а)"
}
/
Если описание транспортных средств разделено на разные колонки, тогда их обязательно надо конкатинировать через пробел в поле text (и дополнительно оставить в отдельных полях):
В сведениях о доходах обычно отдельно указываются объекты недвижимости в собственности и находящиеся в пользовании. Как правило, в исходной таблицы они располагаются в отдельных группах столбцов: левее группа из 4 столбцов, касающаяся недвижимости в собственности, правее 3 столбца о недвижимости в пользовании.
В некоторых случаях оба типа недвижимости объединены в один столбец, а режим использования уточняется в скобках. Один объект недвижимости описывается следующими полями:
{Для того, чтобы отделить эти два типа используется поле own_type_by_column (личной собственности соответствует значение “В собственности”, и для пользования - "В пользовании").
Поле own_type_raw заполняется, когда присутствуют отдельный столбец с уточнением типа владения. Столбец обычно называется “вид собственности”, примеры значений такие:
Поле type_raw содержит тип недвижимости (квартира, земельный участок, дача и пр). В этом же поле содержится иногда указание доли владения. Поле square_raw содержит площадь недвижимости в метрах квадратных. Поле square содержит преобразованное во float значение поля square_raw. Поле country_raw содержит страну, в которой находится данный объект недвижимости. Иногда type_raw и own_type_raw записаны во входной таблице в одной ячейке, в таких случаях, содержимое этой ячейки пишется в поле text, а поля type_raw и own_type_raw не заполняются.
Если же type_raw и own_type_raw разделены, тогда в поле text пишется (дублируется) значение поля type_raw. Поле text является обязательным.
Встречаются документы, где недвижимость указана в одной колонке, в одной строке включены сразу все данные - площадь, вид и тип владения. В таких случаях эту строку надо заносить в поле text.
Бывает, что в одной колонке вместе указывается вид недвижимости и тип собственности, которые также надо заносить в поле text, а площадь и страну заносить в соответствующие поля - square_raw и country_raw.
Пример:
Иногда даже отсутствуют площадь и тип владения, есть только описание объекта. Пример:
В таких случаях содержимое этой одной колонки целиком должно быть записано в поле text, но если колонки две (как в примере выше), то по ним должен быть определено и записано поле own_type_by_column.
{% endblock content %}