1.2. Возможности
1.2.1. Особенности системы
1.2.1.1. WEB-приложение
Позволяет использовать его на любом устройстве и упрощает внедрение и сопровождение системы.
1.2.1.2. Поддержка нескольких баз данных
Система может использовать в виде хранилища данных
Oracle
MSSQL
PostgreSQL
MySQL.
База данных используется только в виде хранилища без процедурной логики, есть возможность миграции данных между типами баз данных. Вы можете выбрать PostgreSQL для старта и поменять его на Oracle или MSSQL в случае необходимости.
Поддерживается хранение системы на различных серверах. Часть данных можно разместить на высокопроизводительной базе, часть на более экономичной и большого объема.
1.2.1.3. Язык программирования и framework
Python является языком программирования общего назначения и подходит для широкого списка задач. Занимает лидирующие позиции для обработки неструктурированных данных (т.н. BigData). Микро framework-а Flask позволяет реализовать наиболее гибкую архитектуру, не накладывая ограничений на реализацию системы.

1.2.1.4. Стили оформления
Используется оформление Inspinia, основанное на CSS-framework Twitter Bootstrap. Позволяет разрабатывать интерфейсы, автоматически подстраивающиеся под размеры экрана браузера. Содержит в себе большую коллекцию модулей, оформленных в едином стиле.

1.2.1.5. Базовые требования
Для работы достаточно виртуальной машины: 10Гб HDD; 1 CPU; 1Гб ОЗУ. Не требует сопутствующих лицензионных продуктов (операционная система, СУБД и так далее).
1.2.1.6. Разделение на ядро и конфигурацию
Упрощает работу настройщика и снижает риски при разработке. Всегда можно добавить внешние библиотеки и отдельные разделы самостоятельно на уровне конфигурации без вмешательства в ядро.
1.2.1.7. Синхронизация СУБД с кодом
Структура базы данных формируется ядром системы автоматически. Нет необходимости актуализировать структуру СУБД (таблицы, колонки) вручную.
1.2.1.8. Быстрое переключение версий
За счет того, что все настройки системы находятся в файлах под управлением репозитория, всегда можно вернуться на любую версию конфигурации при необходимости
1.2.1.9. Легкость выкладывания изменений
Вся логика системы (скрипты, точная настройка 100% согласованной с конфигурацией) обновляется на рабочую версию синхронно, потому что все это идет в составе единой ревизии системы контроля версий. После обновления мы можем гарантировать, что ровно то, что было на тесте, будет и на рабочей версии. Нет необходимости переносить данные между таблицами тестовой и рабочей версии, нет необходимости держать единые таблицы-справочники для рабочей и тестовой системы. Перенос сводится к обновлении ревизии в директорию рабочего сервера, применению миграций базы данных.
1.2.1.10. Бета-версия
За счет того, что вся логика системы находится не в базе данных, а в файлах, можно развернуть сервер приложений, который подключается к рабочей базе данных.
1.2.1.11. Пул подключений к базе данных
Система может работать через пул подключений к базе данных и дополнительно имеет внутренний пул подключений. Снижает нагрузку на процессы СУБД (особенно значимо для Oracle listener) при частом установлении и разрыве подключений.
1.2.1.12. Менеджеры фоновых операций
Часть операций, которые требуют долгой работы (сетевое ожидание при интеграции, отправка писем, обработка загруженных файлов), можно выполнять в фоновом режиме, не задерживая работу операторов и распределять нагрузку на систему по времени, сглаживая пиковые нагрузки за счет размещения задач в очереди и выполнение их, когда есть свободные ресурсы сервера.
Такие операции можно вынести в отдельные потоки и выполнять на отдельных процессах или на отдельных серверах. Можно получать результат выполнения этих задач назад в поток, из которого была поставлена задача и отслеживать статус выполнения задач. Можно перезапускать задачи, если сейчас нет сетевого соединения. Задача будет выполнена тогда, когда соединение восстановится.
— Отправка email и SMS — Обновление модели машинного обучения — Запись логов — Отправка накопившихся изменений в интеграционный сервис — Периодическая отправка сообщений о просроченных делах
1.2.1.13. Машинное обучение
Язык Python широко используется для целей машинного обучения и является одним из лидеров в этой области.
1.2.1.14. Backend для мобильных приложений
Система может играть роль backend-сервера для мобильных приложений на различных платформах
1.2.1.15. Интеграция
- Клиенты
— SOAP — REST — WEB-service POST/GET — Базы данных (Oracle, MSSQL, MySQL, PostgreSQL, SQLite, MongoDB) — Файловые обменные ресурсы (забирать создавать XML / CSV / JSON файлы в директории обмена) — Почтовые серверы (получать сообщения, отправленные другим сервисом в почту, и генерировать ответные сообщения тоже в почту)
- Серверы
— SOAP — REST — Почтовые серверы — WEB-service POST/GET — Базы данных
1.2.1.16. Сигналы (аналог триггеров в базе данных)
Различные действия в системе выпускают так называемые «сигналы», на которые можно подписаться и отреагировать каким-либо действием, например:
— при получении письма от VIP-клиента системой скачивания сообщений — при загрузке файла определенного типа — при отправке документа с этапа «Ожидание» — при поступлении дела на этап «Архив» — при изменении даты страхового события или суммы — заполнить какое-то поле — создать скрытую задачу на проверку дела сотрудником СБ — отправить уведомление по почте или SMS сотруднику — уведомить клиента или партнера СТОА о назначении даты ремонта (где и когда)
1.2.1.17. Запись всех действий оператора
— Производится в асинхронном неблокирующем режиме для получения максимального быстродействия — Возможно ведение записей разного уровня в разные потоки данных (файл, почта, сборщик логов, встроенный в ядро) — Фиксируются все действия оператора (отправка каждого значения формы, переход по каждому адресу) — Данные логов могут использоваться для построения отчетов
1.2.1.18. Система сбора и обработки логов
Предназначена для сбора различных событий с множестра разнородных систем и сервисов, их объединения, обработки, хранения, поиска — Возможность приема сообщений от внешних сервисов (REST-интерфейс) — Возможность объединения сообщений в группы по месту возникновения и шаблонам — Возможность уведомления о ключевых событиях по SMS и электронной почте — Антиспам. Если одно и то же критическое событие произойдет у 100 пользователей, Вы получите 1 сообщение на почту / SMS

1.2.1.19. Профилировщик кода
Позволяет получать стек вызовов и отслеживать время и количество выполнения различных участков кода, формировать графическое представление стека

1.2.1.20. Работа с электронной почтой
— Отправка сообщений через GUI с авто-генерацией текстов по шаблону — Отправка сообщений в автоматическом режиме, как реакции на сигналы, так и по расписанию — Загрузка сообщений через IMAP с обработкой — Разбор и автоматическая обработка темы, текста, вложений по шаблонам — Создание по письмам-заданиям — Взаимодействие с контрагентами в автоматическом режиме — Визуализация почтовой переписки в виде чата в карточке дела

1.2.1.21. Отправка SMS с визуальным редактором
Позволяет формировать SMS по шаблонам с возможностью редактирования операторами или автоматически, а также контролировать статус доставки.

1.2.1.22. Поддержка быстрого создания приложений BPS
Приложения, специализированные на редактирование объектов, имеющих как учетную часть (форма редактирования с гибкой системой доступа), так и workflow сущность движения по процессу.
Настройка через конфигурационные файлы
Ограничение доступа к документам и отдельным полям / блокам
Различные типы полей
Интерактивные подсказки оператору
Система задач для моделирования подпроцессов
Файловый архив
Система комментирования документов
Более подробно смотрите BPS-приложение
1.2.2. Производительность и масштабируемость
1.2.2.1. Базовые возможности
На виртуальной машине с 4 CPU и 8Гб оперативной памяти производительность составляет около 200 карточек документов в секунду. Если этого недостаточно, можно увеличить за счет
- — Вертикального
Установка на более мощный сервер.
- — Горизонтального:
Добавляем недорогие серверы и объединяем их в кластер.
На наш взгляд, горизональное масштабирование более предпочтительно, так как добавляет отказоустойчивости системы в целом (перераспределение нагрузки) и намного более экономично.
1.2.2.2. Сервера приложений
На «легкой» виртуальной машине устанавливается кэширующий прокси-сервер nginx, который отдает статические файлы (стили и JavaScript) и файлы, загруженные пользователем, самостоятельно. Динамический контент (html-код и ajax-запросы) он переадресует серверам приложений, равномерно распределяя нагрузку. Кэширующим сервером является memcached, обеспечивающий единый кэш для всех серверов uWSGI и их серверных процессов.
1.2.2.3. Серверы базы данных
СУБД является частью системы, наиболее сложной для масштабирования.
- — Синхронный master — slave
Чтение делается в slave-сервера, а запись — в master. Настраивается репликация данных в синхронном режиме (долгая запись, быстрое чтение).
- — Асинхронный master — slave
Часть системы, отвечающая за оперативную обработку транзакций, работает только с master-сервером, а отчетность и не критичные к запаздыванию данных части читают с slave, а пишут в master-сервер.
1.2.3. Простота внедрения, гибкость, кастомизация
1.2.3.1. WEB-система
Не требуется установка какого-либо дополнительного ПО, библиотек или зависимостей на компьютеры пользователей. Не требуется каких-либо мероприятий для установки обновлений. Система работает одинаково у всех пользователей. Можно пользоваться системой на разных операционных системах, как платных, так бесплатных.
1.2.3.2. Адаптивная верстка
Система доступна на любом мобильном устройстве. На встрече или в командировке Ваши данные и отчеты всегда «под рукой», их не нужно отдельно выписывать и подготавливать к встречам. Адаптивная верстка позволяет получить комфортный доступ на любом устройстве — от компьютера до смартфона.
1.2.3.3. Защищенный доступ
По шифрованному каналу https (возможно использование двусторонних ключей со стороны клиента и сервера). С системой можно работать только через браузер или WEB-сервисы. Нет прямого доступа к базе данных, который можно прослушать, и возможности декомпиляции приложения
1.2.3.4. Быстрое изменение
Python — интерпретируемый язык, и вносить изменения можно моментально, без компиляции приложения. Все настройки конфигурации система хранит в виде файлов XML, которые можно обрабатывать автоматически. Вы можете развернуть систему в режиме бета-версии, когда система с новыми настройками конфигурации подключена к production базе данных вместе с stable-релизом. Это позволит выделить несколько операторов для работы в режиме проверки конфигурации и подхода (в случае, если что-то пошло не так, операторы могут перейти на stable версию и продолжить работу с теми же документами, но в конфигурации предыдущего релиза).
1.2.3.5. Быстрый результат
Мы можем выкладывать изменения с тестовой площадки после Вашей проверки на рабочую версию каждые сутки за счет того, что все, что требуется системе, есть в конфигурации. Достаточно объединить тестовую ветку репозитория и выложить ее в production. Никаких дополнительных операций не требуется.
1.2.3.6. Можно самим
Все основные настройки системы выполняются через редактирование конфигурационных файлов
— Параметры документов (поля) — Этапы процесса — Роли доступа — Правила доступа видимость / редактирование — Правила перемещения документов по процессу — Системные справочники
Возможно создание логики и обработка данных внутри проектов BPS и разработка дополнительных приложений, не связанных с BPS своими силами

1.2.3.7. Гибкий интерфейс
Логика и отображение данных отделены друг от друга, что позволяет в максимально широких пределах менять карточку документа и вообще любой шаблон уровня ядра. В системе есть отображение по умолчанию, с выделенными блоками, элементами и способом их вывода. Вы можете заменить любой шаблон, переопределив в нем только некоторые блоки на любом уровне (форму документа, раздел модулей, файлов или всю страницу) наиболее подходящим образом.



1.2.4. Встроенная система отчетов
Отображение в табличном или графическом виде, скачивание в Excel Позволяет реализовать многоуровневую детализацию данных и посмотреть, какие конкретные документы использовались для расчета каждой ячейки таблицы, перейти в карточке конкретного документа


