Руководство по установке#
Стройкомплекс РФ – это единая система обеспечения градостроительной деятельности Российской Федерации, которая объединяет на единой платформе всю градостроительную информацию в России. Передача сведений из ГИСОГД регионов в Единую систему осуществляется посредством сервиса для передачи сведений через API Стройкомплекс.РФ.
Целью сервиса является передача сведений из ГИСОГД регионов в ГИС Стройкомплекс.РФ.
Сервис позволяет:
передавать размещаемые документы из Diamond и GeoMeta в Стройкомплекс.РФ (API Стройкомплекс.РФ);
массово передавать размещенные документы в Стройкомплекс.РФ (API Стройкомплекс.РФ), используя утилиту MassProcessor;
отправлять сведения, которые были размещены после размещения документа (векторные данные 5,7 разделов ГИСОГД + градостроительные регламенты со связанными объектами);
выполнять логирование процесса отправки с указанием результата, наименования сервиса (Service или MassProcessor), а также сведений о документах и объектах, входящих в состав документа.
Важно
Для настройки сервиса необходимо вносить правки в .env файл в каталоге /opt/gisogdrf.
Установка модуля#
Укажите следующее переменные в vars.yml-файле. См. Редактирование vars.yml файла.
В таблице обязательная к изменению переменная отмечена значком .
Обязательная к изменению |
Название переменной |
Значение по умолчанию |
Описание переменной |
---|---|---|---|
gvGISOGDRF_INSTALL_DIR |
/opt/GisogdRF |
Директория, в которую будет установлен сервис интеграции со Стройкомплекс.РФ (GisogdRF). Рекомендуется не изменять значение данной переменной |
|
gvGISOGDRF_GEOMETA_CONNECTION_STRING |
Server={{ gvPOSTGRESQL_SERVER }};Port={{ gvPOSTGRESQL_PORT }};Database={{ gvPOSTGRESQL_IAS_DB_NAME }};User Id={{ gvPOSTGRESQL_IAS_USER }};Password={{ gvPOSTGRESQL_IAS_USER_PASS }}; |
Строка подключения к БД Geometa. Данная строка формируется автоматически на основе ранее указанных параметров (используется импорт переменных), без необходимости не корректируйте значение данной переменной! |
|
gvGISOGDRF_DIAMOND_CONNECTION_STRINGE |
Server={{ gvPOSTGRESQL_SERVER }};Port={{ gvPOSTGRESQL_PORT }};Database={{ gvPOSTGRESQL_IAS_DB_NAME }};User Id={{ gvPOSTGRESQL_IAS_USER }};Password={{ gvPOSTGRESQL_IAS_USER_PASS }}; |
Строка подключения к БД Diamond. По умолчанию данная строка формируется автоматически на основе ранее указанных параметров (используется импорт переменных) |
|
gvGISOGDRF_EXCLUDED_PROJECTS |
[] |
Список проектов, по которым служба не должна работать. Например, тестовые проекты, демо-проекты и проекты, у которых отсутствует ОКТМО или оно не уникально в разрезе других муниципальных образований проекта. Обратите внимание, что данная переменная принимает в себя лист значений, оформленных через спец. символ „-„ в двойных кавычках с новой строки |
|
gvGISOGDRF_MASS_PROC_INTERVAL_SEC |
по умолчанию: 14400 |
Интервал (в секундах) с которым сервис массовой отправки будет пытаться отправлять архивные или не отправленные документы |
|
gvGISOGDRF_BASE_ADDRESS |
URL-адрес по которому доступна API Стройкомплекс.РФ |
||
gvGISOGDRF_API_ROOT |
/api/rgmu |
Подадрес API Стройкомплекс.РФ (для возможного указанием версии API) |
|
gvGISOGDRF_REQUEST_TIMEOUT |
15 |
Таймаут запроса к API Стройкомплекс.РФ |
|
gvGISOGDRF_AUTH_ADDRESS |
https://{{ gvNGINX_FQDN }}/connect/token |
URL-адрес сервиса авторизации API Стройкомплекс.РФ |
|
gvGISOGDRF_AUTH_CLIENT_ID |
gisogdrf |
ID Клиента к API Стройкомплекс.РФ (выдается Регионам по обращению к представителям Стройкомплекс.РФ и Минстроя) |
|
gvGISOGDRF_AUTH_CLIENT_SECRET |
popopo |
Секрет клиента к API Стройкомплекс.РФ (выдается Регионам по обращению к представителям Стройкомплекс.РФ и Минстроя вместе с ID Клиента) |
|
gvGISOGDRF_AUTH_SCOPE |
api1 |
Авторизационный Scope API Стройкомплекс.РФ |
|
gvGISOGDRF_CRONTAB_SCHEDULE |
по умолчанию 0 23 * * 0-4 |
Расписание запуска службы опроса аудита обработки документов API Стройкомплекс.РФ в формате CRON |
Важно
Если на вашем проекте присутствуют тестовые или демонстрационные схемы, которые копируют продуктовые схемы, их следует исключить из работы сервиса. Для этого необходимо указать перед установкой переменную Ansible gvGISOGDRF_EXCLUDED_PROJECTS. Например:
gvGISOGDRF_EXCLUDED_PROJECTS :
- "test_go"
- "demo_region"
Установите сертификаты Министерства цифрового развития:
Скачайте 2 файла с сертификатами по адресу https://www.gosuslugi.ru/crt, выбрав нужную ОС.
Перенесите сертификаты на сервер, где установлен Diamond.
Скопируйте сертификаты в папку /usr/local/share/ca-certificates/.
Выполните команду:
sudo update-ca-certificates
Скопируйте сертификаты в папку /etc/pki/ca-trust/source/anchors/.
Выполните команду:
update-ca-trust
Проверьте доступ к сервисам Стройкомплекс.РФ с помощью команд и убедитесь, что соединение установлено:
wget https://id.gisogd.gov.ru/oidc/connect/token wget https://admin.gisogd.gov.ru
Установите функционал средствами Ansible, используя тег install_gisogdrf (См. Обновление и установка Системы с использованием Ansible).
Сервис будет запущен сразу после установки.
Логирование#
Сервис логирует отправку документов в таблицах, тем самым дает возможность отслеживать статус отправки сведений в Стройкомплекс.РФ.
Логирование ведется в таблицах БД Diamond – gisogd_schema: gisogd_schema.gisogd_rf_log_document_bucket и gisogd_schema.gisogd_rf_log_document_bucket_elements.
Таблица gisogd_schema.gisogd_rf_log_document_bucket#
Таблица содержит информацию об успешности\неуспешности отправки пакета данных документа целиком:
Столбцы содержат в себе информацию:
id – идентификационный номер документа в таблице;
scheme – наименование схемы проекта;
gisogd_registration_number – регистрационный номер документа;
send_date – время и дата направления в ГИСОГД;
success – отметка успешной\неуспешной отправки (true\false);
error_text – текст ошибки при неудачной отправке документа в Стройкомплекс.РФ;
service_name – наименование сервиса, которым был отправлен документ (service\massProcessor);
last_send_date – дата последней отправки документа в Стройкомплекс.РФ;
attemp_count – количество попыток отправки документа в Стройкомплекс.РФ.
Таблица gisogd_schema.gisogd_rf_log_document_bucket_elements#
Таблица содержит информацию об отправке частей пакета данных каждого документа, то есть сведения об отправке всех составляющих объектов документа:
Столбцы содержат в себе информацию:
bucket_id – идентификационный номер пакета в таблице;
xml_type – наименование типа объекта;
guid – уникальный идентификационный номер объекта в составе пакета;
send_date – время и дата отправки в Стройкомплекс.РФ;
success – отметка успешной\неуспешной отправки (true\false);
xml – содержимое xml, отправленного в Стройкомплекс.РФ;
error_text – текст ошибки при неудачной отправке в Стройкомплекс.РФ.
В случае ошибок отправки в таблицах заполняется поле в столбце error_text
.
В таблице gisogd_schema.v_gisogd_rf_errors_from_api отображается информация о тех запросах в API Стройкомплекс.РФ, данные которых отправить не удалось.
В таблице error_text gisogd_rf_log_document_bucket отображается информация, если есть ошибка формирования пакета:
извлечение данных из БД;
валидация данных на корректность.
В ходе логирования формируются файлы лога в папках: /var/log/gems/gisogd-rf/service и /var/log/gems/gisogd-rf/massprocessor.
При получении результата отправки документа в Стройкомплекс.РФ, сервис производит поиск записи о последней неуспешной попытке отправки этого документа в логах в таблице gisogd_rf_log_document_bucket, после чего сервис:
увеличивает счетчик попыток отправки на единицу в столбце attempt_count;
проставляет актуальный статус результата отправки вместо неуспешного в столбце success;
удаляет записи обо всех элементах старой отправки и переписывает их элементами этой отправки;
проставляет текущее время как время последней попытки отправки в столбце last_send_date;
перезаписывает текст ошибки и название сервиса если оно отличается.
Если запись о последней неуспешной попытке отправки не найдена – будет создана стандартная запись лога.
Как посмотреть информацию о статусе отправки#
Посмотреть информацию о статусе отправки конкретного документа по регистрационному номеру ГИСОГД, в том числе об объектах, входящих в его состав, можно с помощью запроса:
select b.scheme,
b.gisogd_registration_number,
b.success as all_success,
b.error_text as make_package_error,
e.send_date,
e.xml_type,
e.guid,
e.xml,
e.success as request_success,
e.error_text as request_error,
b.service_name
from gisogd_schema.gisogd_rf_log_document_bucket b
left join gisogd_schema.gisogd_rf_log_document_bucket_elements e
on e.bucket_id = b.id
where b.gisogd_registration_number = '05657000-10-2022-54' - номер документа
order by e.send_date desc;
Часто задаваемые вопросы#
Если документ ГИСОГД не отправляется в Стройкомплекс.РФ и не отображается ни в аудите, ни в списке документов Стройкомплекс.РФ в технологическом окне, на это может быть ряд причин.
Документ отправлен успешно, но есть проблемы в его обработке на стороне Стройкомплекс.РФ
Как обнаружить проблему?
select exists(select 1 FROM gisogd_schema.gisogd_rf_log_document_bucket where success and gisogd_registration_number = 'РЕГИСТРАЦИОННЫЙ_НОМЕР_ГИСОГД_ДОКУМЕНТА');
По условию запроса будет найдена хоть одна запись.
Как устранить проблему?
Никаких действий не требуется.
Неверно указаны настройки авторизации в .env файле
Как обнаружить проблему?
SELECT exists (
select 1 FROM gisogd_schema.gisogd_rf_log_document_bucket b
left JOIN gisogd_schema.gisogd_rf_log_document_bucket_elements e ON e.bucket_id = b.id
WHERE b.gisogd_registration_number ='РЕГИСТРАЦИОННЫЙ_НОМЕР_ГИСОГД_ДОКУМЕНТА'
and (not b.success or NOT e.success)
and (b.error_text ilike '%Получен код ответа 401%' or e.error_text ilike '%Получен код ответа 401%')
);
По условию запроса будет найдена хоть одна запись.
Как устранить проблему?
Проверьте корректность заполнения настроек сервиса в .env файле в папке установки:
GisogdRfApiOptions__Authorization__ClientId
GisogdRfApiOptions__Authorization__ClientSecret
GisogdRfApiOptions__Authorization__Address
Неверно указаны настройки подключения к API Стройкомплекс.РФ или API Стройкомплекс.РФ не отвечает
Как обнаружить проблему?
SELECT exists (
select gisogd_registration_number FROM gisogd_schema.gisogd_rf_log_document_bucket b
left JOIN gisogd_schema.gisogd_rf_log_document_bucket_elements e ON e.bucket_id = b.id
WHERE b.gisogd_registration_number ='РЕГИСТРАЦИОННЫЙ_НОМЕР_ГИСОГД_ДОКУМЕНТА' and
(not b.success or NOT e.success)
and (b.error_text ilike '%No connection could be made because the target machine actively refused it%'
or e.error_text ilike '%No connection could be made because the target machine actively refused it%'
or b.error_text ilike '%Bad Gateway%'
or e.error_text ilike '%Bad Gateway%'
)
)
Как устранить проблему?
Проверить корректность заполнения настроек сервиса в .env файле в папке установки:
GisogdRfApiOptions__BaseAddress
GisogdRfApiOptions__Authorization__Address
Проблемы с доступом к БД Diamond или Geometa
Как обнаружить проблему?
SELECT exists (
select gisogd_registration_number FROM gisogd_schema.gisogd_rf_log_document_bucket b
left JOIN gisogd_schema.gisogd_rf_log_document_bucket_elements e ON e.bucket_id = b.id
WHERE b.gisogd_registration_number ='РЕГИСТРАЦИОННЫЙ_НОМЕР_ГИСОГД_ДОКУМЕНТА' and
(not b.success or NOT e.success)
and (b.error_text ilike '%Exception while reading from stream%'
or e.error_text ilike '%Exception while reading from stream%')
)
По условию запроса будет найдена хоть одна запись.
Как устранить проблему?
Убедитесь, что указанные в настройках
ConnectionStrings__GeometaConnection
ConnectionStrings__DiamondConnection
БД доступны с сервера, на котором установлен сервис.
Увеличьте таймаут операций с БД в строках подключения к БД.
Для увеличения таймаута необходимо добавить Command Timeout=ЗНАЧЕНИЕ_В_СЕКУНДАХ к строкам подключения к БД, например так:
ConnectionStrings__GeometaConnection=Server=ХХ.Х.Х.ХХ;Port=5432;Database=geometa;User Id=postgres;Password=XXXXXXX;ApplicationName=gisogd-rf-service;CommandTimeout=300
Ошибка валидации объектов в пакете документа. Не заполнено обязательное поле
Как обнаружить проблему?
select error_text FROM gisogd_schema.gisogd_rf_log_document_bucket
WHERE gisogd_registration_number ='РЕГИСТРАЦИОННЫЙ_НОМЕР_ГИСОГД_ДОКУМЕНТА' and
not success
and error_text ilike '%Ошибки валидации объекта с типом %: The % field is required%'
Запрос возвращает строку с сообщением о ошибке.
Как устранить проблему?
Например текст вида «Ошибки валидации объекта с типом FormedLand: The Status field is required» говорит о том, что объект с типом FormedLand содержит незаполненное обязательное для передачи поле Status.
Информацию о назначении тех или иных типов XML и их полей, а так же значениям классификаторов можно прочитать в разделе «VII. Требования к структуре информации для обеспечения информационного взаимодействия при ведении реестров информационной системы» Приказа Министерства строительства и жилищно-коммунального хозяйства РФ N 433/пр от 6 августа 2020 г.
Ошибка валидации объектов в пакете документа. Справочное значение имеет код несовпадающий с классификатором ГИСОГД
Как обнаружить проблему?
select error_text FROM gisogd_schema.gisogd_rf_log_document_bucket
WHERE gisogd_registration_number ='РЕГИСТРАЦИОННЫЙ_НОМЕР_ГИСОГД_ДОКУМЕНТА' and
not success
and error_text ilike '%Ошибки валидации объекта с типом % не соответствует кодам справочника %
Запрос возвращает строку с сообщением о ошибке.
Как устранить проблему?
Текст вида Ошибки валидации объекта с типом RedLine: Значение 15А.1 поля Status не соответствует кодам справочника 7E говорит о том, что у объекта «Красная линия» поле [Статус] заполнено значением классификатора, которое не соответствует кодам справочника 7Е. Справочник 7Е содержит корректные коды для статусов красных линий.
Информацию о назначении тех или иных типов XML и их полей, а так же значениям классификаторов можно прочитать в разделе «VII. Требования к структуре информации для обеспечения информационного взаимодействия при ведении реестров информационной системы» Приказа Министерства строительства и жилищно-коммунального хозяйства РФ N 433/пр от 6 августа 2020 г.
Документ в Diamond связан с более чем одной Записью реестра учета сведений
Как обнаружить проблему?
SELECT exists(
select 1
FROM gisogd_schema.gisogd_rf_log_document_bucket
WHERE gisogd_registration_number = 'РЕГИСТРАЦИОННЫЙ_НОМЕР_ГИСОГД_ДОКУМЕНТА' and
not success and
error_text ilike '%Документ с регистрационным номером % имеет более 1 записи реестра сведений%'
)
По условию запроса будет найдена хоть одна запись, в том числе
select * from СХЕМА_ПРОЕКТА_В_DIAMOND."ID_GisogdDocumentReferences" where "DocumentNumber" = 'РЕГИСТРАЦИОННЫЙ_НОМЕР_ДОКУМЕНТА'
Запрос вернул более одной записи.
Как устранить проблему?
По результатам второго запроса необходимо произвести анализ и понять, какая запись верна. Также необходимо перепривязать остальные записи к корректным документам через столбец «RegistrationNumber». Если остальные записи не нужны, можно удалить ненужные черновики документов (RegistrationProcessItem) запросом Удаление RegistrationProceeItem.sql
.
В этом скрипте необходимо предварительно указать алиас проекта и номер RegistrationProcessItem, который требуется удалить.
Документ в Diamond не связан ни с одной Записью реестра учета сведений
Как обнаружить проблему?
SELECT exists(
select 1
FROM gisogd_schema.gisogd_rf_log_document_bucket
WHERE gisogd_registration_number = 'РЕГИСТРАЦИОННЫЙ_НОМЕР_ГИСОГД_ДОКУМЕНТА' and
not success and
(error_text ilike '%Sequence contains no element%'
or error_text ilike '%NullReferenceException%') )
По условию запроса будет найдена хоть одна запись, в том числе:
select * from СХЕМА_ПРОЕКТА_В_DIAMOND."ID_GisogdDocumentReferences" where "DocumentNumber" = 'РЕГИСТРАЦИОННЫЙ_НОМЕР_ДОКУМЕНТА'
Запрос не вернул ни одной записи.
Как устранить проблему?
На БД Diamond выполнить скрипт Восстановление InboxData у документа.sql
, указав в нем алиас проекта и регистрационный номер документа. Скрипт либо самостоятельно исправит проблему, либо предоставит инструкции по её устранению в ручном режиме.
Как осуществить загрузку данных в Стройкомплекс.РФ с нуля (перезаливку)
Для загрузки данных в Стройкомплекс.РФ с нуля необходимо очистить таблицы логов отправки сведений в Стройкомплекс.РФ с помощью запросов:
truncate table gisogd_schema.gisogd_rf_log_document_bucket cascade;
truncate table gisogd_schema.gisogd_rf_log_document_bucket_elements cascade;
Важно
Важно! Ввиду обилия данных в таблицах, выполнение запросов может занять продолжительное время.
Проблемы с доступом до сервисов Стройкомплекс.РФ из docker-контейнера
Как обнаружить проблему?
В таблице gisogd_schema.gisogd_rf_log_document_bucket присутствует ошибка доступа при передачи документов, при этом на сервере доступ есть.
Чтобы проверить доступ из docker-контейнера:
выполните команду из каталога с сервисом:
docker-compose exec massprocessor /bin/sh
выполните команды:
curl https://id.gisogd.gov.ru/oidc/connect/token curl https://admin.gisogd.gov.ru
Как устранить проблему?
Вариант 1: Отредактируйте файл docker-compose.yml добавляя параметры http_proxy
и https_proxy
, где 172.29.23.10 – ip адрес, по которому службы Стройкомплекс.РФ доступны на данном сервере.
environment:
Features__MassSendToApiMode=true
http_proxy=http://172.29.23.10:3128
https_proxy=http://172.29.23.10:3128
Вариант 2: Отредактируйте файл docker-compose.yml в соответствии:
services:
service:
image: "registry.gemsdev.ru/gisogd-rf-service:5.47.34332.0"
restart: always
env_file: .env
volumes:
- /var/log/gems/gisogd-rf/service:/var/log/gems/
networks:
- backend
extra_hosts:
- "id.gisogd.gov.ru:10.0.11.237"
- "admin.gisogd.gov.ru:10.0.11.237"
massprocessor:
image: "registry.gemsdev.ru/gisogd-rf-massprocessor:5.47.34332.0"
env_file: .env
entrypoint: /bin/sh
command: /usr/local/startup.sh
environment:
- Features__MassSendToApiMode=true
volumes:
- /var/log/gems/gisogd-rf/massprocessor:/var/log/gems/
extra_hosts:
- "id.gisogd.gov.ru:10.0.11.237"
- "admin.gisogd.gov.ru:10.0.11.237"
auditresendcron:
image: "registry.gemsdev.ru/gisogd-rf-auditresendcron:5.47.34332.0"
env_file: .env
environment:
- Features__UpdateOksInfo=true
volumes:
- /var/log/gems/gisogd-rf/audit-resend-cron:/var/log/gems/
- /etc/localtime:/etc/localtime:ro
extra_hosts:
- "id.gisogd.gov.ru:10.0.11.237"
- "admin.gisogd.gov.ru:10.0.11.237"
Сценарии передачи сведений в Стройкомплекс.РФ#
1 сценарий: Передача сведений в Стройкомплекс.РФ, при размещении документа в модуле Diamond
Состоит из следующих этапов:
Регистрация документа в Diamond;
Передача слепка документа в RabbitMQ;
Передача слепка документов в Geometa;
Документ размещен в ГИСОГД
Передача регистрационного номера документа в RabbitMQ;
Передача регистрационного номера из RabbitMQ в Сервис передачи сведений в Стройкомплекс.РФ;
Обращение и получение Сервисом в БД Diamond и БД Geometa сведений документа по регистрационному номеру;
Отправка сервисом сведений документа + guid в API Стройкомплекс.РФ;
Документ направлен в Стройкомплекс.РФ
Получение сервисом сведений о статусе отправки (успешно\не успешно) документа от API Стройкомплекс.РФ;
Передача сервисом сведений о статусе отправки документа в Стройкомплекс.РФ для хранения в БД Diamond.
2 сценарий: Передача сведений в Стройкомплекс.РФ, при размещении документа в GeoMeta
Состоит из следующих этапов:
Регистрация документа в Geometa;
Передача слепка документа в RabbitMQ;
Передача слепка документов в Diamond;
Присвоение и передача регистрационного номера документа в RabbitMQ;
Передача регистрационного номера в GeoMeta;
Документ размещен в ГИСОГД
Передача регистрационного номера документа в RabbitMQ;
Передача регистрационного номера из RabbitMQ в Сервис передачи сведений в Стройкомплекс.РФ;
Обращение и получение Сервисом в БД Diamond и БД Geometa сведений документа по регистрационному номеру;
Отправка сервисом сведений документа + guid в API Стройкомплекс.РФ;
Документ направлен в Стройкомплекс.РФ
Получение сервисом сведений о статусе отправки (успешно\не успешно) документа от API Стройкомплекс.РФ;
Передача сервисом сведений о статусе отправки документа в Стройкомплекс.РФ для хранения в БД Diamond.
3 сценарий: Массовая отправка размещенных документов в Стройкомплекс.РФ
Состоит из следующих этапов:
MassProcessor запрашивает и получает сведения о рег. номерах размещенных документов в БД Diamond;
MassProcessor на основании рег. номера документа получает сведения о документе + guid из БД Diamond и БД Geometa;
MassProcessor передает сведения о документе + guid в API Стройкомплекс.РФ;
Документ направлен в Стройкомплекс.РФ
MassProcessor получает ответ от API Стройкомплекс.РФ и сохраняет данную информацию в БД Diamond.