COOPENOMICS  v1
Кооперативная Экономика
Структура Marketplace::order

On-chain Order — анкер процесса p.mkt.supply. Подробнее...

#include <table_marketplace_orders.hpp>

Открытые члены

uint64_t primary_key () const
 
checksum256 by_hash () const
 
uint64_t by_orderer () const
 
uint64_t by_offerer () const
 
uint64_t by_status () const
 
checksum256 by_batch () const
 
checksum256 by_offer () const
 
uint64_t by_delivery_bra () const
 
uint64_t by_accept_bra () const
 

Открытые атрибуты

uint64_t id
 внутренний ID Подробнее...
 
checksum256 hash
 process_hash для p.mkt.supply Подробнее...
 
eosio::name coopname
 scope-валидация Подробнее...
 
eosio::name orderer
 пайщик-заказчик Подробнее...
 
eosio::name offerer
 пайщик-поставщик из Offer'а (для acceptorder/declineorder/signsupp guard'а) Подробнее...
 
checksum256 offer_hash
 ссылка на Offer (off-chain в backend) Подробнее...
 
eosio::name delivery_braname
 КУ выдачи (выбран пайщиком на createorder); проверка signiss1/signiss2/p.mkt.return через Branch::is_user_authorized. Подробнее...
 
eosio::name accept_braname
 КУ приёмки от поставщика (заполняется на signsupp); проверка signchair через Branch::is_user_authorized. Подробнее...
 
eosio::name current_warehouse_braname
 текущая точка хранения; signchair: = accept_braname; signiss1: = delivery_braname (фиксация готовности к выдаче) Подробнее...
 
eosio::asset quantity = asset(0, _unit_piece)
 заказанное количество (asset с символом единицы KG/LTR/PCS, Эпик 17) Подробнее...
 
eosio::asset actual_quantity = asset(0, _unit_piece)
 фактически выданное (signiss2); до signiss2 == quantity Подробнее...
 
eosio::asset package_size = asset(0, _unit_piece)
 Эпик 18: содержимое упаковки в базовой единице. 0 = отпуск по мере (unit_price за базовую единицу); >0 = упаковкой (unit_price за упаковку, quantity/actual_quantity кратны package_size) Подробнее...
 
eosio::asset unit_price = asset(0, _root_govern_symbol)
 цена за единицу отпуска: за базовую единицу (кг/литр/штуку) при package_size==0, либо за упаковку при package_size>0 Подробнее...
 
eosio::asset total_cost = asset(0, _root_govern_symbol)
 quantity * unit_price / 10^precision (заблокированная сумма) Подробнее...
 
eosio::asset fact_cost = asset(0, _root_govern_symbol)
 actual_quantity * unit_price / 10^precision (после signiss2) Подробнее...
 
uint32_t warranty_period_secs = 0
 из Offer'а — для submretrn гард'а Подробнее...
 
time_point_sec warranty_until = time_point_sec(0)
 now() + warranty_period_secs (заполняется в signiss2) Подробнее...
 
eosio::name status = OrderStatus::ACTIVE
 canonical статус Подробнее...
 
checksum256 batch_hash
 opaque ссылка на consolidated request (off-chain) Подробнее...
 
document2 acceptance_act_signsupp
 АПП приёмки — первая подпись поставщика (signsupp) Подробнее...
 
document2 acceptance_act_signchair
 АПП приёмки — финальная подпись председателя приёмного КУ (signchair) Подробнее...
 
document2 issue_act_signiss1
 АПП выдачи — первая подпись председателя КУ выдачи (signiss1) Подробнее...
 
document2 issue_act_signiss2
 АПП выдачи — финальная подпись заказчика (signiss2) Подробнее...
 
eosio::name payout_status = OrderPayoutStatus::NONE
 Locked Decision L12 — состояние выплаты поставщику через gateway (см. namespace OrderPayoutStatus) Подробнее...
 
std::string payout_decline_reason
 Заполняется только при payout_status == DECLINED (текст причины из gateway::outdecline) Подробнее...
 
uint64_t return_request_id = 0
 0 если активного гарантийного возврата нет Подробнее...
 
eosio::asset markdown_cost = asset(0, _root_govern_symbol)
 
eosio::asset membership_fee = asset(0, _root_govern_symbol)
 

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

On-chain Order — анкер процесса p.mkt.supply.

scope = coopname; primary_key = id; уникальность через byhash индекс на order.hash — этот hash используется как process_hash во всех ledger2- операциях процесса (BLOCK/UNBLOCK/PURCH/PAYOUT/CONSUM/CONSUM2/RETURN).

Привязка к кооперативным участкам (КУ) идёт через braname (см. контракт branch, таблица branches). Председатель / trustee / доверенные лица каждого КУ известны контракту branch — авторизация подписей актов выполняется через Branch::is_user_authorized(coopname, braname, signer), а не по сохранённому имени председателя (председатель может делегировать подпись доверенному лицу из coobranch.trusted[], состав которого может меняться независимо от Order'а).

Точки контракта:

  • delivery_braname — КУ выдачи имущества пайщику; задаётся пайщиком на createorder и неизменна. Источник проверки signiss1/signiss2/p.mkt.return.
  • accept_braname — КУ приёмки от поставщика; заполняется на signsupp как параметр action'а (поставщик указывает, в какой КУ сдаёт партию). Источник проверки signchair.
  • current_warehouse_braname — текущая точка хранения имущества по этому Order'у. Заполняется на signchair (= accept_braname, имущество на приёмном складе) и обновляется на signiss1 (= delivery_braname, готово к выдаче — фиксирует факт логистической передачи). Бездокументарно — промежуточные перемещения по заготовочным КУ контрактом не подписываются; точка хранения переходит «скачком» в момент готовности к выдаче.

История внутренних передач между КУ (заготовочный → точка выдачи и т.п.) с подписью ТТН — отложена. Backend может реконструировать движение из blockchain_actions если потребуется.

acceptance_act (АПП приёмки) и issue_act (АПП выдачи) хранятся полным document2 — это дублирование в случае batch-поставки (один физический акт → копия в каждом order'е batch'а), но это допустимо для on-chain (минимум данных + hash) и упрощает аудит.

batch_hash — opaque ссылка на off-chain consolidated request (Locked Decision L10: batch — backend-only сущность). Контракт не валидирует существование batch'а, только хранит ссылку для трассировки и группировки Order'ов в UI. Все per-batch операции на on-chain делаются per-Order (backend проходит циклом по orders батча) — векторов order'ов в action'ах нет.

actual_quantity / fact_cost заполняются на signiss2 (Story 6.2/6.3). До signiss2 равны соответственно quantity / total_cost.

warranty_until — рассчитывается в signiss2 как now() + warranty_period_secs (period приходит с Offer'а через backend; в submretrn валидируется только это поле).

Методы

◆ by_accept_bra()

uint64_t Marketplace::order::by_accept_bra ( ) const
inline

◆ by_batch()

checksum256 Marketplace::order::by_batch ( ) const
inline

◆ by_delivery_bra()

uint64_t Marketplace::order::by_delivery_bra ( ) const
inline

◆ by_hash()

checksum256 Marketplace::order::by_hash ( ) const
inline

◆ by_offer()

checksum256 Marketplace::order::by_offer ( ) const
inline

◆ by_offerer()

uint64_t Marketplace::order::by_offerer ( ) const
inline

◆ by_orderer()

uint64_t Marketplace::order::by_orderer ( ) const
inline

◆ by_status()

uint64_t Marketplace::order::by_status ( ) const
inline

◆ primary_key()

uint64_t Marketplace::order::primary_key ( ) const
inline

Данные класса

◆ accept_braname

eosio::name Marketplace::order::accept_braname

КУ приёмки от поставщика (заполняется на signsupp); проверка signchair через Branch::is_user_authorized.

◆ acceptance_act_signchair

document2 Marketplace::order::acceptance_act_signchair

АПП приёмки — финальная подпись председателя приёмного КУ (signchair)

◆ acceptance_act_signsupp

document2 Marketplace::order::acceptance_act_signsupp

АПП приёмки — первая подпись поставщика (signsupp)

◆ actual_quantity

eosio::asset Marketplace::order::actual_quantity = asset(0, _unit_piece)

фактически выданное (signiss2); до signiss2 == quantity

◆ batch_hash

checksum256 Marketplace::order::batch_hash

opaque ссылка на consolidated request (off-chain)

◆ coopname

eosio::name Marketplace::order::coopname

scope-валидация

◆ current_warehouse_braname

eosio::name Marketplace::order::current_warehouse_braname

текущая точка хранения; signchair: = accept_braname; signiss1: = delivery_braname (фиксация готовности к выдаче)

◆ delivery_braname

eosio::name Marketplace::order::delivery_braname

КУ выдачи (выбран пайщиком на createorder); проверка signiss1/signiss2/p.mkt.return через Branch::is_user_authorized.

◆ fact_cost

eosio::asset Marketplace::order::fact_cost = asset(0, _root_govern_symbol)

actual_quantity * unit_price / 10^precision (после signiss2)

◆ hash

checksum256 Marketplace::order::hash

process_hash для p.mkt.supply

◆ id

uint64_t Marketplace::order::id

внутренний ID

◆ issue_act_signiss1

document2 Marketplace::order::issue_act_signiss1

АПП выдачи — первая подпись председателя КУ выдачи (signiss1)

◆ issue_act_signiss2

document2 Marketplace::order::issue_act_signiss2

АПП выдачи — финальная подпись заказчика (signiss2)

◆ markdown_cost

eosio::asset Marketplace::order::markdown_cost = asset(0, _root_govern_symbol)

Списанная уценка по заказу из остатка кооператива (o.mkt.loss, Дт 91 / Кт 10): разница между стоимостью прибытия выданного и фактической суммой выдачи. Ноль — уценка не списывалась; это же guard идемпотентности action'а markdown (повторное списание по заказу не пройдёт).

◆ membership_fee

eosio::asset Marketplace::order::membership_fee = asset(0, _root_govern_symbol)

Членский взнос по заказу (requirement b6 «Экономика КУ»): считается от единой ставки кооператива на момент создания заказа и блокируется вместе со стоимостью имущества (o.mkt.fee, Дт 80 / Кт 86, пул w.mkt.fee). Включается в общую стоимость заказа для заказчика. При отмене возвращается полностью (o.mkt.refund); при финализации пересчитывается пропорционально факту и распределяется в кошельки КУ (branch::distribute). Ноль — взнос не начислялся.

◆ offer_hash

checksum256 Marketplace::order::offer_hash

ссылка на Offer (off-chain в backend)

◆ offerer

eosio::name Marketplace::order::offerer

пайщик-поставщик из Offer'а (для acceptorder/declineorder/signsupp guard'а)

◆ orderer

eosio::name Marketplace::order::orderer

пайщик-заказчик

◆ package_size

eosio::asset Marketplace::order::package_size = asset(0, _unit_piece)

Эпик 18: содержимое упаковки в базовой единице. 0 = отпуск по мере (unit_price за базовую единицу); >0 = упаковкой (unit_price за упаковку, quantity/actual_quantity кратны package_size)

◆ payout_decline_reason

std::string Marketplace::order::payout_decline_reason

Заполняется только при payout_status == DECLINED (текст причины из gateway::outdecline)

◆ payout_status

eosio::name Marketplace::order::payout_status = OrderPayoutStatus::NONE

Locked Decision L12 — состояние выплаты поставщику через gateway (см. namespace OrderPayoutStatus)

◆ quantity

eosio::asset Marketplace::order::quantity = asset(0, _unit_piece)

заказанное количество (asset с символом единицы KG/LTR/PCS, Эпик 17)

◆ return_request_id

uint64_t Marketplace::order::return_request_id = 0

0 если активного гарантийного возврата нет

◆ status

eosio::name Marketplace::order::status = OrderStatus::ACTIVE

canonical статус

◆ total_cost

eosio::asset Marketplace::order::total_cost = asset(0, _root_govern_symbol)

quantity * unit_price / 10^precision (заблокированная сумма)

◆ unit_price

eosio::asset Marketplace::order::unit_price = asset(0, _root_govern_symbol)

цена за единицу отпуска: за базовую единицу (кг/литр/штуку) при package_size==0, либо за упаковку при package_size>0

◆ warranty_period_secs

uint32_t Marketplace::order::warranty_period_secs = 0

из Offer'а — для submretrn гард'а

◆ warranty_until

time_point_sec Marketplace::order::warranty_until = time_point_sec(0)

now() + warranty_period_secs (заполняется в signiss2)


Объявления и описания членов структуры находятся в файле: