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

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

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

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

    test post

    asdf s,dn aksnkasn daksnld lkas

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

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

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

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

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

    Коворкинг Starthub

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

    Коворкинг Wework

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

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