|
COOPENOMICS
v1
Кооперативная Экономика
|
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); проверка readyissue/issueact2/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; readyissue: = delivery_braname (фиксация готовности к выдаче) Подробнее... | |
| eosio::asset | quantity = asset(0, _unit_piece) |
| заказанное количество (asset с символом единицы KG/LTR/PCS, Эпик 17) Подробнее... | |
| eosio::asset | actual_quantity = asset(0, _unit_piece) |
| фактически выданное (issueact2); до issueact2 == 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 (после issueact2) Подробнее... | |
| uint32_t | warranty_period_secs = 0 |
| из Offer'а — для submretrn гард'а Подробнее... | |
| time_point_sec | warranty_until = time_point_sec(0) |
| now() + warranty_period_secs (заполняется в issueact2) Подробнее... | |
| 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_act1 |
| Акт приёма-передачи (1115) — первая подпись заказчика (issueact1); слот прежнего issue_act_signiss1. Подробнее... | |
| document2 | issue_act2 |
| Акт приёма-передачи (1115) — закрывающая подпись председателя участка выдачи (issueact2); слот прежнего issue_act_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) |
| eosio::binary_extension< document2 > | issue_statement |
| eosio::binary_extension< document2 > | issue_protocol |
| eosio::binary_extension< eosio::asset > | payout_withheld |
| eosio::binary_extension< eosio::asset > | accepted_cost |
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 и неизменна. Источник проверки readyissue/issueact2/p.mkt.return.accept_braname — КУ приёмки от поставщика; заполняется на signsupp как параметр action'а (поставщик указывает, в какой КУ сдаёт партию). Источник проверки signchair.current_warehouse_braname — текущая точка хранения имущества по этому Order'у. Заполняется на signchair (= accept_braname, имущество на приёмном складе) и обновляется на readyissue (= 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 — факт выдачи: фиксируются заявлением issuestmt, от них идут движения issueact2 и расчёт гарантийного возврата. До заявления равны quantity / total_cost; signchair временно кладёт сюда факт приёмки. Принятая стоимость живёт отдельно в accepted_cost — выплата поставщику считается только от неё (задача 99D-14).
warranty_until — рассчитывается в issueact2 как now() + warranty_period_secs (period приходит с Offer'а через backend; в submretrn валидируется только это поле).
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
| eosio::name Marketplace::order::accept_braname |
КУ приёмки от поставщика (заполняется на signsupp); проверка signchair через Branch::is_user_authorized.
| document2 Marketplace::order::acceptance_act_signchair |
АПП приёмки — финальная подпись председателя приёмного КУ (signchair)
| document2 Marketplace::order::acceptance_act_signsupp |
АПП приёмки — первая подпись поставщика (signsupp)
| eosio::binary_extension<eosio::asset> Marketplace::order::accepted_cost |
Принятая стоимость по закрывающей подписи акта приёмки (signchair): основание Дт 10 / Кт 76 и единственная база суммы выплаты поставщику (payout / payconfirm). Заявление о выдаче её не трогает — fact_cost перезаписывается фактом выдачи, а долг поставщику от выдачи не зависит (задача 99D-14). binary_extension: у заказов, принятых до этого поля, значения нет — читать через Marketplace::get_accepted_cost.
| eosio::asset Marketplace::order::actual_quantity = asset(0, _unit_piece) |
фактически выданное (issueact2); до issueact2 == quantity
| checksum256 Marketplace::order::batch_hash |
opaque ссылка на consolidated request (off-chain)
| eosio::name Marketplace::order::coopname |
scope-валидация
| eosio::name Marketplace::order::current_warehouse_braname |
текущая точка хранения; signchair: = accept_braname; readyissue: = delivery_braname (фиксация готовности к выдаче)
| eosio::name Marketplace::order::delivery_braname |
КУ выдачи (выбран пайщиком на createorder); проверка readyissue/issueact2/p.mkt.return через Branch::is_user_authorized.
| eosio::asset Marketplace::order::fact_cost = asset(0, _root_govern_symbol) |
actual_quantity * unit_price / 10^precision (после issueact2)
| checksum256 Marketplace::order::hash |
process_hash для p.mkt.supply
| uint64_t Marketplace::order::id |
внутренний ID
| document2 Marketplace::order::issue_act1 |
Акт приёма-передачи (1115) — первая подпись заказчика (issueact1); слот прежнего issue_act_signiss1.
| document2 Marketplace::order::issue_act2 |
Акт приёма-передачи (1115) — закрывающая подпись председателя участка выдачи (issueact2); слот прежнего issue_act_signiss2.
| eosio::binary_extension<document2> Marketplace::order::issue_protocol |
Протокол решения совета о возврате паевого взноса имуществом (1114) — из обратного вызова onmktisauth. binary_extension, как и issue_statement.
| eosio::binary_extension<document2> Marketplace::order::issue_statement |
Заявление о возврате паевого взноса имуществом (1113) — подпись заказчика (issuestmt). binary_extension: у строк, созданных до паевой модели, значения нет — читать через value_or(document2{}).
| eosio::asset Marketplace::order::markdown_cost = asset(0, _root_govern_symbol) |
Списанная уценка по заказу из остатка кооператива (o.mkt.loss, Дт 91 / Кт 10): разница между стоимостью прибытия выданного и фактической суммой выдачи. Ноль — уценка не списывалась; это же guard идемпотентности action'а markdown (повторное списание по заказу не пройдёт).
| 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). Ноль — взнос не начислялся.
| checksum256 Marketplace::order::offer_hash |
ссылка на Offer (off-chain в backend)
| eosio::name Marketplace::order::offerer |
пайщик-поставщик из Offer'а (для acceptorder/declineorder/signsupp guard'а)
| eosio::name Marketplace::order::orderer |
пайщик-заказчик
| eosio::asset Marketplace::order::package_size = asset(0, _unit_piece) |
Эпик 18: содержимое упаковки в базовой единице. 0 = отпуск по мере (unit_price за базовую единицу); >0 = упаковкой (unit_price за упаковку, quantity/actual_quantity кратны package_size)
| std::string Marketplace::order::payout_decline_reason |
Заполняется только при payout_status == DECLINED (текст причины из gateway::outdecline)
| eosio::name Marketplace::order::payout_status = OrderPayoutStatus::NONE |
Locked Decision L12 — состояние выплаты поставщику через gateway (см. namespace OrderPayoutStatus)
| eosio::binary_extension<eosio::asset> Marketplace::order::payout_withheld |
Часть выплаты поставщику, удержанная в счёт его признанного гарантийного долга (w.mkt.debt) при инициации выплаты (payout); по подтверждению кассира (payconfirm) на неё ставится o.mkt.deduct. binary_extension: у прежних заказов значения нет — читать через value_or(asset(0, …)).
| eosio::asset Marketplace::order::quantity = asset(0, _unit_piece) |
заказанное количество (asset с символом единицы KG/LTR/PCS, Эпик 17)
| uint64_t Marketplace::order::return_request_id = 0 |
0 если активного гарантийного возврата нет
| eosio::name Marketplace::order::status = OrderStatus::ACTIVE |
canonical статус
| eosio::asset Marketplace::order::total_cost = asset(0, _root_govern_symbol) |
quantity * unit_price / 10^precision (заблокированная сумма)
| eosio::asset Marketplace::order::unit_price = asset(0, _root_govern_symbol) |
цена за единицу отпуска: за базовую единицу (кг/литр/штуку) при package_size==0, либо за упаковку при package_size>0
| uint32_t Marketplace::order::warranty_period_secs = 0 |
из Offer'а — для submretrn гард'а
| time_point_sec Marketplace::order::warranty_until = time_point_sec(0) |
now() + warranty_period_secs (заполняется в issueact2)