Транслируем бюджет бизнеса из Финолога на экран Ламетрика

August 03 2023
Цели, задачи, реквизит
Процесс
Результат

Чтобы уверенно растить бизнес, необходимо ставить цели для роста и следить за их достижением. Чтобы следить было проще, хорошо иметь перед глазами и цель, и свой прогресс на пути к ней. Александр Македонский возил с собой карту мира, который желал захватить. Мы сделаем себе экран, который будет в реальном времени показывать текущее состояние расчетных счетов, выручку за месяц, график выручки по месяцам и прогресс выполнения целей на год.

Уровень сложности: поднять сервер на Линукс, разбираться в Python для web и nginx. Или показать статью такому человеку, чтобы он все сделал.

Ламетрика транслирует актуальное состояние расчетных счетов моих бизнесов.

Цели, задачи, реквизит

Нужно показывать актуальные данные о финансах нескольких бизнесов на умных часах LaMetric. Учет финансов происходит в сервисе Финолог.

Финолог — это сервис управления деньгами в бизнесе. Он предоставляет публичный REST API с api-token авторизацией. Документация очень подробная, АПИ очень гибкий. На каждом endpoint по реквест параметрам доступны широкие возможности для фильтрации, чем мы в дальнейшем воспользуемся.

LaMetric — позиционируются как умные часы. На самом деле, это интерактивная панель вывода информации, куда можно транслировать не только время, но и погоду, количество подписчиков в инстаграме, курс валют и что угодно еще. Есть библиотека с готовыми решениями, а есть приложение для трансляции собственных данных. Чтобы наши данные отобразить на часах, нужно повесить их в формате JSON на статичном URL. Часы подключены к интернету и регулярно опрашивают URL. Полученные оттуда данные отображаются на дисплее.

Цель — визуализировать данные управленческого учета из Финолога на LaMetric для двух бизнесов: студии аутсорс-разработки и магазина разливного пива.

Мы показываем:

  • текущий остаток по счету;
  • процент получения запланированной выручки за год (например, в плане годовая выручка 1000 руб., на данный момент имеем 300, показываем заполненную на 30% шкалу);
  • график распределения выручки по месяцам за текущий год.

Нам для этого требуется:

  1. Взять данные по остатку на всех счетах бизнеса и сформировать фрейм типа text с выводом остатка в тысячах рублей.
  2. Взять данные по всем по всем приходам статьи Выручка месяцам текущего года и из месячных сумм сформировать данные для фрейма chartData.
  3. Взять сумму всей выручки за текущий год, задать планку 100% и сформировать фрейм  goalData.
  4. Как-то держать информацию в актуальном виде.
  5. Сформировать JSON для двух бизнесов и повесить это на доступном для LaMetric URL.
Умные часы подключены к домашнему Wi-Fi, откуда получают информацию в реальном времени.

Процесс

Для реализации на серверной стороне я использовал python3. Хотелось выбрать что-то максимально простое, желательно без СУБД и чтобы можно было встроить на действующий VPS без сложной маршрутизации.

В качестве веб сервера работает стандартный wsgiref.simple_server. Под него написано простое WSGI приложение. Каждый раз, когда на сервер поступает запрос от LaMetric, сервер создает экземпляр FramesCatalog. Этот FramesCatalog опрашивает API Финолог и создает ответ в формате JSON и понятный LaMetric. Ответ сервер возвращает вместе с нужными заголовками и статусом.

server.py:

from wsgiref.simple_server import make_serverimport settingsfrom puller import FramesCatalogdef my_app(environ, start_response):    status = '200 OK'    headers = [('Content-type', 'application/json; charset=utf-8')]    start_response(status, headers)    response = FramesCatalog().get_frames_json()    return [response.encode()]if __name__ == '__main__':    with make_server(settings.HOST, settings.PORT, my_app) as srv:        srv.serve_forever()

FramesCatalog — это класс-каталог, который в зависимости от настроек в settings.py создает классы представления бизнесов Финолога. В эти классы встроены возможность опрашивать API Финолога и формировать нужные фреймы.

Авторизация на api.finolog.ru выполняется по API токену. Скрипт берет токен из соответствующей переменной окружения.

settings.py:

FINOLOG_API_KEY = os.environ.get('API_KEY')

Весь скрипт помещен в контейнер Docker. Dockrfile максимально простой, через директивы ARG и ENV реализована передача API токена в переменную окружения.

Dockerfile:

FROM python:3.8WORKDIR /homeRUN pip install -U pip requestsCOPY *.py ./ARG api_keyENV API_KEY $api_keyENTRYPOINT ["python", "server.py"]

Запускается контейнер в режиме демонизации с пробросом внутреннего TCP-порта 8088 на внешний 8123.

Вся описанная конструкция работает под обратным прокси nginx. В nginx используется отдельная директива location. В простейшем случае:

location /secret-path-to-lametric-frames {    proxy_pass  http//0.0.0.0:8123;}

Это позволяет выполнить маршрутизацию для www.domain.ru/secret-path-to-lametric-frames существующими средствами и не использовать, например, flask. Кроме того, все внешние запросы будут передаваться до nginx по https, что важно при передаче API токена в заголовке HTTP запроса.

В проекте не используется база данных. Все ответы сервера формируются на лету по факту поступления запроса.

Весь код можно посмотреть на GitHub.

Результат

Подобный экран — отличный инструмент для визуализации целей.

Кирилл, руководитель WB—Tech, уже рассказывал, как борется с прокрастинацией. Трансляция актуальных финансовых показателей — это еще один способ мотивации себя и команды.

Посмотрите разные автоматизации бизнес-процессов и выберите решение, которое подходит для вашей компании.

Автор статьи

Подпишитесь на блог WB—Tech

Никакого спама, только анонсы новых статей

    Последние статьи

    Миграция внутренних пользователей Jira в новую директорию с сохранением данных об активности

    Рассказали, как осуществили перенос пользовательских данных из Jira (Internal Directory) в директорию Microsoft Active Directory.

    Как эффективно хранить и актуализировать корпоративные данные средствами low/no-code

    Рассказали, как организовали поток HR-данных, чтобы оргструктура и бонусно-бухгалтерские расчеты всегда были актуальны.

    Мало кода, больше результативности: платформы low-code и no-code

    О low-code и no-code платформах, примерах использования и разбор нужно ли быть программистом.

    ИП Гришанин Кирилл Олегович
    ИНН 774313842609

    Коворкинг Starthub

    Б. Новодмитровская ул., 36, стр. 12, вход 6,
    Москва, Россия, 127015

    Коворкинг Wework

    Ahad Ha'am 54,Tel Aviv-Yafo,Израиль

    © 2023 WB—Tech. Мы разрабатываем уникальные решения для компаний из России, США и Европы.