|
COOPENOMICS
v1
Кооперативная Экономика
|
Функции | |
| void | branch::setweight (eosio::name coopname, eosio::name braname, eosio::name contract, eosio::name username, uint64_t weight) |
| Председатель КУ задаёт/меняет вес участника в распределении членских взносов от контракта-источника. Доля = вес / Σ весов. Подробнее... | |
| void | branch::delweight (eosio::name coopname, eosio::name braname, eosio::name contract, eosio::name username) |
| Исключение участника из распределения (вес удаляется, доли остальных перебалансируются автоматически). Подробнее... | |
| void | branch::accrue (eosio::name coopname, eosio::name braname, eosio::name source_contract, eosio::asset amount, eosio::name process_type, eosio::checksum256 process_hash, std::string memo) |
| Зачисление поступивших членских взносов КУ в общий кошелёк участка (o.brn.common, 100% суммы). Вызывается inline контрактом-источником (marketplace) при финализации заказа. Подробнее... | |
| void | branch::retfee (eosio::name coopname, eosio::name braname, eosio::name source_contract, eosio::asset amount, eosio::name process_type, eosio::checksum256 process_hash, std::string memo) |
| Возврат членских взносов КУ из общего кошелька участка обратно в пул взносов программы-источника (o.brn.retfee) — инверсия accrue. Вызывается inline контрактом-источником (marketplace) при гарантийном возврате имущества, чтобы пайщику вернулась полная уплаченная сумма. Подробнее... | |
| void | branch::distribute (eosio::name coopname, eosio::name braname, eosio::name source_contract, eosio::checksum256 round_hash, eosio::asset amount, std::string memo) |
| Ручное распределение средств общего кошелька КУ между председателем и доверенными по весам реестра: команда председателя, сумма раскладывается по весам (o.brn.release + o.brn.person), остаток округления остаётся в общем кошельке. Можно частично и многократно. Плановый резерв расходов (30 дней) контролирует бэкенд до вызова. Подробнее... | |
| void | branch::convert (eosio::name coopname, eosio::name username, eosio::checksum256 convert_hash, eosio::asset amount) |
| Перевод персональных средств доверенного в членский кошелёк «Стола заказов» (o.brn.conv) — для заказов как обычный пайщик. Подробнее... | |
| void | branch::createaid (eosio::name coopname, eosio::name username, eosio::name braname, eosio::checksum256 aid_hash, eosio::asset amount, document2 statement, std::string meta) |
| Заявление на материальную помощь доверенного из его персонального кошелька: подписанное заявление вносится на повестку совета (type=brnaid). Исходящий платёж кассиру создаётся только после решения совета — в callback'е onaidauth. Подробнее... | |
| void | branch::onaidauth (eosio::name coopname, eosio::checksum256 hash, document2 authorization) |
| Callback от soviet — совет одобрил выплату материальной помощи. Заявление переходит в authorized, протокол сохраняется, и регистрируется исходящий платёж в gateway — заявка попадает к кассиру. Подробнее... | |
| void | branch::onaiddecl (eosio::name coopname, eosio::checksum256 hash, std::string reason) |
| Callback от soviet — совет отказал в выплате либо срок рассмотрения истёк. Заявление закрывается, не доходя до кассира; средства остаются на персональном кошельке. Подробнее... | |
| void | branch::aidconfirm (eosio::name coopname, eosio::checksum256 outcome_hash) |
| Callback от gateway::outcomplete — кассир подтвердил банковский перевод материальной помощи. Здесь применяются o.brn.aidtax (удержание налога, Дт 86 / Кт 68) и o.brn.aid (выплата, Дт 86 / Кт 51). Подробнее... | |
| void | branch::aiddecline (eosio::name coopname, eosio::checksum256 outcome_hash, std::string reason) |
| Callback от gateway::outdecline — перевод не состоялся; средства остаются на персональном кошельке, заявление закрывается. Подробнее... | |
| void | branch::createexp (eosio::name coopname, eosio::name braname, eosio::name creator, eosio::checksum256 expense_hash, std::vector< ExpenseDomain::item > items, document2 statement) |
| Подать расход участка в шасси расходов: средства уходят из общего кошелька КУ в пул расходов (o.brn.expfnd), записка передаётся шасси — решение совета, оплата по реквизитам либо аванс под отчёт, отчёт, закрытие. Подробнее... | |
| void | branch::onexpdone (eosio::name coopname, eosio::checksum256 expense_hash, uint8_t status, eosio::asset total_actual, std::vector< char > data) |
| Callback шасси расходов — расход завершён (отклонён советом либо закрыт). Неизрасходованный остаток возвращается в общий кошелёк участка (o.brn.expunf), запись расхода стирается. Подробнее... | |
| void | branch::migrate () |
| Инициализация контракта кооперативных участков. Выполняет начальную настройку контракта. Подробнее... | |
| void | branch::init () |
| Инициализация контракта кооперативных участков. Выполняет начальную настройку контракта. Подробнее... | |
| void | branch::addtrusted (eosio::name coopname, eosio::name braname, eosio::name trusted) |
| Добавление доверенного лица в кооперативный участок. Добавляет нового доверенного лица в существующий кооперативный участок. Максимальное количество доверенных лиц на один участок - 3. Подробнее... | |
| void | branch::addwhite (eosio::name coopname, eosio::name braname, eosio::name account) |
| Добавление пайщика в белый список кооперативного участка. Пайщики из белого списка могут выбрать приватный кооперативный участок при вступлении или смене участка. В белый список можно добавить любого пайщика кооператива. Подробнее... | |
| void | branch::apprauth (eosio::name coopname, eosio::name username, eosio::checksum256 approval_hash, document2 approved_document) |
| Встречная подпись председателя совета на доверенности председателя кооперативного участка. Callback одобрения совета: председатель совета подписал доверенность второй подписью (механизм soviet::confirmapprv проверил его подпись). Фиксируем полностью подписанную доверенность в реестре документов по якорю одобрения. Подробнее... | |
| void | branch::apprliab (eosio::name coopname, eosio::name username, eosio::checksum256 approval_hash, document2 approved_document) |
| Встречная подпись председателя совета на договоре о полной материальной ответственности председателя кооперативного участка. Callback одобрения совета: председатель совета подписал договор второй подписью (механизм soviet::confirmapprv проверил его подпись). Фиксируем полностью подписанный договор в реестре документов по якорю процесса. Подробнее... | |
| void | branch::apprtrusted (eosio::name coopname, eosio::checksum256 hash, document2 countersigned, document2 countersigned_authority) |
| Одобрение заявки доверенного лица председателем участка. Председатель кооперативного участка накладывает встречную подпись на договор материальной ответственности и доверенность заявителя; оба полностью подписанных документа фиксируются в реестре документов, пайщик добавляется в список доверенных лиц участка, заявка стирается. Подробнее... | |
| void | branch::canceldec (eosio::name coopname, eosio::checksum256 hash, std::string reason) |
| Отмена собрания инициатором до вывода на совет. Инициатор сворачивает собрание, пока решение не ушло в совет; запись и вопросы повестки стираются, причина передаётся аргументом (история — в журнале действий). Подробнее... | |
| void | branch::closedec (eosio::name coopname, eosio::checksum256 hash, document2 protocol) |
| Закрытие собрания и утверждение протокола председателем. Председатель закрывает голосование и утверждает протокол одной своей подписью (секретарь не нужен — подсчёт ведёт контракт). Проверяется кворум и итог голосования. Для типа "free" — терминал: запись стирается (история — в журнале). Для "createbranch" — решение переходит в статус "approved" в ожидании исполнения действием exec (вывод вопроса на совет). Подробнее... | |
| void | branch::confirmdec (eosio::name coopname, eosio::checksum256 hash, document2 authorization) |
| Подтверждение решения советом — создание кооперативного участка. Callback совета: по утверждению учреждается кооперативный участок с реквизитами из решения (аккаунт участка, избранный председатель), после чего запись решения стирается (история — в журнале действий). Подробнее... | |
| void | branch::createbranch (eosio::name coopname, eosio::name braname, eosio::name trustee) |
| Создание нового кооперативного участка. Создает новый кооперативный участок с указанным председателем. При создании третьего участка автоматически активирует систему кооперативных участков. Подробнее... | |
| void | branch::createdec (eosio::name coopname, eosio::checksum256 hash, eosio::name type, eosio::name initiator, document2 proposal, eosio::name braname, std::vector< decision_point > agenda) |
| Объявление собрания пайщиков с повесткой (создание решения). Универсальный механизм: тип "free" — свободное решение (фиксируется протоколом), тип "createbranch" — автоматизируемое (после утверждения уходит в совет и создаёт КУ). Подробнее... | |
| void | branch::declauth (eosio::name coopname, eosio::name username, eosio::checksum256 approval_hash, std::string reason) |
| Запрет отклонения доверенности председателя кооперативного участка. Callback отклонения совета: к этому моменту решение об учреждении кооперативного участка уже принято советом и участок создан, поэтому доверенность председателю участка отклонить нельзя — председателю совета остаётся только подписать её встречной подписью (см. branch::apprauth). Действие всегда завершается ошибкой. Подробнее... | |
| void | branch::declinedec (eosio::name coopname, eosio::checksum256 hash, std::string reason) |
| Отклонение решения советом. Callback совета: при отказе совета запись решения и вопросы повестки стираются, причина передаётся аргументом (история — в журнале действий). Подробнее... | |
| void | branch::declliab (eosio::name coopname, eosio::name username, eosio::checksum256 approval_hash, std::string reason) |
| Запрет отклонения договора о материальной ответственности председателя участка. Callback отклонения совета: к этому моменту решение об учреждении кооперативного участка уже принято советом и участок создан, поэтому договор о материальной ответственности отклонить нельзя — председателю совета остаётся только подписать его встречной подписью (см. branch::apprliab). Действие всегда завершается ошибкой, тем самым гарантируя, что процесс не уйдёт в неопределённое состояние. Подробнее... | |
| void | branch::decltrusted (eosio::name coopname, eosio::checksum256 hash, std::string reason) |
| Отклонение заявки доверенного лица председателем участка. Заявка стирается, причина передаётся аргументом (история — в журнале действий). Подробнее... | |
| void | branch::deletebranch (eosio::name coopname, eosio::name braname) |
| Удаление кооперативного участка. Удаляет существующий кооперативный участок и отключает его участников. При удалении участка, когда остается менее 3 участков, автоматически отключает систему кооперативных участков. Подробнее... | |
| void | branch::deltrusted (eosio::name coopname, eosio::name braname, eosio::name trusted) |
| Удаление доверенного лица из кооперативного участка. Удаляет доверенное лицо из существующего кооперативного участка. Подробнее... | |
| void | branch::delwhite (eosio::name coopname, eosio::name braname, eosio::name account) |
| Удаление аккаунта из белого списка кооперативного участка. Удаляет аккаунт пайщика из белого списка приватного кооперативного участка. Подробнее... | |
| void | branch::editbranch (eosio::name coopname, eosio::name braname, eosio::name trustee) |
| Редактирование кооперативного участка. Изменяет председателя существующего кооперативного участка. Подробнее... | |
| void | branch::exec (eosio::name coopname, eosio::checksum256 hash, document2 petition, document2 liability, document2 authority) |
| Исполнение утверждённого решения о создании кооперативного участка. Председатель собрания формирует заявление в совет и выводит вопрос об учреждении кооперативного участка на рассмотрение совета. К повестке совета прилагаются протокол собрания и бюллетени (по тому же якорю процесса). Подробнее... | |
| void | branch::joindec (eosio::name coopname, eosio::checksum256 hash, eosio::name username) |
| Присоединение пайщика к собранию. Пайщик фиксируется в списке участников собрания. Подробнее... | |
| void | branch::reqtrusted (eosio::name coopname, eosio::name braname, eosio::name username, eosio::checksum256 hash, document2 application, document2 authority) |
| Подача заявки на приём доверенным лицом кооперативного участка. Пайщик прикладывает подписанные заявление и договор о полной материальной ответственности. Заявка ожидает одобрения председателя участка. Подробнее... | |
| void | branch::setprivate (eosio::name coopname, eosio::name braname, bool is_private) |
| Установка признака приватности кооперативного участка. Приватный кооперативный участок нельзя выбрать при вступлении или смене участка, если аккаунт пайщика не добавлен в белый список этого участка. Подробнее... | |
| void | branch::startdec (eosio::name coopname, eosio::checksum256 hash, eosio::name chairman, std::string address, std::vector< decision_point > agenda) |
| Открытие голосования по решению. Организатор собрания (он же председатель собрания) открывает голосование, указывая избираемого председателя кооперативного участка (из числа присоединившихся участников) и — для решения "createbranch" — адрес привязки кооперативного участка, определённый собранием. Окно голосования отмеряется автоматически (DECISION_VOTING_WINDOW_SECONDS). Подробнее... | |
| void | branch::votedec (eosio::name coopname, eosio::checksum256 hash, eosio::name username, document2 ballot, std::vector< decision_vote_point > votes) |
| Голосование по вопросам повестки бюллетенем. Участник подаёт бюллетень-заявление с волеизъявлением (за/против/воздержался) по каждому вопросу повестки. Подсчёт ведёт контракт. Адаптация meet::vote. Подробнее... | |
| void branch::accrue | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | source_contract, | ||
| eosio::asset | amount, | ||
| eosio::name | process_type, | ||
| eosio::checksum256 | process_hash, | ||
| std::string | memo | ||
| ) |
Зачисление поступивших членских взносов КУ в общий кошелёк участка (o.brn.common, 100% суммы). Вызывается inline контрактом-источником (marketplace) при финализации заказа.
Зачисление поступивших членских взносов в общий кошелёк кооперативного участка (requirement b6 «Экономика КУ», раунд 5; процесс p.brn.fees).
Вызывается inline контрактом-источником (сегодня — marketplace при финализации заказа, signiss2): 100% фактического членского взноса уходит в общий кошелёк КУ (o.brn.common, username = braname) — приоритет общего кошелька (решение владельца 2026-06-10). Немедленного персонального распределения нет: дальнейшее использование — отдельные команды председателя (distribute / createexp) после контроля планового резерва расходов бэкендом.
Средства физически уходят с пула w.mkt.fee — он пополнен операцией o.mkt.fee при создании заказа, неиспользованная часть уже возвращена источником через o.mkt.refund.
Имя нитки процесса (process_type) передаёт контракт-источник: зачисление идёт внутри его нитки (у marketplace — поставка по хэшу заказа), поэтому сама операция не может называть процесс. Пока имя выводилось из кода операции, поставка подписывалась «Членские взносы кооперативного участка».
Guards:
| void branch::addtrusted | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | trusted | ||
| ) |
Добавление доверенного лица в кооперативный участок. Добавляет нового доверенного лица в существующий кооперативный участок. Максимальное количество доверенных лиц на один участок - 3.
| coopname | Наименование кооператива |
| braname | Наименование кооперативного участка |
| trusted | Доверенное лицо для добавления (должно быть физическим лицом) |
coopname | void branch::addwhite | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | account | ||
| ) |
Добавление пайщика в белый список кооперативного участка. Пайщики из белого списка могут выбрать приватный кооперативный участок при вступлении или смене участка. В белый список можно добавить любого пайщика кооператива.
| coopname | Наименование кооператива |
| braname | Наименование кооперативного участка |
| account | Аккаунт пайщика для добавления |
coopname | void branch::aidconfirm | ( | eosio::name | coopname, |
| eosio::checksum256 | outcome_hash | ||
| ) |
Callback от gateway::outcomplete — кассир подтвердил банковский перевод материальной помощи. Здесь применяются o.brn.aidtax (удержание налога, Дт 86 / Кт 68) и o.brn.aid (выплата, Дт 86 / Кт 51).
Callback от gateway о фактическом подтверждении выплаты материальной помощи (requirement b6 «Экономика КУ», процесс p.brn.aid).
Inline-action отправляется контрактом gateway из gateway::outcomplete после того, как кассир подтвердил реальный банковский перевод получателю. Здесь — единственное место, где применяется списание. С 2026-08-13 кооператив удерживает НДФЛ, поэтому сумма заявления расходится надвое:
Ровно ту же сумму net кассир увидел в исходящем платеже: она посчитана из aid.amount тем же BranchNdfl, поэтому расхождения между платёжкой и проводкой быть не может.
Выплата подтверждена — терминал жизненного цикла: запись заявления стирается из RAM, история — в журнале действий и в решении совета.
Guards:
onaidauth, поэтому иной статус означал бы выплату в обход решения совета. | void branch::aiddecline | ( | eosio::name | coopname, |
| eosio::checksum256 | outcome_hash, | ||
| std::string | reason | ||
| ) |
Callback от gateway::outdecline — перевод не состоялся; средства остаются на персональном кошельке, заявление закрывается.
Callback от gateway — попытка отменить выплату материальной помощи (requirement b6 «Экономика КУ», процесс p.brn.aid).
Действие обязано существовать: Gateway::create_outcome требует имя decline-callback'а в сигнатуре, иначе исходящий платёж не зарегистрировать. Но отмены в этом процессе нет — действие всегда падает.
Почему. Выплату материальной помощи разрешает совет (onaidauth), и кассир это решение не пересматривает: принятое решение исполняется. Единственная реальная причина «не смог заплатить» — неверные реквизиты получателя; она решается уточнением реквизитов у получателя, а не отменой решения совета. Отказ до выплаты возможен только на стороне совета — через onaiddecl, пока заявление в статусе proposed.
| void branch::apprauth | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| eosio::checksum256 | approval_hash, | ||
| document2 | approved_document | ||
| ) |
Встречная подпись председателя совета на доверенности председателя кооперативного участка. Callback одобрения совета: председатель совета подписал доверенность второй подписью (механизм soviet::confirmapprv проверил его подпись). Фиксируем полностью подписанную доверенность в реестре документов по якорю одобрения.
| coopname | Наименование кооператива |
| username | Председатель кооперативного участка — уполномоченный по доверенности |
| approval_hash | Якорь одобрения (хэш документа доверенности) |
| approved_document | Доверенность с встречной подписью председателя совета |
soviet | void branch::apprliab | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| eosio::checksum256 | approval_hash, | ||
| document2 | approved_document | ||
| ) |
Встречная подпись председателя совета на договоре о полной материальной ответственности председателя кооперативного участка. Callback одобрения совета: председатель совета подписал договор второй подписью (механизм soviet::confirmapprv проверил его подпись). Фиксируем полностью подписанный договор в реестре документов по якорю процесса.
| coopname | Наименование кооператива |
| username | Председатель кооперативного участка — сторона «Исполнитель» |
| approval_hash | Якорь процесса (хэш одобрения) |
| approved_document | Договор с встречной подписью председателя совета |
soviet | void branch::apprtrusted | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| document2 | countersigned, | ||
| document2 | countersigned_authority | ||
| ) |
Одобрение заявки доверенного лица председателем участка. Председатель кооперативного участка накладывает встречную подпись на договор материальной ответственности и доверенность заявителя; оба полностью подписанных документа фиксируются в реестре документов, пайщик добавляется в список доверенных лиц участка, заявка стирается.
| coopname | Наименование кооператива |
| hash | Внешний идентификатор заявки |
| countersigned | Договор материальной ответственности со встречной подписью председателя участка |
| countersigned_authority | Доверенность доверенному лицу со встречной подписью председателя участка |
coopname | void branch::canceldec | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| std::string | reason | ||
| ) |
Отмена собрания инициатором до вывода на совет. Инициатор сворачивает собрание, пока решение не ушло в совет; запись и вопросы повестки стираются, причина передаётся аргументом (история — в журнале действий).
| coopname | Наименование кооператива |
| hash | Якорь процесса |
| reason | Причина отмены |
coopname | void branch::closedec | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| document2 | protocol | ||
| ) |
Закрытие собрания и утверждение протокола председателем. Председатель закрывает голосование и утверждает протокол одной своей подписью (секретарь не нужен — подсчёт ведёт контракт). Проверяется кворум и итог голосования. Для типа "free" — терминал: запись стирается (история — в журнале). Для "createbranch" — решение переходит в статус "approved" в ожидании исполнения действием exec (вывод вопроса на совет).
| coopname | Наименование кооператива |
| hash | Якорь процесса |
| protocol | Подписанный председателем протокол решения |
coopname | void branch::confirmdec | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| document2 | authorization | ||
| ) |
Подтверждение решения советом — создание кооперативного участка. Callback совета: по утверждению учреждается кооперативный участок с реквизитами из решения (аккаунт участка, избранный председатель), после чего запись решения стирается (история — в журнале действий).
| coopname | Наименование кооператива |
| hash | Якорь процесса |
| authorization | Документ решения совета |
soviet | void branch::convert | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| eosio::checksum256 | convert_hash, | ||
| eosio::asset | amount | ||
| ) |
Перевод персональных средств доверенного в членский кошелёк «Стола заказов» (o.brn.conv) — для заказов как обычный пайщик.
Перевод персональных средств доверенного КУ в членский кошелёк «Стола заказов» (requirement b6 «Экономика КУ», процесс p.brn.fees).
Одна ledger2-операция:
Guards:
coopname (инициирует сам доверенный из ЛК стола ПВЗ, право проверяет бэкенд). | void branch::createaid | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| eosio::name | braname, | ||
| eosio::checksum256 | aid_hash, | ||
| eosio::asset | amount, | ||
| document2 | statement, | ||
| std::string | meta | ||
| ) |
Заявление на материальную помощь доверенного из его персонального кошелька: подписанное заявление вносится на повестку совета (type=brnaid). Исходящий платёж кассиру создаётся только после решения совета — в callback'е onaidauth.
Заявление на материальную помощь доверенного/председателя КУ (requirement b6 «Экономика КУ», процесс p.brn.aid).
Источник — собственный персональный кошелёк членских средств получателя (w.brn.person), пополненный распределением членских взносов участка. Получатель сам подписывает заявление.
НДФЛ удерживает кооператив: он выступает налоговым агентом и перечисляет получателю сумму за вычетом налога (решение владельца 2026-08-13, отменяет прежний порядок «налог платит получатель сам»). amount здесь — сумма заявления целиком: именно она списывается с персонального кошелька, а разбивка на выплату и удержание считается в BranchNdfl на шаге выплаты.
Действие НЕ применяет ledger2 и НЕ создаёт исходящий платёж. Материальная помощь выводит деньги из кооператива, поэтому решение о выплате принимает совет: здесь заявление лишь вносится на повестку (soviet::createagenda, type=brnaid) со статусом proposed. Регистрация исходящего платежа в gateway происходит в callback'е onaidauth после положительного решения; при отказе совета срабатывает onaiddecl и заявление закрывается, не доходя до кассира. Списание выполняется ещё позже — в aidconfirm, после фактического банковского перевода кассиром, и идёт двумя операциями: o.brn.aidtax (удержание, Дт 86 / Кт 68) и o.brn.aid (выплата, Дт 86 / Кт 51).
Средства под заявление не блокируются ни на одном шаге: если к моменту подтверждения кассиром баланса уже не хватает (получатель параллельно перевёл их в «Стол заказов»), списание упадёт и кассир не сможет подтвердить выплату.
Guards:
coopname. | void branch::createbranch | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | trustee | ||
| ) |
Создание нового кооперативного участка. Создает новый кооперативный участок с указанным председателем. При создании третьего участка автоматически активирует систему кооперативных участков.
| coopname | Наименование кооператива |
| braname | Наименование кооперативного участка |
| trustee | Председатель кооперативного участка (должен быть физическим лицом) |
coopname | void branch::createdec | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| eosio::name | type, | ||
| eosio::name | initiator, | ||
| document2 | proposal, | ||
| eosio::name | braname, | ||
| std::vector< decision_point > | agenda | ||
| ) |
Объявление собрания пайщиков с повесткой (создание решения). Универсальный механизм: тип "free" — свободное решение (фиксируется протоколом), тип "createbranch" — автоматизируемое (после утверждения уходит в совет и создаёт КУ).
| coopname | Наименование кооператива |
| hash | Якорь процесса (внешний идентификатор решения) |
| type | Тип решения: "free" | "createbranch" |
| initiator | Организатор собрания |
| proposal | Подписанное предложение/повестка |
| braname | Заранее сгенерированный аккаунт будущего КУ (для "createbranch", иначе пустое) |
| agenda | Вопросы повестки дня |
coopname | void branch::createexp | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | creator, | ||
| eosio::checksum256 | expense_hash, | ||
| std::vector< ExpenseDomain::item > | items, | ||
| document2 | statement | ||
| ) |
Подать расход участка в шасси расходов: средства уходят из общего кошелька КУ в пул расходов (o.brn.expfnd), записка передаётся шасси — решение совета, оплата по реквизитам либо аванс под отчёт, отчёт, закрытие.
Подать расход кооперативного участка в шасси расходов (requirement b6 «Экономика КУ»; процесс p.brn.spend).
Участок — только инициатор. Сумма служебной записки уходит из общего кошелька членских взносов КУ в пул расходов участка (o.brn.expfnd) и перестаёт быть доступной распределению между участниками, после чего записка передаётся шасси расходов: решение совета, оплата по реквизитам либо выдача аванса под отчёт, отчёт с чеками, закрытие. На терминальном переходе шасси вызывает branch::onexpdone, где неизрасходованный остаток возвращается участку.
Транзит через пул нужен и по существу (видно, сколько средств участка отдано под расходы), и технически: шасси работает с кооперативным пулом, а общий кошелёк участка ведёт разрез по участку — прямой перевод между ними невозможен, операция несёт один username.
Механика оплаты задаётся по каждой позиции (аванс под отчёт пайщику либо прямая оплата организации) и проверяется шасси.
Guards:
coopname. | void branch::declauth | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| eosio::checksum256 | approval_hash, | ||
| std::string | reason | ||
| ) |
Запрет отклонения доверенности председателя кооперативного участка. Callback отклонения совета: к этому моменту решение об учреждении кооперативного участка уже принято советом и участок создан, поэтому доверенность председателю участка отклонить нельзя — председателю совета остаётся только подписать её встречной подписью (см. branch::apprauth). Действие всегда завершается ошибкой.
| coopname | Наименование кооператива |
| username | Председатель кооперативного участка — уполномоченный по доверенности |
| approval_hash | Якорь одобрения (хэш документа доверенности) |
| reason | Причина отклонения (не используется) |
soviet | void branch::declinedec | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| std::string | reason | ||
| ) |
Отклонение решения советом. Callback совета: при отказе совета запись решения и вопросы повестки стираются, причина передаётся аргументом (история — в журнале действий).
| coopname | Наименование кооператива |
| hash | Якорь процесса |
| reason | Причина отклонения |
soviet | void branch::declliab | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| eosio::checksum256 | approval_hash, | ||
| std::string | reason | ||
| ) |
Запрет отклонения договора о материальной ответственности председателя участка. Callback отклонения совета: к этому моменту решение об учреждении кооперативного участка уже принято советом и участок создан, поэтому договор о материальной ответственности отклонить нельзя — председателю совета остаётся только подписать его встречной подписью (см. branch::apprliab). Действие всегда завершается ошибкой, тем самым гарантируя, что процесс не уйдёт в неопределённое состояние.
| coopname | Наименование кооператива |
| username | Председатель кооперативного участка — сторона «Исполнитель» |
| approval_hash | Якорь процесса (хэш одобрения) |
| reason | Причина отклонения (не используется) |
soviet | void branch::decltrusted | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| std::string | reason | ||
| ) |
Отклонение заявки доверенного лица председателем участка. Заявка стирается, причина передаётся аргументом (история — в журнале действий).
| coopname | Наименование кооператива |
| hash | Внешний идентификатор заявки |
| reason | Причина отклонения |
coopname | void branch::deletebranch | ( | eosio::name | coopname, |
| eosio::name | braname | ||
| ) |
Удаление кооперативного участка. Удаляет существующий кооперативный участок и отключает его участников. При удалении участка, когда остается менее 3 участков, автоматически отключает систему кооперативных участков.
| coopname | Наименование кооператива |
| braname | Наименование кооперативного участка для удаления |
coopname | void branch::deltrusted | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | trusted | ||
| ) |
Удаление доверенного лица из кооперативного участка. Удаляет доверенное лицо из существующего кооперативного участка.
| coopname | Наименование кооператива |
| braname | Наименование кооперативного участка |
| trusted | Доверенное лицо для удаления |
coopname | void branch::delweight | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | contract, | ||
| eosio::name | username | ||
| ) |
Исключение участника из распределения (вес удаляется, доли остальных перебалансируются автоматически).
Исключение участника из распределения членских взносов КУ (requirement b6 «Экономика КУ»).
Запись веса удаляется, Σ весов уменьшается — доли оставшихся участников перебалансируются автоматически на следующих начислениях. Ничего не блокируется и не переносится в общий кошелёк (решение владельца 2026-06-10). Уже распределённые средства остаются на персональном кошельке участника.
coopname. | void branch::delwhite | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | account | ||
| ) |
Удаление аккаунта из белого списка кооперативного участка. Удаляет аккаунт пайщика из белого списка приватного кооперативного участка.
| coopname | Наименование кооператива |
| braname | Наименование кооперативного участка |
| account | Аккаунт пайщика для удаления |
coopname | void branch::distribute | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | source_contract, | ||
| eosio::checksum256 | round_hash, | ||
| eosio::asset | amount, | ||
| std::string | memo | ||
| ) |
Ручное распределение средств общего кошелька КУ между председателем и доверенными по весам реестра: команда председателя, сумма раскладывается по весам (o.brn.release + o.brn.person), остаток округления остаётся в общем кошельке. Можно частично и многократно. Плановый резерв расходов (30 дней) контролирует бэкенд до вызова.
Ручное распределение средств общего кошелька кооперативного участка (requirement b6 «Экономика КУ», раунд 5; процесс p.brn.fees).
Команда председателя КУ (НЕ автоматическое действие при финализации заказа — приоритет общего кошелька, решение владельца 2026-06-10): председатель указывает сумму, она раскладывается по весам реестра weights (braname, source_contract). Можно распределять не всё и несколько раз. Плановый резерв расходов (30 дней) контролирует бэкенд до отправки транзакции — гард сознательно оффчейн до шасси расходов.
Раскладка per-доверенный — двухходовка (walletop несёт один username, прямой TRANSFER между USER_SHARED-разрезами braname → доверенный невозможен):
Обе ноги выполняются на фактическую долю (целочисленно, вниз), поэтому транзитный пул w.brn.pool в нуле после транзакции, а остаток округления вообще не покидает общий кошелёк. Состояния в RAM раунд не оставляет: история распределений собирается парсером из самого действия (таблица blockchain_actions), round_hash — process_hash ledger2-операций.
Guards:
| void branch::editbranch | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | trustee | ||
| ) |
Редактирование кооперативного участка. Изменяет председателя существующего кооперативного участка.
| coopname | Наименование кооператива |
| braname | Наименование кооперативного участка |
| trustee | Новый председатель кооперативного участка (должен быть физическим лицом) |
coopname | void branch::exec | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| document2 | petition, | ||
| document2 | liability, | ||
| document2 | authority | ||
| ) |
Исполнение утверждённого решения о создании кооперативного участка. Председатель собрания формирует заявление в совет и выводит вопрос об учреждении кооперативного участка на рассмотрение совета. К повестке совета прилагаются протокол собрания и бюллетени (по тому же якорю процесса).
| coopname | Наименование кооператива |
| hash | Якорь процесса |
| petition | Подписанное заявление председателя в совет |
| liability | Подписанный председателем участка договор о полной материальной ответственности |
| authority | Подписанная председателем участка доверенность председателю кооперативного участка |
coopname | void branch::init | ( | ) |
Инициализация контракта кооперативных участков. Выполняет начальную настройку контракта.
_system | void branch::joindec | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| eosio::name | username | ||
| ) |
Присоединение пайщика к собранию. Пайщик фиксируется в списке участников собрания.
| coopname | Наименование кооператива |
| hash | Якорь процесса |
| username | Имя присоединяющегося пайщика |
coopname | void branch::migrate | ( | ) |
Инициализация контракта кооперативных участков. Выполняет начальную настройку контракта.
_branch | void branch::onaidauth | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| document2 | authorization | ||
| ) |
Callback от soviet — совет одобрил выплату материальной помощи. Заявление переходит в authorized, протокол сохраняется, и регистрируется исходящий платёж в gateway — заявка попадает к кассиру.
Callback контракта Soviet — совет принял положительное решение по заявлению на материальную помощь (requirement b6, процесс p.brn.aid).
Приходит inline-вызовом из soviet::authorize_action_effect после того, как совет проголосовал за выплату и председатель подписал протокол. Здесь заявление переходит proposed → authorized, протокол совета сохраняется в записи, и только теперь регистрируется исходящий платёж в gateway — заявка появляется у кассира в реестре исходящих платежей.
Само списание o.brn.aid (Дт 86 / Кт 51) и удержание налога o.brn.aidtax (Дт 86 / Кт 68) произойдут ещё позже — в callback'е aidconfirm, после фактического банковского перевода кассиром.
Guards:
| void branch::onaiddecl | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| std::string | reason | ||
| ) |
Callback от soviet — совет отказал в выплате либо срок рассмотрения истёк. Заявление закрывается, не доходя до кассира; средства остаются на персональном кошельке.
Callback контракта Soviet — совет отказал в выплате материальной помощи либо срок рассмотрения заявления истёк (requirement b6, p.brn.aid).
Приходит inline-вызовом из soviet::decline_and_erase_decision (голоса «против» либо просрочка повестки). Заявление закрывается, не доходя до кассира: исходящий платёж не создавался, ledger2-операций не было, средства так и остались на персональном кошельке получателя — он может распорядиться ими иначе или подать заявление повторно.
Guards:
aiddecline). | void branch::onexpdone | ( | eosio::name | coopname, |
| eosio::checksum256 | expense_hash, | ||
| uint8_t | status, | ||
| eosio::asset | total_actual, | ||
| std::vector< char > | data | ||
| ) |
Callback шасси расходов — расход завершён (отклонён советом либо закрыт). Неизрасходованный остаток возвращается в общий кошелёк участка (o.brn.expunf), запись расхода стирается.
Callback шасси расходов — расход участка завершён (requirement b6 «Экономика КУ»; процесс p.brn.spend).
Приходит inline-вызовом из шасси на терминальном переходе служебной записки: совет отклонил расход либо расход закрыт после отчёта. Всё, что из выделенных средств не было потрачено, возвращается в общий кошелёк участка (o.brn.expunf) и снова становится доступным распределению:
Расход завершён — запись участка стирается из RAM, история движений остаётся в журнале действий.
Guards:
| void branch::reqtrusted | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | username, | ||
| eosio::checksum256 | hash, | ||
| document2 | application, | ||
| document2 | authority | ||
| ) |
Подача заявки на приём доверенным лицом кооперативного участка. Пайщик прикладывает подписанные заявление и договор о полной материальной ответственности. Заявка ожидает одобрения председателя участка.
| coopname | Наименование кооператива |
| braname | Кооперативный участок |
| username | Заявитель |
| hash | Внешний идентификатор заявки |
| application | Подписанный заявителем договор о полной материальной ответственности |
| authority | Подписанная заявителем доверенность доверенному лицу/оператору участка |
coopname | void branch::retfee | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | source_contract, | ||
| eosio::asset | amount, | ||
| eosio::name | process_type, | ||
| eosio::checksum256 | process_hash, | ||
| std::string | memo | ||
| ) |
Возврат членских взносов КУ из общего кошелька участка обратно в пул взносов программы-источника (o.brn.retfee) — инверсия accrue. Вызывается inline контрактом-источником (marketplace) при гарантийном возврате имущества, чтобы пайщику вернулась полная уплаченная сумма.
Возврат членских взносов из общего кошелька кооперативного участка в пул взносов программы-источника (процесс p.brn.fees) — точная инверсия accrue.
Вызывается inline контрактом-источником (сегодня — marketplace при приёме гарантийного возврата, accretrn): доля членского взноса, приходящаяся на возвращаемое имущество, уходит из общего кошелька участка (o.brn.retfee, username = braname) обратно в пул взносов программы. Оттуда контракт-источник своей операцией возврата довозвращает её на членский кошелёк заказчика — пайщику возвращается полная уплаченная сумма, а не только стоимость имущества.
Двухходовка нужна из-за инварианта walletop «один username на обе стороны»: прямой перевод с общего кошелька участка (разрез по braname) на кошелёк пайщика (разрез по пайщику) невозможен, поэтому транзит идёт через кооперативный пул взносов программы.
Guards:
| void branch::setprivate | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| bool | is_private | ||
| ) |
Установка признака приватности кооперативного участка. Приватный кооперативный участок нельзя выбрать при вступлении или смене участка, если аккаунт пайщика не добавлен в белый список этого участка.
| coopname | Наименование кооператива |
| braname | Наименование кооперативного участка |
| is_private | Признак приватности (true — приватный, false — публичный) |
coopname | void branch::setweight | ( | eosio::name | coopname, |
| eosio::name | braname, | ||
| eosio::name | contract, | ||
| eosio::name | username, | ||
| uint64_t | weight | ||
| ) |
Председатель КУ задаёт/меняет вес участника в распределении членских взносов от контракта-источника. Доля = вес / Σ весов.
Назначение/изменение веса участника в распределении членских взносов кооперативного участка (requirement b6 «Экономика КУ»).
Условия распределения задаются per (КУ, контракт-источник): сегодня источник — «Стол заказов» (marketplace), той же методикой управляются финансы КУ других потребительских программ. Доля участника = вес / Σ весов; изменение состава перебалансирует доли автоматически на следующих начислениях.
Guards:
coopname (назначение — прерогатива председателя КУ, право проверяет бэкенд). | void branch::startdec | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| eosio::name | chairman, | ||
| std::string | address, | ||
| std::vector< decision_point > | agenda | ||
| ) |
Открытие голосования по решению. Организатор собрания (он же председатель собрания) открывает голосование, указывая избираемого председателя кооперативного участка (из числа присоединившихся участников) и — для решения "createbranch" — адрес привязки кооперативного участка, определённый собранием. Окно голосования отмеряется автоматически (DECISION_VOTING_WINDOW_SECONDS).
| coopname | Наименование кооператива |
| hash | Якорь процесса |
| chairman | Избираемый председатель кооперативного участка (из участников) |
| address | Адрес привязки кооперативного участка (для "createbranch") |
| agenda | Итоговая повестка собрания: если непуста — заменяет предварительную (уточнённые на собрании формулировки и дополнительные вопросы); пустая — повестка без изменений |
coopname | void branch::votedec | ( | eosio::name | coopname, |
| eosio::checksum256 | hash, | ||
| eosio::name | username, | ||
| document2 | ballot, | ||
| std::vector< decision_vote_point > | votes | ||
| ) |
Голосование по вопросам повестки бюллетенем. Участник подаёт бюллетень-заявление с волеизъявлением (за/против/воздержался) по каждому вопросу повестки. Подсчёт ведёт контракт. Адаптация meet::vote.
| coopname | Наименование кооператива |
| hash | Якорь процесса |
| username | Имя голосующего участника |
| ballot | Подписанный бюллетень |
| votes | Массив голосов по вопросам повестки |
coopname