COOPENOMICS  v1
Кооперативная Экономика
Пространство имен Marketplace

Canonical helpers контракта marketplace (Story 11.1). Подробнее...

Пространства имен

namespace  ClaimStatus
 Статусы гарантийной претензии поставщику (процесс p.mkt.claim).
 
namespace  Memo
 
namespace  OrderPayoutStatus
 Состояние выплаты поставщику по Order'у (Locked Decision L12, E11 техдолг 598-16). Выплата идёт через gateway::createoutpay → действие кассира → callback marketplace::payconfirm / marketplace::paydecline.
 
namespace  OrderStatus
 Статусы Order'а в процессе p.mkt.supply.
 
namespace  ReturnStatus
 Рабочие статусы заявления на гарантийный возврат (процесс p.mkt.return).
 
namespace  WroffStatus
 Статусы проекта решения совета о списании скоропорта (процесс p.mkt.wroff).
 

Классы

struct  convert_target
 Адресат перевода по Заявлению 1110: заказ и его доля перевода. Подробнее...
 
struct  order
 On-chain Order — анкер процесса p.mkt.supply. Подробнее...
 
struct  return_request
 On-chain Заявление на гарантийный возврат — анкер процесса p.mkt.return. Подробнее...
 
struct  UserWalletAvailable
 
struct  warranty_claim
 On-chain гарантийная претензия поставщику — анкер процесса p.mkt.claim (компонент 68, задача 99D-13; решение владельца 08.09.2026). Подробнее...
 
struct  writeoff_proposal
 On-chain Проект решения совета о списании скоропорта — анкер процесса p.mkt.wroff. Подробнее...
 
struct  wroff_item
 Позиция к списанию в составе writeoff_proposal. Подробнее...
 

Определения типов

typedef eosio::multi_index< "orders"_n, order, eosio::indexed_by<"byhash"_n, eosio::const_mem_fun< order, checksum256, &order::by_hash > >, eosio::indexed_by<"byorderer"_n, eosio::const_mem_fun< order, uint64_t, &order::by_orderer > >, eosio::indexed_by<"byofferer"_n, eosio::const_mem_fun< order, uint64_t, &order::by_offerer > >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun< order, uint64_t, &order::by_status > >, eosio::indexed_by<"bybatch"_n, eosio::const_mem_fun< order, checksum256, &order::by_batch > >, eosio::indexed_by<"byoffer"_n, eosio::const_mem_fun< order, checksum256, &order::by_offer > >, eosio::indexed_by<"bydelivbra"_n, eosio::const_mem_fun< order, uint64_t, &order::by_delivery_bra > >, eosio::indexed_by<"byacceptbra"_n, eosio::const_mem_fun< order, uint64_t, &order::by_accept_bra > > > orders_index
 
typedef eosio::multi_index< "retrequests"_n, return_request, eosio::indexed_by<"byhash"_n, eosio::const_mem_fun< return_request, checksum256, &return_request::by_hash > >, eosio::indexed_by<"byorderer"_n, eosio::const_mem_fun< return_request, uint64_t, &return_request::by_orderer > >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun< return_request, uint64_t, &return_request::by_status > >, eosio::indexed_by<"byorigorder"_n, eosio::const_mem_fun< return_request, uint64_t, &return_request::by_original_order > > > return_requests_index
 
typedef eosio::multi_index< "claims"_n, warranty_claim, eosio::indexed_by<"byhash"_n, eosio::const_mem_fun< warranty_claim, checksum256, &warranty_claim::by_hash > >, eosio::indexed_by<"bysupplier"_n, eosio::const_mem_fun< warranty_claim, uint64_t, &warranty_claim::by_supplier > >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun< warranty_claim, uint64_t, &warranty_claim::by_status > >, eosio::indexed_by<"byorigorder"_n, eosio::const_mem_fun< warranty_claim, uint64_t, &warranty_claim::by_original_order > > > warranty_claims_index
 
typedef eosio::multi_index< "wroffprops"_n, writeoff_proposal, eosio::indexed_by<"byhash"_n, eosio::const_mem_fun< writeoff_proposal, checksum256, &writeoff_proposal::by_hash > >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun< writeoff_proposal, uint64_t, &writeoff_proposal::by_status > > > writeoff_proposals_index
 

Функции

bool is_valid_unit_symbol (const eosio::symbol &sym)
 
void check_quantity (const eosio::asset &quantity)
 Валидация количества: корректный asset, известная единица, положительное. Подробнее...
 
void check_packaging (const eosio::asset &quantity, const eosio::asset &package_size)
 
eosio::asset calc_cost (const eosio::asset &quantity, const eosio::asset &unit_price, const eosio::asset &package_size=eosio::asset(0, _unit_piece))
 
eosio::asset pro_rata (const eosio::asset &total, int64_t part, int64_t whole)
 
std::optional< order > get_order_by_hash (eosio::name coopname, const checksum256 &order_hash)
 
order get_order_by_hash_or_fail (eosio::name coopname, const checksum256 &order_hash, const std::string &msg="Заказ не найден по хэшу")
 
void update_order (eosio::name coopname, uint64_t order_id, const std::function< void(order &)> &fn)
 
std::optional< eosio::asset > get_asset_extension (const eosio::binary_extension< eosio::asset > &ext)
 
eosio::asset get_accepted_cost (const order &o)
 
eosio::asset get_payout_withheld (const order &o)
 Долг поставщика, уже удержанный при инициации выплаты; без суммы — ноль. Подробнее...
 
bool is_supplier_settlement_open (const order &o)
 
void erase_order (eosio::name coopname, uint64_t order_id)
 
uint64_t next_return_request_id (eosio::name coopname)
 
bool has_open_return_request (eosio::name coopname, const order &o)
 
std::optional< return_request > get_return_request_by_hash (eosio::name coopname, const checksum256 &request_hash)
 
return_request get_return_request_by_hash_or_fail (eosio::name coopname, const checksum256 &request_hash, const std::string &msg="Заявление на возврат не найдено по хэшу")
 
void update_return_request (eosio::name coopname, uint64_t request_id, const std::function< void(return_request &)> &fn)
 
void erase_return_request (eosio::name coopname, uint64_t request_id)
 
void check_return_request_branch (eosio::name coopname, const return_request &r, eosio::name braname)
 
std::optional< writeoff_proposal > get_writeoff_proposal_by_hash (eosio::name coopname, const checksum256 &proposal_hash)
 
writeoff_proposal get_writeoff_proposal_by_hash_or_fail (eosio::name coopname, const checksum256 &proposal_hash, const std::string &msg="Проект списания не найден по хэшу")
 
void update_writeoff_proposal (eosio::name coopname, uint64_t proposal_id, const std::function< void(writeoff_proposal &)> &fn)
 
void erase_writeoff_proposal (eosio::name coopname, uint64_t proposal_id)
 
std::optional< warranty_claim > get_claim_by_hash (eosio::name coopname, const checksum256 &claim_hash)
 
warranty_claim get_claim_by_hash_or_fail (eosio::name coopname, const checksum256 &claim_hash, const std::string &msg="Гарантийная претензия поставщику не найдена по хэшу")
 
void update_claim (eosio::name coopname, uint64_t claim_id, const std::function< void(warranty_claim &)> &fn)
 
UserWalletAvailable get_user_wallet_balance (eosio::name coopname, eosio::name wallet_id, eosio::name username)
 
uint64_t get_membership_fee_percent (eosio::name coopname)
 
eosio::asset calc_membership_fee (const eosio::asset &base, uint64_t fee_percent)
 Сумма членского взноса от базы по ставке (целочисленно, вниз). Подробнее...
 
eosio::asset get_order_membership_fee (const order &o)
 Членский взнос заказа (ноль — взнос не начислялся). Подробнее...
 
void require_member_fee (eosio::name coopname, eosio::name orderer, const eosio::asset &membership_fee)
 
void lock_order_body (eosio::name coopname, uint64_t order_id, eosio::name orderer, const checksum256 &order_hash, const eosio::asset &body, const std::string &program_memo, const std::string &wallet_memo)
 
void lock_membership_fee (eosio::name coopname, uint64_t order_id, eosio::name orderer, const checksum256 &order_hash, const eosio::asset &fee, const std::string &memo)
 
void refund_membership_fee_if_any (eosio::name coopname, const order &o)
 
void refund_order_full (eosio::name coopname, const order &o)
 
void clear_issue_documents (order &o)
 
eosio::asset refusal_penalty_share (const eosio::asset &base)
 Удерживаемая часть суммы (округление вниз — остаток в пользу пайщика). Подробнее...
 
void retain_refusal_penalty (eosio::name coopname, const order &o)
 
bool has_orders_at_branch (eosio::name coopname, eosio::name braname)
 
void check_member_can_exit (eosio::name coopname, eosio::name username)
 
void settle_member_fund_on_exit (eosio::name actor, eosio::name coopname, eosio::name username, const checksum256 &exit_hash)
 
void refund_return_fee (eosio::name coopname, eosio::name braname, const return_request &r)
 
bool refund_return_fee_if_available (eosio::name coopname, eosio::name braname, const return_request &r)
 

Переменные

constexpr uint64_t DEFAULT_MEMBERSHIP_FEE_PERCENT = 300000
 
constexpr uint64_t REFUSAL_PENALTY_PERCENT = 50
 

Подробное описание

Canonical helpers контракта marketplace (Story 11.1).

Donor-helpers (get_request_by_hash, get_shipment_by_hash, namespace DocumentNames, marketplace_callback_actions) удалены вместе с соответствующими actions и таблицами (AR30).

Этот файл содержит только утилиты доступа к canonical-сущностям трёх процессов p.mkt.supply / p.mkt.return / p.mkt.wroff и helper'ы для проверки доступного баланса (для createorder guard'а Locked Decision L6).

Возврат членского взноса участка при гарантийном возврате (p.mkt.return, задача 99D-15). Общая часть onmktrtauth и payretfee: взнос ушёл участку на выдаче (o.brn.common), и к моменту возврата участок мог его распределить. Тогда branch::retfee не проходит, а ронять из-за этого решение совета нельзя — имущество и паевой возвращаются сразу, взнос доводится позже.

Типы

◆ orders_index

typedef eosio::multi_index< "orders"_n, order, eosio::indexed_by<"byhash"_n, eosio::const_mem_fun<order, checksum256, &order::by_hash> >, eosio::indexed_by<"byorderer"_n, eosio::const_mem_fun<order, uint64_t, &order::by_orderer> >, eosio::indexed_by<"byofferer"_n, eosio::const_mem_fun<order, uint64_t, &order::by_offerer> >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun<order, uint64_t, &order::by_status> >, eosio::indexed_by<"bybatch"_n, eosio::const_mem_fun<order, checksum256, &order::by_batch> >, eosio::indexed_by<"byoffer"_n, eosio::const_mem_fun<order, checksum256, &order::by_offer> >, eosio::indexed_by<"bydelivbra"_n, eosio::const_mem_fun<order, uint64_t, &order::by_delivery_bra> >, eosio::indexed_by<"byacceptbra"_n, eosio::const_mem_fun<order, uint64_t, &order::by_accept_bra> > > Marketplace::orders_index

◆ return_requests_index

typedef eosio::multi_index< "retrequests"_n, return_request, eosio::indexed_by<"byhash"_n, eosio::const_mem_fun<return_request, checksum256, &return_request::by_hash> >, eosio::indexed_by<"byorderer"_n, eosio::const_mem_fun<return_request, uint64_t, &return_request::by_orderer> >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun<return_request, uint64_t, &return_request::by_status> >, eosio::indexed_by<"byorigorder"_n, eosio::const_mem_fun<return_request, uint64_t, &return_request::by_original_order> > > Marketplace::return_requests_index

◆ warranty_claims_index

typedef eosio::multi_index< "claims"_n, warranty_claim, eosio::indexed_by<"byhash"_n, eosio::const_mem_fun<warranty_claim, checksum256, &warranty_claim::by_hash> >, eosio::indexed_by<"bysupplier"_n, eosio::const_mem_fun<warranty_claim, uint64_t, &warranty_claim::by_supplier> >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun<warranty_claim, uint64_t, &warranty_claim::by_status> >, eosio::indexed_by<"byorigorder"_n, eosio::const_mem_fun<warranty_claim, uint64_t, &warranty_claim::by_original_order> > > Marketplace::warranty_claims_index

◆ writeoff_proposals_index

typedef eosio::multi_index< "wroffprops"_n, writeoff_proposal, eosio::indexed_by<"byhash"_n, eosio::const_mem_fun<writeoff_proposal, checksum256, &writeoff_proposal::by_hash> >, eosio::indexed_by<"bystatus"_n, eosio::const_mem_fun<writeoff_proposal, uint64_t, &writeoff_proposal::by_status> > > Marketplace::writeoff_proposals_index

Функции

◆ calc_cost()

eosio::asset Marketplace::calc_cost ( const eosio::asset &  quantity,
const eosio::asset &  unit_price,
const eosio::asset &  package_size = eosio::asset(0, _unit_piece) 
)
inline

Стоимость заказа. Два режима отпуска (Эпик 18):

  • по мере (package_size.amount == 0): unit_price — цена за базовую единицу; cost = количество × цена / 10^precision(количества), half-up.
  • упаковкой (package_size.amount > 0): unit_price — цена за упаковку; cost = (количество / размер_упаковки) × цена. Деление точное — кратность гарантирует check_packaging, копейка не округляется. Цена — money-asset в _root_govern_symbol; результат — в её символе. int128 против переполнения (крупные партии: тонны × цена).

◆ calc_membership_fee()

eosio::asset Marketplace::calc_membership_fee ( const eosio::asset &  base,
uint64_t  fee_percent 
)
inline

Сумма членского взноса от базы по ставке (целочисленно, вниз).

◆ check_member_can_exit()

void Marketplace::check_member_can_exit ( eosio::name  coopname,
eosio::name  username 
)
inline

Выход пайщика не оставит в Столе заказов незавершённого: резерв под заказы вернётся только выдачей или отменой (решение владельца, задача 99D-15), а решение совета по открытой заявке на возврат зачислило бы паевой и взнос на заблокированный аккаунт (задача 99D-16).

◆ check_packaging()

void Marketplace::check_packaging ( const eosio::asset &  quantity,
const eosio::asset &  package_size 
)
inline

Валидация упаковочного отпуска. package_size — содержимое одной упаковки в базовой единице (той же, что и количество). package_size.amount == 0 — отпуск «по мере» (весовой/наливной/поштучный): проверок нет, цена за базовую единицу. package_size.amount > 0 — упаковочный отпуск: символ упаковки равен символу количества, размер положителен, а количество кратно упаковке (заказать/выдать можно только целое число упаковок).

◆ check_quantity()

void Marketplace::check_quantity ( const eosio::asset &  quantity)
inline

Валидация количества: корректный asset, известная единица, положительное.

◆ check_return_request_branch()

void Marketplace::check_return_request_branch ( eosio::name  coopname,
const return_request &  r,
eosio::name  braname 
)
inline

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

◆ clear_issue_documents()

void Marketplace::clear_issue_documents ( order &  o)
inline

Снятие документов начатой выдачи с заказа (отказ совета, отмена оператором): заявление, протокол и обе подписи акта очищаются, факт возвращается к заказу.

◆ erase_order()

void Marketplace::erase_order ( eosio::name  coopname,
uint64_t  order_id 
)
inline

◆ erase_return_request()

void Marketplace::erase_return_request ( eosio::name  coopname,
uint64_t  request_id 
)
inline

◆ erase_writeoff_proposal()

void Marketplace::erase_writeoff_proposal ( eosio::name  coopname,
uint64_t  proposal_id 
)
inline

◆ get_accepted_cost()

eosio::asset Marketplace::get_accepted_cost ( const order &  o)
inline

Принятая стоимость заказа — база долга поставщику (Дт 10 / Кт 76 на приёмке, Дт 76 / Кт 51 на выплате). У заказов, принятых до появления поля, суммы нет: тогда берётся fact_cost, как читалось раньше.

◆ get_asset_extension()

std::optional< eosio::asset > Marketplace::get_asset_extension ( const eosio::binary_extension< eosio::asset > &  ext)
inline

Денежное расширение строки заказа, если в нём действительно сумма. Расширения сериализуются по порядку: когда контракт записывает более позднее поле, все предыдущие ложатся пустым asset без символа ("0 "). Это не сумма, а отсутствие данных — сравнение или вычитание с ним цепь отвергает («comparison of assets with different symbols»), так 11.09.2026 на тестнете встали выдача прежних заказов и выплаты поставщикам. value_or(def) у binary_extension не помечен const — читаем через has_value()/value().

◆ get_claim_by_hash()

std::optional< warranty_claim > Marketplace::get_claim_by_hash ( eosio::name  coopname,
const checksum256 &  claim_hash 
)
inline

◆ get_claim_by_hash_or_fail()

warranty_claim Marketplace::get_claim_by_hash_or_fail ( eosio::name  coopname,
const checksum256 &  claim_hash,
const std::string &  msg = "Гарантийная претензия поставщику не найдена по хэшу" 
)
inline

◆ get_membership_fee_percent()

uint64_t Marketplace::get_membership_fee_percent ( eosio::name  coopname)
inline

Единая ставка членского взноса кооператива (HUNDR_PERCENTS = 100%); нет явной настройки (singleton не создан) — берётся стандартный дефолт.

◆ get_order_by_hash()

std::optional< order > Marketplace::get_order_by_hash ( eosio::name  coopname,
const checksum256 &  order_hash 
)
inline

◆ get_order_by_hash_or_fail()

order Marketplace::get_order_by_hash_or_fail ( eosio::name  coopname,
const checksum256 &  order_hash,
const std::string &  msg = "Заказ не найден по хэшу" 
)
inline

◆ get_order_membership_fee()

eosio::asset Marketplace::get_order_membership_fee ( const order &  o)
inline

Членский взнос заказа (ноль — взнос не начислялся).

◆ get_payout_withheld()

eosio::asset Marketplace::get_payout_withheld ( const order &  o)
inline

Долг поставщика, уже удержанный при инициации выплаты; без суммы — ноль.

◆ get_return_request_by_hash()

std::optional< return_request > Marketplace::get_return_request_by_hash ( eosio::name  coopname,
const checksum256 &  request_hash 
)
inline

◆ get_return_request_by_hash_or_fail()

return_request Marketplace::get_return_request_by_hash_or_fail ( eosio::name  coopname,
const checksum256 &  request_hash,
const std::string &  msg = "Заявление на возврат не найдено по хэшу" 
)
inline

◆ get_user_wallet_balance()

UserWalletAvailable Marketplace::get_user_wallet_balance ( eosio::name  coopname,
eosio::name  wallet_id,
eosio::name  username 
)
inline

◆ get_writeoff_proposal_by_hash()

std::optional< writeoff_proposal > Marketplace::get_writeoff_proposal_by_hash ( eosio::name  coopname,
const checksum256 &  proposal_hash 
)
inline

◆ get_writeoff_proposal_by_hash_or_fail()

writeoff_proposal Marketplace::get_writeoff_proposal_by_hash_or_fail ( eosio::name  coopname,
const checksum256 &  proposal_hash,
const std::string &  msg = "Проект списания не найден по хэшу" 
)
inline

◆ has_open_return_request()

bool Marketplace::has_open_return_request ( eosio::name  coopname,
const order &  o 
)
inline

По заказу есть незакрытая заявка на возврат. Номера стёртых заявок выдаются заново, поэтому заявка с номером из заказа относится к нему, только если совпадает хэш заказа.

◆ has_orders_at_branch()

bool Marketplace::has_orders_at_branch ( eosio::name  coopname,
eosio::name  braname 
)
inline

Участок занят Столом заказов: он участок выдачи или приёмки хотя бы одного заказа (пока по заказу открыта заявка на возврат, заказ тоже жив).

◆ is_supplier_settlement_open()

bool Marketplace::is_supplier_settlement_open ( const order &  o)
inline

Выплата поставщику по заказу ещё не завершена: заказ нельзя стирать — обратные вызовы шлюза (payconfirm / paydecline) и повторная инициация ищут его по хэшу (задача 99D-14).

◆ is_valid_unit_symbol()

bool Marketplace::is_valid_unit_symbol ( const eosio::symbol &  sym)
inline

◆ lock_membership_fee()

void Marketplace::lock_membership_fee ( eosio::name  coopname,
uint64_t  order_id,
eosio::name  orderer,
const checksum256 &  order_hash,
const eosio::asset &  fee,
const std::string &  memo 
)
inline

Списание членского взноса участка под заказ с внутреннего членского кошелька (o.mkt.fee, w.mkt.member → w.mkt.fee); no-op для нулевого взноса.

◆ lock_order_body()

void Marketplace::lock_order_body ( eosio::name  coopname,
uint64_t  order_id,
eosio::name  orderer,
const checksum256 &  order_hash,
const eosio::asset &  body,
const std::string &  program_memo,
const std::string &  wallet_memo 
)
inline

Паевое тело заказа (и доплата по факту) фондируется двумя паевыми кошельками каждым в свою очередь: сначала свободный паевой «Стола заказов» w.mkt.share (туда возвращаются паевые средства при отменах, недовыдачах и гарантийных возвратах), остаток — с главного паевого Цифрового кошелька w.wal.share. Обе части ложатся одним паевым резервом w.mkt.order (o.mkt.lockp и o.mkt.lock, без проводок — все кошельки на 80). При нехватке — отказ.

◆ next_return_request_id()

uint64_t Marketplace::next_return_request_id ( eosio::name  coopname)
inline

Номер новой заявки на возврат. Ноль не выдаётся: в заказе return_request_id == 0 означает «возврата по заказу не было», а available_primary_key на пустой таблице (заявки стираются терминалами) возвращает ноль — тогда по такому заказу открывался бы второй возврат, а closeorder не видел бы открытой заявки (задача 99D-16).

◆ pro_rata()

eosio::asset Marketplace::pro_rata ( const eosio::asset &  total,
int64_t  part,
int64_t  whole 
)
inline

Доля суммы, пропорциональная части от целого, с округлением половины вверх (то же правило, что в calc_cost). Применяется там, где сумму нельзя пересчитать от цены — её надо разделить ровно так, как она сложилась: стоимость возвращаемой части выданного, доля членского взноса и т. п. При part == whole результат равен исходной сумме без потери копейки.

◆ refund_membership_fee_if_any()

void Marketplace::refund_membership_fee_if_any ( eosio::name  coopname,
const order &  o 
)
inline

Полный возврат членского взноса заказа на членский кошелёк «Стола заказов» w.mkt.member (o.mkt.refund) при отмене/отклонении/истечении; no-op для заказов без взноса. Частичный возврат при недовыдаче — в issueact2. Членский остаётся членским: обратно в паевой не транслируется, идёт в зачёт следующего заказа.

◆ refund_order_full()

void Marketplace::refund_order_full ( eosio::name  coopname,
const order &  o 
)
inline

Полный возврат резерва заказа на свободный паевой «Стола заказов» и сторно членского взноса (бесплатная отмена: до акцепта поставщиком либо заказ из остатка кооператива — поставщика и его риска нет).

◆ refund_return_fee()

void Marketplace::refund_return_fee ( eosio::name  coopname,
eosio::name  braname,
const return_request &  r 
)
inline

Взнос по заявке на возврат: из общего кошелька участка в пул взносов (branch::retfee) и из пула на членский кошелёк программы (o.mkt.refund).

◆ refund_return_fee_if_available()

bool Marketplace::refund_return_fee_if_available ( eosio::name  coopname,
eosio::name  braname,
const return_request &  r 
)
inline

Взнос возвращается, только если общий кошелёк участка его держит; иначе false — заявка остаётся ждать пополнения (статус feepend).

◆ refusal_penalty_share()

eosio::asset Marketplace::refusal_penalty_share ( const eosio::asset &  base)
inline

Удерживаемая часть суммы (округление вниз — остаток в пользу пайщика).

◆ require_member_fee()

void Marketplace::require_member_fee ( eosio::name  coopname,
eosio::name  orderer,
const eosio::asset &  membership_fee 
)
inline

Членский взнос участка под заказ идёт только с внутреннего членского кошелька программы w.mkt.member (уточнение владельца 06.09.2026: членские средства, вернувшиеся при отменах и гарантийных возвратах, оплачивают только членские взносы следующих заказов; тело заказа всегда паевое). Недостающую часть взноса пайщик заранее перевёл действием convert по заявлению 1110 — здесь кошелька обязано хватать на взнос целиком.

◆ retain_refusal_penalty()

void Marketplace::retain_refusal_penalty ( eosio::name  coopname,
const order &  o 
)
inline

Отказ пайщика от получения позиции после акцепта поставщиком: удержание 50%. Тело заказа и членский взнос делятся пополам — удержанная половина уходит в общий кошелёк КУ выдачи (тело — транзитом через пул взносов o.mkt.penalty, затем единым Branch::accrue вместе с удержанной половиной взноса), вторая половина возвращается пайщику на свободный паевой «Стола заказов». Имущество остаётся на складе КУ (без движения по счёту 10) — кооператив несёт риск уже оплаченной поставки, под который и держится удержание. Долг поставщику (Кт 76 с приёмки) удержание не трогает: он гасится выплатой своим чередом.

◆ settle_member_fund_on_exit()

void Marketplace::settle_member_fund_on_exit ( eosio::name  actor,
eosio::name  coopname,
eosio::name  username,
const checksum256 &  exit_hash 
)
inline

Выход состоялся: остаток членского кошелька программы не возвращается и в паевой не транслируется — через пул взносов (o.mkt.exfee) уходит в общий кошелёк участка, к которому прикреплён пайщик (o.brn.common). Пайщик без участка или участок удалён — остаток остаётся в пуле. actor — контракт, проводящий выход (его разрешение подписывает операции).

◆ update_claim()

void Marketplace::update_claim ( eosio::name  coopname,
uint64_t  claim_id,
const std::function< void(warranty_claim &)> &  fn 
)
inline

◆ update_order()

void Marketplace::update_order ( eosio::name  coopname,
uint64_t  order_id,
const std::function< void(order &)> &  fn 
)
inline

◆ update_return_request()

void Marketplace::update_return_request ( eosio::name  coopname,
uint64_t  request_id,
const std::function< void(return_request &)> &  fn 
)
inline

◆ update_writeoff_proposal()

void Marketplace::update_writeoff_proposal ( eosio::name  coopname,
uint64_t  proposal_id,
const std::function< void(writeoff_proposal &)> &  fn 
)
inline

Переменные

◆ DEFAULT_MEMBERSHIP_FEE_PERCENT

constexpr uint64_t Marketplace::DEFAULT_MEMBERSHIP_FEE_PERCENT = 300000
constexpr

Дефолтная ставка членского взноса нового кооператива — 30% (HUNDR_PERCENTS = 100%). Действует, пока председатель явно не настроит свою ставку через setfee (в т.ч. явный 0 — взнос осознанно отключён, это по-прежнему доступно, просто больше не подразумевается молчаливым «не настроено»).

◆ REFUSAL_PENALTY_PERCENT

constexpr uint64_t Marketplace::REFUSAL_PENALTY_PERCENT = 50
inlineconstexpr

Доля удержания при отказе пайщика от получения после акцепта поставщиком. Hard-code (определяется Положением целевой потребительской программы).