Хотел бы поделиться интересным решением, которое, уверен, было бы полезно для кооперативов и товариществ.
Современные технологии постепенно проникают во все области нашей жизни. Сегодня сложно представить соседей многоквартирных домов или земельных участков СНТ/ДНТ без группового чата в мессенджере. Такие группы удобны для общения, они позволяют оперативно решать вопросы, публиковать объявления, делиться новостями и даже проводить опросы и голосования.
Кстати, голосование в мессенджере может иметь юридическую силу. Для этого нужно принять решение о возможности применения электронных средств при принятии решений общим собранием членов товарищества и внести соответствующие изменения в устав товарищества (п. 25 ч. 1 ст. 17 федерального закона № 217-ФЗ). При создании нашего товарищества так мы и сделали, и теперь большинство вопросов мы решаем удаленно через Telegram.
Результаты опросов, проведенных в Telegram, отображаются почти моментально в интерфейсе мессенджера. Однако такие результаты не учитывают случаи, когда количество голосов у членов товарищества отличается. Кроме того, в общем чате могут присутствовать супруги/родственники участников, которые могут проголосовать без права голоса. В итоге всё сводится к тому, что необходимо каждый раз пересчитывать голоса.
Чтобы не утомлять секретаря собрания лишней рутиной, мы решили автоматизировать этот процесс. И вот, что у нас получилось.
На скриншотах ниже представлены результаты одного из первых Telegram-опросов, которые мы провели.
Таким образом, участник товарищества просто отдает голос в опросе Telegram, а система автоматически в онлайн-режиме учитывает его голос (голоса) и отображает данные на дашборде.
Здорово, не так ли?
Визуальная часть нашего решения реализована в Grafana. Мы использовали панели Pie Chart, Stat и Geomap. Источником данных служит база данных MongoDB с коллекциями "Соседи", "Земли", "Опросы". Для подключения MongoDB в Grafana мы используем плагин grafana-mongodb-community-plugin.
Чтобы программно "отлавливать" голоса в Telegram, нужно чтобы опрос был создан Telegram-ботом. Такого бота мы написали на Golang с использованием библиотеки telegram-bot-api.
Учет голосов реализован в функции handlePollAnswer. Ниже представлена её упрощенная версия.
func handlePollAnswer(pollAnswer *tgbotapi.PollAnswer) {
// Ищем пользователя в БД
neighbor, err := db.GetNeighborByChatID(pollAnswer.User.ID)
if err != nil {
// handle error
return
}
// Если пользователь отменил голос, исключим его голос из базы
if len(pollAnswer.OptionIDs) == 0 {
err := db.DeleteVote(pollAnswer.PollID, neighbor.ID)
if err != nil {
// handle error
return
}
} else { // Если проголосовал, добавим голоса в базу
for _, optionID := range pollAnswer.OptionIDs {
err := db.AddVote(pollAnswer.PollID, neighbor, optionID)
if err != nil {
// handle error
return
}
}
}
}
Пример создания опроса в интерфейсе Telegram приведен на скриншоте ниже.
Для отображения данных на карте мы написали небольшой веб-сервис, который по данным коллекций "Опросы" и "Земли" формирует GeoJSON и возвращет его по HTTP-запросу. URL до нашего веб-сервиса мы указали в настройках панели Geomap. Там же настроили правила отображения.
Подложку для карты (тайлы) для нашего некоммерческого проекта мы сначала попросили у Yandex, так как на ней указаны названия улиц нашего посёлка. Но Yandex нам отказал. В итоге было принято решение взять подложку Here, за что мы им очень благодарны.
На этом у меня всё. Пишите Ваши вопросы в комментариях.
Спасибо за внимание!
Комментарии (4)
vkomp
24.10.2023 02:00Делаю свою систему принятия коллективных решений. Но пошел по классике "клиент-сервер" вместо телеги. Может потом до бота дойду, но пока разбираюсь с матчастью.
- основным вижу формирование реестра участников. Для этого использую открытые данные Росреестра по объектам
- в телеге может просто не быть многих участников. Для отсутствующих online и отказников предусмотрены листовки с доступом
- кроме "простого большинства" есть метод Шульце - компромиссные решения.
- на уровне сложности одного сообщества сложности решены. Сейчас добавляю важные плюшки. И завис с архитектурой и ux-дизайном.
- картинки пофиг. На маленьком экране их не рассмотреть. А на большом вторичны за числами.
Не вижу нормальной работы через телегу - лента удобна для срача, но не для модерируемого форума. За полдня набить сотню сообщений - и тупик.
*** Вообще основная цель - осмысленное управление жилым пространством. И проблема больше не техническая. В основном в чате многоквартирного дома наблюдаю отсутствие времени, идей и инертность. Но это "в целом по больнице". Ваш пример поселка заряжает бодрячком.vsile Автор
24.10.2023 02:00Действительно, формирование реестра участников является ключевой задачей и с административной стороны очень непростой. Некоторых соседей приходилось долго убеждать "поговорить" с ботом.
Интересно также было формировать реестр земельных участков. Потребовалось составить полигоны с координатами углов земельных участков.
"polygon" : [ [ 38.8386627021692, 44.747769230334 ], [ 38.8385678400752, 44.7475401641553 ], [ 38.8390895815922, 44.7474301222369 ], [ 38.8391733764419, 44.7476367313806 ], [ 38.8386627021692, 44.747769230334 ] ]
Полигоны мы составили с использованием приложения rosreestr2coord. Чтобы немного упросить процесс, мы разработали скрипт, который проходил по списку кадастровых номеров и запускал cli-приложение.
./rosreestr2coord -c 23:26:0401000:3919 -P
Также мы разработали скрипт, который из полученных файлов с данными из Росреестра формировал json-объекты земельных участков и помещал их в базу данных.
vkomp
24.10.2023 02:00Меня Росреестр больше по площадям интересовал. По координатам нет, потому что до графики еще не созрел
aborouhin
Всё это прекрасно, пока Вы не столкнётесь с достаточно
доёпридирчивым и технически продвинутым членом товарищества, который поставит под вопрос достоверность Ваших результатов голосования. Впрочем, часто в судах прокатывает и "нотариальное удостоверение", и "заключения специалистов" в отношении почты, переписки в мессенджерах и пр., каковые заключаются просто в "взяли телефон, открыли программу, посмотрели"... но это, опять же, работает ровно пока кто-то не решит заморочиться. А поскольку заверения Telegram Messenger Inc., что у них на серверах всё ровно так же и никто ничего не подменял, Вы вряд ли получите, - то решение работоспособно ровно до определённой степени.