Моделирование выполняется в рамках создания сервиса начисления баллов для последующего использования в распределения эмиссии токенов между участниками экономики сообщества.
Сервис использует данные из различных источников. Функционально его можно разделить на агрегатор событий и сервис начисления баллов. На данном этапе все выполняется в рамках одного сервиса, и более того они используют одну базу данных. Разделю их в функциональном описании как Агрегатор событий и Сервис начисления баллов. Что бы отделить агрегатор событий для начисления баллов от агрегатора событий с фронтенда, они будут называться по разному: агрегатор событий (домашний) и агрегатор событий (улица).
Моделирование выполню в таблице. Что бы не усложнять этот вариант функционального моделирования на нем будут четыре основные типа объектов Сервис (источник данных), данные и Сервис (приемник данных) и способ получения данных. Данная таблица описывает граф, то-есть один и тот же узел этого графа когда он предоставляет данные для другого сервиса является источником, а когда получает данные из сервиса то является приемником.
Добавлена колонка статус, что бы отслеживать текущее состояние по реализации этих функций.
Так-же моделирование будет выполнено в “функциональном” стиле сверху вниз, начиная от поведения в надсистеме. Так оказалось проще заполнять таблицу в отличии от “императивного” стиля снизу вверх.
| Статус | Сервис (источник данных) | Данные | Способ получения | Сервис (приемник данных) | 
|---|---|---|---|---|
| В процессе. Делаются тестовые варианты.  | 
Сервис начисления баллов | Данные для распределения недельной эмиссии токенов. Дата начала недели, идентификатор пользователя, баллы.  | 
Через запрос к API получаем файл .csv, который дальше загружается вручную в криптосервис. | Криптосервис Solana | 
| создаются различные внешние виды расшифровки для тестирвоания | Сервис начисления баллов | Расшифровка начисления.  В виде файла pdf.  | 
Запрос к API. | Фронтенд личного кабинета пользвоателя. | 
| Репозиторий проекта на Git | Правила начисления баллов. Правила в формате JSON. | Через сборку кодовой базы в работающий сервис, правила становятся частью экземпляра работающего сервиса начислений. | Сервис начисления баллов | |
| Агрегатор событий (домашний) | События: ExerciseSave, SectionCompleted, ClubCommentReceived, ClubCommentWritten, ClubLike, ClubLikeReceived, ClubText  | 
Запрос к PostHog | Сервис начисления баллов | |
| так реализовано сейчас в тестовой версии | API aisystant | Данные о квалификации участника | Запрос к API | Сервис начисления баллов | 
| возможный вариант | API aisystant, Агрегатор событий (домашний)  | 
Данные о квалификации участника | Если есть в Агрегатор событий (домашний) запись об получении квалификации то оттуда. Если нет то через запрос к API aisystant  | 
Сервис начисления баллов | 
| Сейчас | API aisystant | Данные о систематичности. День занятий без перерыва.  | 
Запрос к API | Сервис начисления баллов | 
| Если там будут все события. Вариант 1  | 
Агрегатор событий (домашний) | Данные о систематичности. День занятий без перерыва.  | 
Запрос к PostHog. Получение записи о дне систематичности.  | 
Сервис начисления баллов | 
| Если там будут все события. Вариант 2  | 
Агрегатор событий (домашний) | Данные о систематичности. День занятий без перерыва.  | 
Запрос к PostHog и расчет дня систематичности. | 
Сервис начисления баллов | 
| Сейчас в тестовом начислении. Планируем отказаться. | Агрегатор событий (улица) | События: exerciseSave (ExerciseSave), sectionCompleted (SectionCompleted)  | 
Запрос к PostHog. И мэпинг наименований.  | 
Агрегатор событий (домашний) | 
| рассматриваем такой вариант | API aisystant | ExerciseSave, SectionCompleted  | 
Запрос к API | Агрегатор событий (домашний) | 
| реализована тестовая версия. Надо проверить временные пояса в возвращаемом времени.  | 
Клуб. | SectionCompleted, ClubCommentReceived, ClubCommentWritten, ClubLike, ClubLikeReceived, ClubText | Запрос к API клуба сделанному с помощью плагина Data Exploer. | Агрегатор событий (домашний) | 
На данной расшифровке не отражено такое событие как Point, оно является особенностью работы “Сервис начисления баллов”. Начисленные баллы сохраняются в эти события (при этом до конца не понятен онтологический смысл - это событие или скорее запись о начислении), далее по ним подсчитываются баллы, используется ссылка из этих события что бы исключить повторные начисления по событиям по которым было начислено, даже если нулевая сумма.. Также заполненные доп. реквизиты в этих полях необходимы для формирования расшифровки начисления в формате .pdf для участника.
Это следствие того что сознательно убрал колонку, того в какие промежуточные данные заполняются сервисами. Произошло игнорирование внутренних состояний, что упростило таблицу и стало выполнено в функциональном стиле.
В будущем возможно добавить колонку “Тип эмиссии” - что бы в случае появления новых видов начислений токенов, разделить потоки данных.