effects, documents and processes

This commit is contained in:
Alex Ant
2025-08-26 19:58:20 +05:00
parent 8b032eba9a
commit 0623005ff4
53 changed files with 524 additions and 81 deletions
@@ -0,0 +1,28 @@
---
trigger: manual
---
Мне нужно, чтобы ты организовал следующий принцип доступа к файлами документации:
1. У каждого эффекта должен быть файл процесса, на который он ссылается.
2. У каждого эффекта должен быть свой файл, который лежит рядом с файлом процесса (в той же директории) и называется вот так <name>-effect.dox
3. Каждый файл эффекта должен содержать информацию о движении средств по кошелькам пользователя или кооператива типа такого (БЕЗ СПЕЦИАЛЬНОЙ DOXYGEN РАЗМЕТКИ!!!):
➕🏛️ Ledger::add на счёт Ledger::accounts::SHARE_FUND на сумму паевого взноса за вычетом ссуды\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _source_program на сумму паевого взноса за вычетом ссуды\n
➖🏛️ Ledger::sub со счёта Ledger::accounts::LONG_TERM_LOANS на сумму погашаемой ссуды\n
🫳 Loan::settle_debt на сумму погашаемой ссуды
4. Все файлы эффектов должны собираться в единый файл для обзора, который находится в docs/effects-traces.dox вот так:
/**
* @defgroup deltas_overview Эффекты по процессам
* @ingroup public_capital
@ref public_capital_result_process
@include{doc} public_capital_result_process-effect.dox
4. Все файлы процессов должны включать в конце, но перед информацией о связанных процессах, файл с эффектом:
# Эффекты процесса
@include{doc} public_capital_result_process-effect.dox
5. Все пути могут быть без префиксов и директорий и определяться просто уникальным именем файла.
...
*/
@@ -10,3 +10,4 @@ trigger: manual
- 📄 принятое председателем заявление
- 💰➕🔒 добавление заблокированных средств в кошелек проекта
- 🏛️➕✅ добавление доступных средств на счет паевого фонда
+3 -3
View File
@@ -953,21 +953,21 @@ EXCLUDE_SYMBOLS =
# that contain example code fragments that are included (see the \include
# command).
EXAMPLE_PATH =
EXAMPLE_PATH = .
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank all
# files are included.
EXAMPLE_PATTERNS = *
EXAMPLE_PATTERNS = *.dox
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude commands
# irrespective of the value of the RECURSIVE tag.
# The default value is: NO.
EXAMPLE_RECURSIVE = NO
EXAMPLE_RECURSIVE = YES
# The IMAGE_PATH tag can be used to specify one or more files or directories
# that contain images that are to be included in the documentation (see the
@@ -1,6 +1,6 @@
/**
* @defgroup public_capital_debt_process Выдача ссуд
* @defgroup public_capital_debt_process Выдача ссуды
* @ingroup public_capital_processes
*
* Процесс выдачи беспроцентных ссуд Вкладчикам проекта на основании их трудовых
@@ -109,7 +109,7 @@
* - statement - заявление на получение ссуды
*
* @post Результат выполнения:
* - Создаётся заявление в таблице Capital::debts
* - 📄 Создаётся заявление в таблице Capital::debts
* - Резервируется сумма долга в сегменте Вкладчика, что не позволяет повторно отправлять заявления
*
* ### Шаг 2: Одобрение заявки председателем
@@ -117,10 +117,10 @@
* Председатель или доверенное им лицо принимает предварительное решение через действие @ref capital::approvedebt.
*
* @pre Предварительные условия:
* - Заявление создано и ожидает рассмотрения
* - 📄 Заявление создано и ожидает рассмотрения
*
* @post Результат выполнения:
* - При одобрении заявление передаётся в совет для получения протокола решения
* - 📄 При одобрении заявление передаётся в совет для получения протокола решения
* - При отклонении заявка закрывается с указанием причин
*
* @note Председатель оценивает обоснованность запроса, проверяет финансовое состояние проекта
@@ -131,7 +131,7 @@
* Совет принимает решение о выдаче ссуды через действие @ref capital::debtauthcnfr.
*
* @pre Предварительные условия:
* - Заявление одобрено председателем
* - 📄 Заявление одобрено председателем
*
* @post Результат выполнения:
* - При положительном решении инициируется исходящий платёж через контракт @ref public_gateway "Шлюза"
@@ -145,16 +145,15 @@
* Контракт @ref public_gateway "Шлюза" подтверждает успешное перечисление средств Вкладчику через действие @ref capital::debtpaycnfrm.
*
* @pre Предварительные условия:
* - Совет авторизовал выдачу ссуды
* - 📄 Совет авторизовал выдачу ссуды
* - Gateway инициировал платёж
* @post Результат выполнения:
* - Фиксируется факт получения средств Вкладчиком
* - 📄 Фиксируется факт получения средств Вкладчиком
* - Создаётся запись в контракте @ref public_loan "Ссуд"
* - Увеличивается общий долг Вкладчика в системе
* - Вкладчик получает средства на свой банковский счёт
* - TODO: Проводка по какому счёту тут должна быть???
*
* @note Создание записи о долге в контракте loan фиксирует обязательство Вкладчика
* по возврату полученных средств, информация о котором доступна в том числе и в других контрактах.
*
@@ -225,9 +224,17 @@
* @note Чем больше ссуда, тем меньше средств остаётся для конвертации в главный кошелёкёк, кошелёк проект или кошелёк программы.
* Премиальная часть не затрагивается и полностью доступна для конвертации в программу капитализации или для конвертации в кошелёк проекта.
*
*
## Эффекты процесса
@include{doc} debtpaycnfrm-effect.dox
## Документы процесса
@include{doc} debt-process-docs.dox
*
* ## Связанные процессы
*
* - @ref public_capital_project_investment_process "Инвестиции в проект" - инвестиции обеспечивают ссуды
* - @ref public_capital_result_process "Приём результата" - ссуды погашаются при внесении результата
* - @ref public_capital_conversion_process "Конвертация взносов" - учитывает выданные и погашенные ссуды
*/
@@ -0,0 +1,3 @@
- 📄 Заявление на получение ссуды
- 📄 Визирующая подпись председателя на заявл. на заявлении
- 📄 Протокол решения совета о выдаче ссуды
@@ -0,0 +1,2 @@
➕🏛️ Ledger::add на счёт Ledger::accounts::LONG_TERM_LOANS на сумму выданной ссуды\n
🫴 Loan::create_debt на сумму выданной ссуды
@@ -1,13 +1,8 @@
/**
* @brief Подтверждает оплату долга
* Подтверждает оплату долга и создает объект долга в контракте loan:
* - Получает долг
* - Обновляет статус долга на paid
* - Создает объект долга в контракте loan
* - Увеличивает долг contributor
* - Удаляет долг после подтверждения оплаты
* @brief Подтверждает оплату выданной ссуды.
* Подтверждает оплату выданной ссуды и создает объект в контракте loan:
* @param coopname Наименование кооператива
* @param debt_hash Хеш долга для подтверждения оплаты
* @param debt_hash Хеш-идентификатор ссуды для подтверждения оплаты
* @ingroup public_actions
* @ingroup public_capital_actions
@@ -0,0 +1 @@
➖🏛️ Ledger::sub со счёта Ledger::accounts::TARGET_RECEIPTS на сумму фондирования
@@ -1,6 +1,6 @@
/**
* @defgroup public_capital_fundprog_process Регистрация членских взносов по программе
* @defgroup public_capital_fundprog_process Фондирование членских взносов на программу
* @ingroup public_capital_processes
*
* Кооператив может направлять накопленные членские взносы на распределение между всеми вкладчиками программы "Капитализация" в целях обеспечения возвратов их вкладов.
@@ -45,7 +45,10 @@
*
* @post Обновление показателя CRPS для программы капитализации
*
* ## Связанные процессы
* ## Эффекты процесса
@include{doc} fundprog-effect.dox
## Связанные процессы
* - @ref public_capital_refresh_program_process "Обновление кошелька программы"
* - @ref public_capital_withdraw_from_program_process "Возврат паевого взноса из программы"
*/
@@ -0,0 +1,2 @@
➖🔒 Wallet::sub_blocked_funds на кошельке @ref _capital_program на сумму возврата\n
➕🔓 Wallet::add_available_funds на кошельке @ref _wallet_program на сумму возврата
@@ -89,6 +89,9 @@ sequenceDiagram
- Сумма возвращается в кошелек вкладчика в программе капитализации
- Заявление удаляется из системы
## Эффекты процесса
@include{doc} createwthd3-effect.dox
## Связанные процессы
- @ref public_capital_fundprog_process "Регистрация членских взносов в программу"
@@ -1,6 +1,6 @@
/**
@defgroup public_capital_fundproj_process Регистрация членских взносов по проекту
@defgroup public_capital_fundproj_process Фондирование членских взносов на проект
@ingroup public_capital_processes
Кооператив может направлять накопленные членские взносы на распределение между всеми вкладчиками конкретного проекта.
@@ -52,6 +52,9 @@ sequenceDiagram
@post Средства становятся доступны для распределения между вкладчиками проекта
@post Обеспечение формируется для последующего возврата паевых взносов вкладчиков
## Эффекты процесса
@include{doc} fundproj-effect.dox
## Связанные процессы
- @ref public_capital_refresh_project_process "Обновление кошелька проекта"
- @ref public_capital_withdraw_from_project_process "Возврат средств из кошелька проекта"
@@ -0,0 +1 @@
➖🏛️ Ledger::sub со счёта Ledger::accounts::TARGET_RECEIPTS на сумму фондирования
@@ -0,0 +1,2 @@
➖🔒 Wallet::sub_blocked_funds на кошельке @ref _capital_program на сумму возврата\n
➕🔓 Wallet::add_available_funds на кошельке @ref _wallet_program на сумму возврата
@@ -89,6 +89,9 @@ sequenceDiagram
- Сумма возвращается в кошелек вкладчика в проекте
- Заявление удаляется из системы
## Эффекты процесса
@include{doc} createwthd2-effect.dox
## Связанные процессы
- @ref public_capital_fundproj_process "Регистрация членских взносов в проект"
@@ -0,0 +1,2 @@
- 📄 Служебная записка
- 📄 Протокол решения совета по списанию расходов (?)
@@ -111,6 +111,12 @@ sequenceDiagram
@post Сумма использованных средств проекта обновлена
@post Запись расхода удалена из системы
## Эффекты процесса
@include{doc} exppaycnfrm-effect.dox
## Документы процесса
@include{doc} create-expense-docs.dox
## Связанные процессы
- @ref public_capital_fundproj_process "Регистрация членских взносов в проект"
@@ -0,0 +1 @@
➕🏛️ Ledger::add на счёт Ledger::accounts::ECONOMIC_ACTIVITY_FUND на сумму расхода\n
@@ -0,0 +1,3 @@
🔒 Wallet::block_funds на кошельке @ref _wallet_program на сумму инвестиций\n
➖🔒 Wallet::sub_blocked_funds на кошельке @ref _capital_program на сумму инвестиций\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _capital_program на сумму инвестиций\n
@@ -0,0 +1,2 @@
- 📄 Заявление на конвертацию из главного кошелька в кошелек программы "Капитализация"
- 📄 Визирующая подпись председателя на заявл. на конвертацию
@@ -78,8 +78,16 @@
* @post разблокировка средств инвестора в главном кошельке
*
* <b>Результат:</b> Средства возвращаются инвестору
## Эффекты процесса
@include{doc} createpinv-effect.dox
## Документы процесса
@include{doc} program-investment-docs.dox
*
* ## Связанные процессы
*
* - @ref public_capital_project_investment_process "Инвестиции в проект" - альтернативный способ финансирования
*/
@@ -0,0 +1,3 @@
🔒 Wallet::block_funds на кошельке @ref _wallet_program на сумму инвестиций\n
➖🔒 Wallet::sub_blocked_funds на кошельке @ref _wallet_program на сумму инвестиций\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _source_program на сумму инвестиций\n
@@ -0,0 +1,2 @@
- 📄 Заявление на конвертацию из главного кошелька в кошелек договора УХД
- 📄 Визирующая подпись председателя на заявл. на конвертацию
@@ -116,10 +116,18 @@
* @post увеличение суммы возвращенных инвестиций проекта
* @post корректировка фактически использованной суммы инвестиций
*
## Эффекты процесса
@include{doc} createinvest-effect.dox
## Документы процесса
@include{doc} project-investment-docs.dox
*
*
* ## Связанные процессы
*
* - @ref public_capital_planning_process "Планирование проекта" - план определяет потребность в инвестициях
* - @ref public_capital_debt_process "Управление ссудами" - инвестиции обеспечивают ссуды
* - @ref public_capital_unused_return_process "Возврат неиспользованных средств" - возврат неиспользованной части
* - @ref public_capital_result_process "Приём результата" - инвестиции участвуют в капитализации
*/
@@ -0,0 +1 @@
- 📄 Заявление на конвертацию неиспользуемых инвестиций со счёта кошелька договора УХД в главный кошелёк
@@ -2,7 +2,7 @@
* @defgroup public_capital_unused_return_process Возврат неиспользованных инвестиций
* @ingroup public_capital_processes
*
* Процесс возврата инвесторам неиспользованной части их инвестиций после
* завершения проекта. Обеспечивает справедливое распределение средств
* на основе фактического использования инвестиций.
@@ -78,10 +78,15 @@
* @post Пересчёт общей стоимости сегмента с учётом скорректированной инвестиции
*
* <b>Результат:</b> Неиспользованные средства возвращены инвестору
*
## Документы процесса
@include{doc} unused-return-docs.dox
*
* ## Связанные процессы
*
* - @ref public_capital_project_investment_process "Инвестиции в проект" - исходные инвестиции
* - @ref public_capital_result_process "Приём результата" - завершение перед возвратом
* - @ref public_capital_conversion_process "Конвертация взносов" - использует скорректированные суммы
*/
@@ -0,0 +1,2 @@
- 📄 Приложение к договору УХД по проекту
- 📄 Визирующая подпись председателя на приложении к договору УХД
@@ -56,4 +56,7 @@
@post вкладчик не получает доступ к участию в проекте
## Документы процесса
@include{doc} joining-process-docs.dox
*/
@@ -0,0 +1,2 @@
- 📄 Договор УХД
- 📄 Визирующая подпись председателя на договоре УХД
@@ -2,7 +2,7 @@
@defgroup public_capital_registration_process Регистрация вкладчиков
@ingroup public_capital_processes
Процесс приёма договора УХД от пайщика, смены его статуса с кандидата в вкладчики на активного вкладчика
и обеспечения технической возможности участвовать в проектах и программе капитализации.
@@ -81,8 +81,12 @@
3. Создана правовая основа для участия в проектах через договор УХД
4. Открыт программный кошелек для операций по проектам
## Документы процесса
@include{doc} registration-docs.dox
## Связанные процессы
- @ref public_capital_joining_process "Получение допуска к проекту"
*/
@@ -0,0 +1 @@
- 📄 Шаблонизированная часть приложения к договору УХД образуется предметом проекта, которая устанавливается при создании проекта
@@ -2,7 +2,6 @@
@defgroup public_capital_project_creation_process Создать проект
@ingroup public_capital_processes
@pre Идея проекта прошла отбор в банке идей и готова к планированию
Процесс создания нового проекта в системе кооператива для последующей
@@ -43,4 +42,7 @@
@post статус проекта устанавливается в CREATED
@post проект готов к переходу в фазу планирования
## Документы процесса
@include{doc} project-creation-docs.dox
*/
@@ -0,0 +1,2 @@
➕🏛️ Ledger::add на счёт Ledger::accounts::SHARE_FUND на сумму паевого взноса\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _capital_program на сумму паевого взноса\n
@@ -0,0 +1,5 @@
- 📄 Заявление на паевой взнос имуществом по программе "Капитализация"
- 📄 Визирующая подпись председателя на заявл. на паевой взнос имуществом
- 📄 Протокол решения совета о приёме имущества по программе "Капитализация"
- 📄 Подпись акта приёма-передачи имущества от собственника
- 📄 Подпись акта приёма-передачи имущества от председателя
@@ -121,6 +121,14 @@
* - Указывается причина отказа
* - Заявка удаляется из системы
* - Возможна повторная подача с учётом замечаний
## Эффекты процесса
@include{doc} act2pgprp-effect.dox
## Документы процесса
@include{doc} program-property-docs.dox
*
* ## Связанные процессы
*
@@ -128,4 +136,5 @@
* - @ref public_capital_project_property_process "Имущественные взносы в проект" - альтернативное направление
* - @ref public_capital_membership_process "Распределение членских взносов" - получение доходов
* - @ref public_capital_conversion_process "Конвертация взносов" - имущественные взносы направляются в программу
*/
@@ -0,0 +1,9 @@
- 📄 Предложение имущества на внесение по приложению к договору УХД
- 📄 Визирующая подпись председателя на предложении
@note В этом процессе используется "предложение имущества" вместо заявления т.к. фактически имущество по заявлению будет вноситься по завершению проекта вместе с результатом.
В этом процессе мы только принимаем решение, а будем ли мы принимать имущество в будущем, когда проект будет завершен.
В целом, вероятно, здесь можно обойтись вообще без документов. Но с точки зрения практики, наверняка собственникам захочется
какого-либо подтверждения, что имуществом будет принято, если результат проекта будет выполнен.
И второе, хорошо бы не ломать "одно окно" председателя по работе со взносами.
А для этого нужен документ и подпись о приёме - как стандартный бизнес процесс. Если никакой документ тут нормально не подложить, то процесс "одного окна" придется, вероятно, поламать.
@@ -91,6 +91,10 @@
* ## Особенности имущественных взносов в проект
*
* @note Имущественные взносы в проект фактически передаются в кооператив на стадии приёма результата проекта. После одобрения предложения собственник должен передать имущество вместе с другими участниками проекта на стадии генерации, когда проект формирует готовый результат. В этот момент подписывается акт приёма-передачи, и имущество формально вносится в проект наравне с другими вкладами.
*
## Документы процесса
@include{doc} project-property-docs.dox
*
*
* ## Связанные процессы
*
@@ -99,4 +103,5 @@
* - @ref public_capital_result_process "Приём результата" - имущественные взносы участвуют в капитализации
* - @ref public_capital_conversion_process "Конвертация взносов" - особые правила для имущественных взносов
* - @ref public_capital_program_property_process "Имущественные взносы в программу" - альтернативное направление
*/
*/
@@ -0,0 +1,4 @@
- 📄 Заявление на конвертацию из кошелька приложения к договору УХД (договора УХД) в:
- главный кошелёк (ЦПП "Цифровой Кошелёк")
- кошелёк проекта (другое или то же приложение к договору УХД)
- кошелёк программы (ЦПП "Капитализация")
@@ -0,0 +1,3 @@
➖🔒 Wallet::sub_blocked_funds на кошельке @ref _source_program на сумму паевого взноса за вычетом суммы конвертации в кошелёк проекта\n
➕🔓 Wallet::add_available_funds на кошельке @ref _wallet_program на сумму конвертации в главный кошелёк\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _source_program на сумму конвертации в кошелёк программы\n
@@ -95,21 +95,18 @@ void capital::convertsegm(eosio::name coopname, eosio::name username,
eosio::check(total_convert == total_segment_available,
"Общая сумма конвертации должна равняться общей стоимости сегмента (total_segment_cost)");
Wallet::sub_blocked_funds(_capital, coopname, username, total_convert - project_amount, _source_program,
Capital::Memo::get_convert_segment_to_wallet_memo(convert_hash));
// Выполняем операции с балансами
if (wallet_amount.amount > 0) {
// Конвертация в кошелек
Wallet::sub_blocked_funds(_capital, coopname, username, wallet_amount, _source_program,
Capital::Memo::get_convert_segment_to_wallet_memo(convert_hash));
Wallet::add_available_funds(_capital, coopname, username, wallet_amount, _wallet_program,
Capital::Memo::get_convert_segment_to_wallet_memo(convert_hash));
}
if (capital_amount.amount > 0) {
// Конвертация в капитал
Wallet::sub_blocked_funds(_capital, coopname, username, capital_amount, _source_program,
Capital::Memo::get_convert_segment_to_capital_memo(convert_hash));
Wallet::add_blocked_funds(_capital, coopname, username, capital_amount, _capital_program,
Capital::Memo::get_convert_segment_to_capital_memo(convert_hash));
}
@@ -130,10 +127,6 @@ void capital::convertsegm(eosio::name coopname, eosio::name username,
eosio::check(target_project.can_convert_to_project,
"Конвертация в кошелек проекта запрещена для данного проекта");
// Конвертация в кошелек проекта - создаем или обновляем кошелек проекта
Wallet::sub_blocked_funds(_capital, coopname, username, project_amount, _source_program,
Capital::Memo::get_convert_segment_to_project_wallet_memo(convert_hash));
// Создаем или обновляем кошелек целевого проекта с долями участника
Capital::upsert_project_wallet(coopname, target_project_hash, username, project_amount);
@@ -90,6 +90,12 @@
Требует разрешения проекта на конвертацию.
При наличии родительского проекта конвертация будет происходить в его кошелёк.
## Эффекты процесса
@include{doc} convertsegm-effect.dox
## Документы процесса
@include{doc} conversion-process-docs.dox
## Ограничения конвертации
- <b>В главный кошелёкёк:</b> только себестоимость создателей, авторов и координаторов минус погашенный долг, не больше обеспеченной суммы
@@ -0,0 +1,7 @@
- 📄 Заявление на внесение паевого взноса с опциональным погашением ссуды (если брал)
- 📄 Заявление на взнос доли в результате интеллектуальной деятельности
- 📄 Визирующая подпись председателя на заявл. на паевой взнос результатом
- 📄 Решение совета о приёме паевого взноса результатом
- 📄 Подписаный акт приёма-передачи от вкладчика
- 📄 Подписаный акт приёма-передачи от председателя
@note здесь при взносе результата собственники имущества должны одновременно внести своё имущество
@@ -176,4 +176,11 @@
* 2. Погашена ссуда вкладчика
* 3. Сегмент готов к конвертации в различные кошельки кооператива
*
## Эффекты процесса
@include{doc} signact2-effect.dox
## Документы процесса
@include{doc} result-submission-docs.dox
*/
@@ -0,0 +1,4 @@
➕🏛️ Ledger::add на счёт Ledger::accounts::SHARE_FUND на сумму паевого взноса за вычетом ссуды\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _source_program на сумму паевого взноса за вычетом ссуды\n
➖🏛️ Ledger::sub со счёта Ledger::accounts::LONG_TERM_LOANS на сумму погашаемой ссуды\n
🫳 Loan::settle_debt на сумму погашаемой ссуды
@@ -33,10 +33,20 @@ void capital::signact2(eosio::name coopname, eosio::name username, checksum256 r
// Проверяем документ
verify_document_or_fail(act, { exist_result->username, username });
// Устанавливаем второй акт
Capital::Results::set_result_act2(coopname, result_hash, act);
// Начисляем заблокированные средства в кошелек программы генерации
Wallet::add_blocked_funds(_capital, coopname, result.username, result.total_amount - result.debt_amount, _source_program, memo);
// Увеличиваем паевой фонд за вычетом ссуммы долга
Ledger::add(_capital, coopname, Ledger::accounts::SHARE_FUND, result.total_amount - result.debt_amount, memo);
// Уменьшаем сумму выданных ссуд кооператива
if (result.debt_amount.amount > 0){
Ledger::sub(_capital, coopname, Ledger::accounts::LONG_TERM_LOANS, result.debt_amount, memo);
}
//TODO: линковать документ акта
// Обновляем статус сегмента
@@ -50,6 +50,7 @@
* - **Главный Кошелёк** - персональный счёт для паевых взносов, доступных к возврату или конвертациям в любой другой кошелёк.
* - **Кошелёк Программы** - персональный счёт для хранения паевого взноса, которое допускает участие в программе "Капитализация";
* - **Кошелёк Проекта** - персональный счёт для хранения паевого взноса, которое допускает возврат паевого взноса из числа членских взносов по проекту;
* - **Кошелёк Договора** - персональный счёт для хранения суммы паевых взносов по всем проектам;
* - **Коммит** - фиксация трудозатрат создателя в проекте, формирующая себестоимость
* и премии вкладчиков.
* - **Голосование по методу Водянова** - Демократический процесс распределения части премий
@@ -77,39 +78,17 @@
* - **Голосующая сумма** - сумма, которую участник голосования распределяет между другими участниками по методу Водянова
*
* ## Язык иконок для обозначений
* | Символ | Значение |
* |:------:|:--------------------------|
* | `📄` | **Документ** |
* | `💰` | **Кошелек** |
* | `🏛️` | **Фонд** |
* | `` | **Добавление** средств |
* | `` | **Списание** средств |
* | `` | Статус: **Доступные** |
* | `🔒` | Статус: **Заблокировано** |
* | `🔓` | **Разблокирование** |
* | `👤` | **Членский взнос** |
* | `🤝` | **Взаимозачет** |
* | `❌` | **Окончательное списание**|
* | `🔀` | **Перевод** между счетами |
*
* ### Графический язык проводок по Кошельку (Wallet)
*
* | Метод | Иконки | Описание |
* |:-----------------------|:---------------|:--------------------------------------|
* | add_available_funds | `💰➕✅` | Добавление доступных средств |
* | sub_available_funds | `💰➖✅` | Уменьшение доступных средств |
* | add_blocked_funds | `💰➕🔒` | Добавление заблокированных средств |
* | sub_blocked_funds | `💰➖🔒` | Уменьшение заблокированных средств |
*
* ### Графический язык проводок по фондам (Ledger)
*
* | Метод | Иконки | Описание |
* |:-----------------------|:---------------|:--------------------------------------|
* | add | `🏛️➕✅` | Добавление средств в фонд |
* | sub | `🏛️➖✅` | Уменьшение средств из фонде |
* | block | `🏛️🔒` | Блокировка средств в фонде |
* | unblock | `🏛️🔓` | Разблокирование средств в фонде |
*/
* | Символ | Значение |
* |:------:|:--------------------------|
* | `📄` | **Документ** |
* | `🏛️` | **Счёт кооператива** |
* | `` | **Добавление** |
* | `` | **Уменьшение** |
* | `🔒` | **Заблокировано** |
* | `🔓` | **Доступно** |
* | `🫴` | **Взять ссуду** |
* | `🫳` | **Погасить ссуду** |
* |
*
* ## Обоснование
*
@@ -0,0 +1,41 @@
/**
* @defgroup docs_overview Документы по процессам
* @ingroup public_capital
@ref public_capital_registration_process
@include{doc} registration-docs.dox
@ref public_capital_project_creation_process
@include{doc} project-creation-docs.dox
@ref public_capital_joining_process
@include{doc} joining-process-docs.dox
@ref public_capital_project_investment_process
@include{doc} project-investment-docs.dox
@ref public_capital_program_investment_process
@include{doc} program-investment-docs.dox
@ref public_capital_program_property_process
@include{doc} program-property-docs.dox
@ref public_capital_unused_return_process
@include{doc} unused-return-docs.dox
@ref public_capital_result_process
@include{doc} result-submission-docs.dox
@ref public_capital_conversion_process
@include{doc} conversion-process-docs.dox
@ref public_capital_project_property_process
@include{doc} project-property-docs.dox
@ref public_capital_debt_process
@include{doc} debt-process-docs.dox
@ref public_capital_create_expense_process
@include{doc} create-expense-docs.dox
*/
@@ -0,0 +1,84 @@
/**
* @defgroup deltas_overview Эффекты по процессам
* @ingroup public_capital
@ref public_capital_result_process
➕🏛️ Ledger::add на счёт Ledger::accounts::SHARE_FUND на сумму паевого взноса за вычетом ссуды\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _source_program на сумму паевого взноса за вычетом ссуды\n
➖🏛️ Ledger::sub со счёта Ledger::accounts::LONG_TERM_LOANS на сумму погашаемой ссуды\n
🫳 Loan::settle_debt на сумму погашаемой ссуды
<hr>
@ref public_capital_debt_process
➕🏛️ Ledger::add на счёт Ledger::accounts::LONG_TERM_LOANS на сумму выданной ссуды\n
🫴 Loan::create_debt на сумму выданной ссуды
<hr>
@ref public_capital_create_expense_process
➕🏛️ Ledger::add на счёт Ledger::accounts::ECONOMIC_ACTIVITY_FUND на сумму расхода\n
<hr>
@ref public_capital_program_property_process
➕🏛️ Ledger::add на счёт Ledger::accounts::SHARE_FUND на сумму паевого взноса\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _capital_program на сумму паевого взноса\n
<hr>
@ref public_capital_conversion_process
➖🔒 Wallet::sub_blocked_funds на кошельке @ref _source_program на сумму паевого взноса за вычетом суммы конвертации в кошелёк проекта\n
➕🔓 Wallet::add_available_funds на кошельке @ref _wallet_program на сумму конвертации в главный кошелёк\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _source_program на сумму конвертации в кошелёк программы\n
<hr>
@ref public_capital_project_investment_process
🔒 Wallet::block_funds на кошельке @ref _wallet_program на сумму инвестиций\n
➖🔒 Wallet::sub_blocked_funds на кошельке @ref _wallet_program на сумму инвестиций\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _source_program на сумму инвестиций\n
<hr>
@ref public_capital_program_investment_process
🔒 Wallet::block_funds на кошельке @ref _wallet_program на сумму инвестиций\n
➖🔒 Wallet::sub_blocked_funds на кошельке @ref _capital_program на сумму инвестиций\n
➕🔒 Wallet::add_blocked_funds на кошельке @ref _capital_program на сумму инвестиций\n
<hr>
@ref public_capital_fundprog_process
➖🏛️ Ledger::sub со счёта Ledger::accounts::TARGET_RECEIPTS на сумму фондирования
<hr>
@ref public_capital_fundproj_process
➖🏛️ Ledger::sub со счёта Ledger::accounts::TARGET_RECEIPTS на сумму фондирования
<hr>
@ref public_capital_withdraw_from_project_process
➖🔒 Wallet::sub_blocked_funds на кошельке @ref _capital_program на сумму возврата\n
➕🔓 Wallet::add_available_funds на кошельке @ref _wallet_program на сумму возврата
<hr>
@ref public_capital_withdraw_from_program_process
➖🔒 Wallet::sub_blocked_funds на кошельке @ref _capital_program на сумму возврата\n
➕🔓 Wallet::add_available_funds на кошельке @ref _wallet_program на сумму возврата
<hr>
*/
@@ -0,0 +1,56 @@
/**
* @defgroup entries_overview Проводки по процессам
* @ingroup public_capital
@ref public_capital_result_process
<b>Закрывающее действие</b>: @ref capital::signact2 "подпись председателем акта приёма-передачи результата в кооператив"
Без погашения ссуды:
- ⬇️ дебет ?
- ⬆️ кредит ?
- ⬇️ дебет ?
- ⬆️ кредит ?
При погашении ссуды:
- ⬇️ дебет ?
- ⬆️ кредит ?
- ⬇️ дебет ?
- ⬆️ кредит ?
<hr>
@ref public_capital_create_expense_process
<b>Закрывающее действие</b>: @ref capital::exppaycnfrm "подтверждение оплаты расхода"
- ⬇️ дебет ?
- ⬆️ кредит ?
- ⬇️ дебет ?
- ⬆️ кредит ?
<hr>
@ref public_capital_debt_process
<b>Закрывающее действие</b>: @ref capital::debtpaycnfrm "подтверждение оплаты выданной ссуды"
- ⬇️ дебет ?
- ⬆️ кредит ?
- ⬇️ дебет ?
- ⬆️ кредит ?
<hr>
@ref public_capital_program_property_process
<b>Закрывающее действие</b>: @ref capital::act2pgprp "подпись председателем акта приёма-передачи имущества в кооператив"
- ⬇️ дебет ?
- ⬆️ кредит ?
- ⬇️ дебет ?
- ⬆️ кредит ?
*/
+5 -4
View File
@@ -76,10 +76,11 @@ static constexpr eosio::name _product_return_action = "productrtrn"_n;
static constexpr eosio::name _result_action = "result"_n;
//program_types
static constexpr eosio::name _wallet_program = "wallet"_n;
static constexpr eosio::name _marketplace_program = "marketplace"_n;
static constexpr eosio::name _source_program = "source"_n;
static constexpr eosio::name _capital_program = "capital"_n;
static constexpr eosio::name _wallet_program = "wallet"_n; ///< Главный Кошелёк
static constexpr eosio::name _marketplace_program = "marketplace"_n; ///< Кошелёк программы "Маркетплейс"
static constexpr eosio::name _source_program = "source"_n; ///< Кошелёк для генерации по договору УХД
static constexpr eosio::name _capital_program = "capital"_n; ///< Кошелёк программы "Капитализация"
static const std::set<eosio::name> soviet_actions = {
@@ -296,6 +296,14 @@ inline std::string Ledger::get_account_name_by_id(uint64_t account_id) {
return "Неизвестный счет";
}
/**
* @brief Добавить средства на счёт кооператива
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param account_id Идентификатор счёта
* @param quantity Сумма для добавления
* @param comment Комментарий к операции
*/
inline void Ledger::add(eosio::name actor, eosio::name coopname, uint64_t account_id, eosio::asset quantity, std::string comment) {
eosio::action(
eosio::permission_level{actor, "active"_n},
@@ -305,6 +313,14 @@ inline void Ledger::add(eosio::name actor, eosio::name coopname, uint64_t accoun
).send();
}
/**
* @brief Уменьшить средства на счёте кооператива
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param account_id Идентификатор счёта
* @param quantity Сумма для вычитания
* @param comment Комментарий к операции
*/
inline void Ledger::sub(eosio::name actor, eosio::name coopname, uint64_t account_id, eosio::asset quantity, std::string comment) {
eosio::action(
eosio::permission_level{actor, "active"_n},
@@ -314,11 +330,28 @@ inline void Ledger::sub(eosio::name actor, eosio::name coopname, uint64_t accoun
).send();
}
/**
* @brief Перевести средства между счетами кооператива
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param from_account_id Идентификатор счёта отправителя
* @param to_account_id Идентификатор счёта получателя
* @param quantity Сумма перевода
* @param comment Комментарий к операции
*/
inline void Ledger::transfer(eosio::name actor, eosio::name coopname, uint64_t from_account_id, uint64_t to_account_id, eosio::asset quantity, std::string comment) {
add(actor, coopname, from_account_id, quantity, comment);
sub(actor, coopname, to_account_id, quantity, comment);
}
/**
* @brief Заблокировать средства на счёте кооператива
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param account_id Идентификатор счёта
* @param quantity Сумма для блокировки
* @param comment Комментарий к операции
*/
inline void Ledger::block(eosio::name actor, eosio::name coopname, uint64_t account_id, eosio::asset quantity, std::string comment) {
eosio::action(
eosio::permission_level{actor, "active"_n},
@@ -328,6 +361,14 @@ inline void Ledger::block(eosio::name actor, eosio::name coopname, uint64_t acco
).send();
}
/**
* @brief Разблокировать средства на счёте кооператива
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param account_id Идентификатор счёта
* @param quantity Сумма для разблокировки
* @param comment Комментарий к операции
*/
inline void Ledger::unblock(eosio::name actor, eosio::name coopname, uint64_t account_id, eosio::asset quantity, std::string comment) {
eosio::action(
eosio::permission_level{actor, "active"_n},
@@ -337,6 +378,14 @@ inline void Ledger::unblock(eosio::name actor, eosio::name coopname, uint64_t ac
).send();
}
/**
* @brief Списать средства со счёта кооператива
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param account_id Идентификатор счёта
* @param quantity Сумма для списания
* @param comment Комментарий к операции
*/
inline void Ledger::writeoff(eosio::name actor, eosio::name coopname, uint64_t account_id, eosio::asset quantity, std::string comment) {
eosio::action(
eosio::permission_level{actor, "active"_n},
@@ -346,6 +395,14 @@ inline void Ledger::writeoff(eosio::name actor, eosio::name coopname, uint64_t a
).send();
}
/**
* @brief Списать средства со счёта кооператива
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param account_id Идентификатор счёта
* @param quantity Сумма для списания
* @param comment Комментарий к операции
*/
inline void Ledger::writeoffcnsl(eosio::name actor, eosio::name coopname, uint64_t account_id, eosio::asset quantity, std::string comment) {
eosio::action(
eosio::permission_level{actor, "active"_n},
@@ -355,18 +412,46 @@ inline void Ledger::writeoffcnsl(eosio::name actor, eosio::name coopname, uint64
).send();
}
/**
* @brief Добавить членский взнос на счёт поступлений
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param quantity Сумма для добавления
* @param comment Комментарий к операции
*/
inline void Ledger::add_membership_fee(eosio::name actor, eosio::name coopname, eosio::asset quantity, std::string comment) {
add(actor, coopname, accounts::TARGET_RECEIPTS, quantity, comment);
}
/**
* @brief Вычесть членский взнос со счёта поступлений
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param quantity Сумма для вычитания
* @param comment Комментарий к операции
*/
inline void Ledger::sub_membership_fee(eosio::name actor, eosio::name coopname, eosio::asset quantity, std::string comment) {
sub(actor, coopname, accounts::TARGET_RECEIPTS, quantity, comment);
}
/**
* @brief Заблокировать членский взнос на счёте поступлений
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param quantity Сумма для блокировки
* @param comment Комментарий к операции
*/
inline void Ledger::block_membership_fee(eosio::name actor, eosio::name coopname, eosio::asset quantity, std::string comment) {
block(actor, coopname, accounts::TARGET_RECEIPTS, quantity, comment);
}
/**
* @brief Разблокировать членский взнос на счёте поступлений
* @param actor Аккаунт, выполняющий действие
* @param coopname Название кооператива
* @param quantity Сумма для разблокировки
* @param comment Комментарий к операции
*/
inline void Ledger::unblock_membership_fee(eosio::name actor, eosio::name coopname, eosio::asset quantity, std::string comment) {
unblock(actor, coopname, accounts::TARGET_RECEIPTS, quantity, comment);
}
+4 -4
View File
@@ -122,10 +122,10 @@ namespace Loan {
}
/**
* @brief Создает долговое обязательство через интерфейс.
* @brief Создает долговое обязательство пайщика.
* @param calling_contract Контракт, вызывающий создание долга
* @param coopname Имя кооператива
* @param username Имя пользователя-должника
* @param username Имя пользователя
* @param debt_hash Хэш долгового обязательства
* @param repaid_at Срок погашения долга
* @param quantity Сумма долга
@@ -148,10 +148,10 @@ namespace Loan {
}
/**
* @brief Погашает долговое обязательство через интерфейс.
* @brief Погашает долговое обязательство пайщика.
* @param calling_contract Контракт, вызывающий погашение долга
* @param coopname Имя кооператива
* @param username Имя пользователя-должника
* @param username Имя пользователя
* @param debt_hash Хэш долгового обязательства
* @param quantity Сумма погашения
*/
+26 -2
View File
@@ -91,6 +91,9 @@ public:
check(amount.amount > 0, "Amount must be positive");
}
/**
* @brief Добавляет доступные средства на кошелёк пользователя
*/
static void add_available_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo) {
auto program = get_program_or_fail(coopname, get_program_id(program_type));
@@ -103,6 +106,9 @@ public:
}
/**
* @brief Уменьшает доступные средства на кошельке пользователя
*/
static void sub_available_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo) {
auto program = get_program_or_fail(coopname, get_program_id(program_type));
@@ -114,6 +120,9 @@ public:
).send();
}
/**
* @brief Добавляет заблокированные средства в баланс кошелька пользователя
*/
static void add_blocked_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo) {
auto program = get_program_or_fail(coopname, get_program_id(program_type));
@@ -132,6 +141,9 @@ public:
).send();
}
/**
* @brief Уменьшает заблокированные средства кошелька пользователя
*/
static void sub_blocked_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo) {
auto program = get_program_or_fail(coopname, get_program_id(program_type));
@@ -149,7 +161,10 @@ public:
std::make_tuple(coopname, username, program.id, amount, false, memo)
).send();
}
/**
* @brief Блокирует средства на кошельке пользователя
*/
static void block_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo){
auto program = get_program_or_fail(coopname, get_program_id(program_type));
@@ -160,7 +175,10 @@ public:
std::make_tuple(coopname, username, program.id, amount, memo)
).send();
}
/**
* @brief Разблокирует средства на кошельке пользователя
*/
static void unblock_funds(eosio::name contract, eosio::name coopname, eosio::name username, eosio::asset amount, eosio::name program_type, std::string memo){
auto program = get_program_or_fail(coopname, get_program_id(program_type));
@@ -172,6 +190,9 @@ public:
).send();
}
/**
* @brief Оплачивает членский взнос с кошелька пользователя
*/
static void pay_membership_fee(name contract, name coopname, name username, eosio::asset amount, uint64_t program_id, std::string memo) {
auto program = get_program_or_fail(coopname, program_id);
@@ -184,6 +205,9 @@ public:
}
/**
* @brief Отменяет оплату членского взноса с кошелька пользователя
*/
static void unpay_membership_fee(name contract, name coopname, name username, eosio::asset amount, uint64_t program_id, std::string memo) {
auto program = get_program_or_fail(coopname, program_id);