Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mesilov/user-balance-accounts

Пример организации баланса пользователей и операций с ним для веб-приложения
https://github.com/mesilov/user-balance-accounts

money money-management

Last synced: 15 days ago
JSON representation

Пример организации баланса пользователей и операций с ним для веб-приложения

Awesome Lists containing this project

README

        

# user-balance-accounts
Пример организации баланса пользователей и операций с ним. В репозитории пример решения прикладной задачи связанной с хранением баланса клиентов абстрактного веб-сайта.

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

## Описание предметной области
Для бизнеса требуется хранить баланс своих клиентов. Для каждого аккаунта возможны операции списания и начисления бонусов. У пользователя может быть только один счёт. В зависимости от настроек начисленные бонусы могут сгорать через N дней. Вопросы пополнения \ списания в данном примере не расматриваются. Граница пролегает по API сервиса к которому поступают команды на управление балансом.

## Оглавление
1. Описание предметной области.
2. Теоретическая часть про учёт денег.
3. Термины предметной области.
4. Требования к функциональности примера.
5. Описание подхода к реализации сервиса.
6. Схема базы данных с демонстрационными данными и характерными SQL-запросами.
7. Пример реализации функционала на фреймворке Symfony в виде API-first сервиса. (А надо????)

## Теория про учёт денег

Совет от Phil Delgyado, [16 Nov 2023 at 01:10:16]
> Основное - хранить не только балансы, но и первичку,
> использовать транзакции,
> не использовать float для хранения денег,
> внимательно читать документацию по СУБД, в особенности про те же самые транзакции.
>
> Ну и совещаться с юристами, там больше всего рисков )

- [Увлекательная бухгалтерия для программистов](https://helpme1s.ru/osnovy-buxgalterskogo-uchyota-dlya-programmistov-1s)
- [ 📺 Как правильно считать деньги в базе данных / Роман Друзягин (404 Group)](http://www.youtube.com/watch?v=zs4VUokFtPQ)
- [ 📺 Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)](http://www.youtube.com/watch?v=wJz_sjjf2aE)
- [ 📺 Филипп Дельгядо — СУБД: индивидуальный пошив и подгонка по фигуре](http://www.youtube.com/watch?v=l4l5pLlC40U)
- [ 📺 Кошелек с нуля в 2020 году: технологии, вызовы, решения / Филипп Дельгядо (OpenWay Group)](http://www.youtube.com/watch?v=KPl6quKgffo)
- [ 📺 Архитектура платежной системы: почти enterprise / Филипп Дельгядо](http://www.youtube.com/watch?v=wMcWo2cT7Ck)

## Термины предметной области

### Счёт
Сущность, которая хранит монетарный баланс и имеет уникальный идентифиатор.

### Тип счёта
Классифиатор, который позволяет указать для чего конкретный счёт может быть использован: счет пользователя, виртуальный счёт системы, условный счёт предназначенный для «ввода\вывода» денежных средств из или в систему.

### Владелец счёта
Под владельцем счёта может выступать как конкретный пользователь, система, так и юр.лицо, например.

### Тип владельца счёта
Классифиатор, который позволяет указать по ккакому признаку объеденены владельцы счетов, например, это юр.лица или физ-лица.

### Типы операций
транзакции с точки зрения бизнеса (начисления, списания, сгорание бонусов, ручное пополнение, ручное списание и т.д) которые требуется различать для отчётности и по разному обрабатывать.

### Операционные периоды
период, за который данныне могут быть проверены на консистентность или выгружены в виде отчётов, обычно выбирается сутки

### Операции
Журнал проводок для фиксации в виде двойной бухгалтерской записи.

### Транзакции
Список задач с т.з. бизнеса которыми меняется состояние счетов. Пример: начисление по счёту за успешно выполненный заказ.

## Функциональные требования
В этом разделе собираем требования к системе сгруппированные по сущностям и функциональным блокам.

### 1. Счета
1. Счёт может быть в состоянии: активный или заблокирован, если счёт заблокирован, то операции по нему невозможны
2. Счёт обслуживает поступления и списания только в одной валюте.
3. По счёту возможен овердрафт: можно уйти в минус.

## 2. Пользователи
1. Под пользователем понимается его уникальный идентификатор uuid
2. У организации может быть до 10 000 000 пользователей.
3. Пользователи могут создаваться и блокироваться в процессе операционной деятельности организации, блокирование пользователя приводит к блокированию связанного с ним счёта.

## 3. Операции
1. Операция начисления производит начисление указанной суммы на счёт пользователя
2. Операция списания производит списание указанной суммы со счёта пользователя
3. Предполагаемая нагрузка составит менее 100 операций в секунду.

## 4. Отчёты
1. Общая сумма денежных средств на активных и заблокированных счетах
2. Баланс по конкретному счёту
3. История операций по конкретному счёту
4. Оборот начислений и списаний с группировкой по дням
5. Оборот начислений и списаний с группировкой по неделям
6. Оборот начислений и списаний с группировкой по месяцам
7. Количество созданных и заблокированных счетов с группировкой по дням
8. Количество созданных и заблокированных счетов с группировкой по неделям
9. Количество созданных и заблокированных счетов с группировкой по месяцам

## 5. Требования к реализации системы
1. Использование двойной бухгалтерской записи
2. Использование реляционной СУБД