Перейти к основному содержимому

Реестр как данные

Первоисточник результата инвентаризации — файл с данными, а не отчёт и не картинка. Отчёт нельзя проверить скриптом, сравнить с прошлой версией, отфильтровать по владельцу или выгрузить в каталог. Файл можно. Поэтому реестр хранят в таблице или в файлах YAML и JSON, а страницы, отчёты, интеллект-карты и файлы для печати строят из него. Так устроен атлас этой книги — четыре карты данных, хранящиеся как данные.

Что хранить​

Сведения реестра — на примере карты данных — укладываются в две сущности и связь между ними:

  • источники — каждый один раз: название, тип, адрес, владелец, другие названия;
  • вопросы — номер и текст;
  • связи «вопрос — источник» — с доступностью: один источник бывает доступен для одного вопроса и закрыт для другого.

Источники удобно держать в общем списке для всех карт, а карты — ссылаться на них по короткому идентификатору. Тогда источник, который встречается на нескольких картах, описан один раз, и при обновлении его правят в одном месте. В атласе книги четыре источника встречаются на всех четырёх картах: clearspending.ru, fedstat.ru, gks.ru и zakupki.gov.ru.

Формат атласа​

Данные атласа лежат в папке data/ репозитория книги:

data/
sources.yaml # общий список источников
maps/oil-and-gas.yaml
maps/public-finance.yaml
maps/health.yaml
maps/education.yaml

Источник в sources.yaml:

- id: egrul-nalog-ru
name: egrul.nalog.ru
type: site
url: https://egrul.nalog.ru
owner: ФНС России

Карта в maps/oil-and-gas.yaml — паспорт и вопросы:

id: oil-and-gas
title: Нефть и газ
kind: [questions, availability]
checked: 2019-12
author: Иван Бегтин
questions:
- n: 2
text: Где найти информацию о ценах на нефть и газ?
sources:
- {source: bloomberg-com, availability: restricted}
- {source: cbr-ru, availability: available}

Полное описание полей — в data/README.md.

YAML выбран потому, что его удобно читать и править человеку, а программы читают его так же легко, как JSON. Для карты, которую ведут не программисты, подойдёт и обычная таблица: лист источников, лист вопросов и лист связей. Главное — чтобы источник был одной строкой, а не повторялся в каждой ячейке.

Что из этого строится​

Скрипт scripts/atlas.mjs читает данные и строит:

  • таблицу вопросов и источников с кружками доступности для каждой страницы атласа;
  • таблицу источников карты — каждый источник один раз, с владельцем и номерами вопросов;
  • паспорт карты и список изменений;
  • CSV для скачивания — строка на каждую пару «вопрос — источник»;
  • сводку по атласу и список источников, которые встречаются хотя бы на трёх картах.

Сайт книги перед сборкой запускает скрипт сам, поэтому таблицы на страницах всегда совпадают с данными.

Проверки​

Прежде чем что-то строить, скрипт проверяет данные и останавливает сборку при ошибке:

  • у каждого источника есть идентификатор, название и тип из списка;
  • идентификаторы не повторяются;
  • каждый источник, на который ссылается карта, описан в общем списке;
  • в одном вопросе источник не указан дважды;
  • доступность — одно из допустимых значений;
  • вопросы пронумерованы по порядку;
  • в общем списке нет источников, которые не используются ни на одной карте.

Это те же пункты, что в проверке перед публикацией, только их проверяет программа. Проверку можно запустить отдельно: npm run atlas:check.

Проверка адресов​

Второй скрипт, scripts/check-sources.mjs, проходит по адресам всех источников: есть ли домен и что отвечает сайт. Результат с датой и описанием сети он записывает в data/source-checks.yaml, а таблицы атласа показывают его в колонке «Адрес». Так шаг «Поддержка» для адресов становится одной командой: npm run check-sources.

Скрипт не решает, доступны ли данные, — только жив ли адрес. И его результат зависит от сети: «домена нет» верно везде, а «не ответил» из-за рубежа может значить «открыт» в России. Поэтому в файле записано, откуда шла проверка.

Как перенести карту с картинки в данные​

Карты атласа 2018–2019 годов существовали только как картинки. При переносе:

  1. Вопросы и источники взяты с интеллект-карты — на ней полные формулировки вопросов.
  2. Доступность взята с карты для печати: только на ней есть легенда.
  3. Расхождения между двумя картинками записаны в поле notes и показаны на странице карты в разделе «Что изменилось». Пары, которых нет на карте для печати, оставлены без доступности.
  4. Дубли убраны: если источник на картинке указан в вопросе дважды, в данных он один раз, а в notes это отмечено.
  5. Одинаковые группы под разными названиями объединены: «порталы открытых бюджетов регионов» и «сайты открытых бюджетов субъектов федерации» — один источник с синонимами.

Владельцев на исходных картах не было. В данных они заполнены по домену сайта и помечены как не сверенные — их проверка входит в обновление атласа.

Источники​