[598][@ant] docs(marketplace): подключить PNG-снимки harness в 9 MD-страниц

Все скриншоты прогона harness'а (cedde9f277) теперь видны в MD через
![alt](/assets/new/marketplace/.../.png) после admonition «Реализовано».
Существующая проза из PRD сохранена без изменений.

Страницы: orderer/consolidated, offerer/incoming-orders, offerer/offers,
chairman/category-whitelist, branch-chairman/branch-orders,
board/agenda-writeoff, board/payouts-readonly, onboarding/coop-accept-cpp,
onboarding/member-pick-cpp.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
ant
2026-05-21 20:02:22 +00:00
parent cedde9f277
commit 5611f66303
9 changed files with 38 additions and 8 deletions
@@ -6,7 +6,11 @@ tags:
# Голосование по списанию
!!!info "Реализовано — ожидается прогон harness"
Read-only страница совета `/market/board-writeoff` реализована (коммит `2a41354c328`). Совет видит ленту проектов списания в статусах ON_AGENDA / AUTHORIZED / EXECUTING / EXECUTED / REJECTED с фильтром по статусу. Само голосование совета — через core soviet agenda (`/soviet/agendas`, тип `mktwroff`). Скриншоты будут добавлены после прогона `bin/shoot.mjs board/agenda-writeoff` против стенда с подхваченными worktree-страницами.
Read-only страница совета `/market/board-writeoff` реализована (коммит `2a41354c328`). Совет видит ленту проектов списания в статусах ON_AGENDA / AUTHORIZED / EXECUTING / EXECUTED / REJECTED с фильтром по статусу. Само голосование совета — через core soviet agenda (`/soviet/agendas`, тип `mktwroff`).
![Лента проектов списания для совета](/assets/new/marketplace/board/agenda-writeoff/01-overview.png)
![Фильтр «На повестке»](/assets/new/marketplace/board/agenda-writeoff/02-on-agenda.png)
Члены совета голосуют по предложениям председателя о списании имущества (просроченного, испорченного, невостребованного). Это страница в их рабочем кабинете — раздел Marketplace на Столе совета.
@@ -8,6 +8,8 @@ tags:
!!!info "Placeholder — раздел в подготовке"
Страница `/market/payouts` реализована как informational placeholder (коммит `261be9a2702`). Совету пока недоступен read-обзор по всем поставщикам — `marketplaceListOutgoingPaymentsAsSupplier` отдаёт только историю текущего пайщика. Для совета нужна доп. policy `Payment / read:all` в `marketplace-access-matrix.ts` + query `marketplaceListOutgoingPayments` с опц. `supplier_account`. До этого совет видит выплаты через core cassir-стол кооператива. Описание ниже отражает целевое поведение.
![Informational placeholder — раздел в подготовке](/assets/new/marketplace/board/payouts-readonly/01-placeholder.png)
Совет имеет **read-only доступ** к ленте всех денежных выплат поставщикам — от подписи акта приёма-передачи до фактического перевода средств. Эта страница — финансовый контроль совета над основным потоком исходящих платежей.
## Что показывается
@@ -6,7 +6,11 @@ tags:
# Заказы участка
!!!info "Реализовано — ожидается прогон harness"
Страница `/market-pvz/branch-orders` реализована (коммит `d1bebf6f645`). Три ленты с табами и счётчиками: приёмки (Эпик 5), выдачи (Эпик 6), возвраты (Эпик 7) — все через существующие `*ByBraname` query, объединённые через Promise.all. braname вводится вручную; auto-detect через `marketplace_whoami` подключится на следующем шаге Story 6.x+1. Скриншоты — после прогона `bin/shoot.mjs branch-chairman/branch-orders`.
Страница `/market-pvz/branch-orders` реализована (коммит `d1bebf6f645`). Три ленты с табами и счётчиками: приёмки (Эпик 5), выдачи (Эпик 6), возвраты (Эпик 7) — все через существующие `*ByBraname` query, объединённые через Promise.all. braname вводится вручную; auto-detect через `marketplace_whoami` подключится на следующем шаге Story 6.x+1.
![Пустое состояние: подсказка ввести ID КУ](/assets/new/marketplace/branch-chairman/branch-orders/01-empty-input.png)
![После ввода braname `krg` — 3 таба с счётчиками](/assets/new/marketplace/branch-chairman/branch-orders/02-loaded-tabs.png)
Лента **Заказы участка** даёт председателю общую картину всего, что происходит с Заказами на его ПВЗ. Это сводный обзор, более широкий, чем оператор видит в своих специализированных лентах.
@@ -6,7 +6,11 @@ tags:
# Кооперативные категории
!!!info "Реализовано — ожидается прогон harness"
Страница `/market/category-whitelist` реализована (коммит `50538b45d43`). Председатель видит whitelist разрешённых категорий с stat-карточками; пустой whitelist означает, что доступен весь глобальный каталог. Backend готов — `available-category-admin.resolver.ts` (@AuthRoles chairman). В MVP добавление через ручной ввод ID; tree-выбор через `marketplaceGetCategoryTree` подключится на следующем шаге Story 3.x. Скриншоты — после прогона `bin/shoot.mjs chairman/category-whitelist`.
Страница `/market/category-whitelist` реализована (коммит `50538b45d43`). Председатель видит whitelist разрешённых категорий с stat-карточками; пустой whitelist означает, что доступен весь глобальный каталог. Backend готов — `available-category-admin.resolver.ts` (@AuthRoles chairman). В MVP добавление через ручной ввод ID; tree-выбор через `marketplaceGetCategoryTree` подключится на следующем шаге Story 3.x.
![Whitelist категорий: stat-карточки и пустой список](/assets/new/marketplace/chairman/category-whitelist/01-overview.png)
![Диалог добавления категорий по ID](/assets/new/marketplace/chairman/category-whitelist/02-add-dialog.png)
Стол заказов работает с фиксированным набором из **10 кооперативных категорий**. Они едины для всей кооперативной сети, но каждый кооператив сам решает, **какие из них включены** в его Столе.
@@ -6,7 +6,11 @@ tags:
# Входящие заказы
!!!info "Реализовано — ожидается прогон harness"
Страница `/market/incoming-orders` реализована (коммит `69d3e79f36c`). Поставщик видит заказы где он `supplier` через канон `OrderCard role='offerer'` с фильтром по статусу. Backend `marketplaceListSupplierOrders` уже был DONE (read:to-self policy). Действия по акцепту партии — отдельно на `/market/supply-prep`. Polling 15s. Скриншоты — после прогона `bin/shoot.mjs offerer/incoming-orders`.
Страница `/market/incoming-orders` реализована (коммит `69d3e79f36c`). Поставщик видит заказы где он `supplier` через канон `OrderCard role='offerer'` с фильтром по статусу. Backend `marketplaceListSupplierOrders` уже был DONE (read:to-self policy). Действия по акцепту партии — отдельно на `/market/supply-prep`. Polling 15s.
![Лента входящих заказов поставщика с табами фильтра](/assets/new/marketplace/offerer/incoming-orders/01-overview.png)
![Фильтр «Ждут моего акцепта» — заказы в статусе ACCEPTED_PENDING_SUPPLIER](/assets/new/marketplace/offerer/incoming-orders/02-pending-filter.png)
Когда сводный заказ закрывается и партия фиксируется (статус **CONFIRMED**), все Заказы пайщиков из этой партии становятся **входящими** для поставщика. Они появляются в ленте «Входящие заказы».
@@ -6,7 +6,11 @@ tags:
# Мои предложения
!!!info "Реализовано — ожидается прогон harness"
Страница `/market/my-offers` реализована (коммит `69d3e79f36c`). Поставщик видит свои Offer'ы во всех 4 статусах (PENDING_MODERATION / ACTIVE / REJECTED / WITHDRAWN) через канон `CatalogOfferCard` с client-side фильтром и поиском. Для REJECTED — reject_reason под карточкой. Backend `marketplaceListMyOffers` уже был DONE. Polling 30s. Скриншоты — после прогона `bin/shoot.mjs offerer/my-offers`.
Страница `/market/my-offers` реализована (коммит `69d3e79f36c`). Поставщик видит свои Offer'ы во всех 4 статусах (PENDING_MODERATION / ACTIVE / REJECTED / WITHDRAWN) через канон `CatalogOfferCard` с client-side фильтром и поиском. Для REJECTED — reject_reason под карточкой. Backend `marketplaceListMyOffers` уже был DONE. Polling 30s.
![Каталог Offer'ов поставщика со stat-карточками и фильтром](/assets/new/marketplace/offerer/offers/01-overview.png)
![Фильтр «На модерации»](/assets/new/marketplace/offerer/offers/02-pending-filter.png)
Лента **Мои предложения** — рабочее место поставщика. Здесь видны все опубликованные Предложения с их статусами, текущим наполнением партий и историей циклов.
@@ -7,7 +7,11 @@ tags:
# L1 — Подключение ЦПП Marketplace кооперативом
!!!info "Реализовано — ожидается прогон harness"
Страница `/market/onboarding/coop-cpp` реализована (коммит `510ccf545bb`). Председатель видит chip-статус ЦПП (Подключено / Не подключено), карточку с реквизитами решения совета и кнопку «Принять ЦПП Marketplace». Backend Story 1.9 (`marketplaceCppStatus` + `marketplaceAcceptCpp`) полностью готов. В MVP — stub `accepted_by_board_decision_id`; полноценная повестка совета подключится в Эпике 8 (FR40). Скриншоты — после прогона `bin/shoot.mjs onboarding/coop-accept-cpp`.
Страница `/market/onboarding/coop-cpp` реализована (коммит `510ccf545bb`). Председатель видит chip-статус ЦПП (Подключено / Не подключено), карточку с реквизитами решения совета и кнопку «Принять ЦПП Marketplace». Backend Story 1.9 (`marketplaceCppStatus` + `marketplaceAcceptCpp`) полностью готов. В MVP — stub `accepted_by_board_decision_id`; полноценная повестка совета подключится в Эпике 8 (FR40).
![Статус расширения «Не подключено» + кнопка принятия](/assets/new/marketplace/onboarding/coop-accept-cpp/01-status.png)
![Диалог подтверждения принятия ЦПП Marketplace кооперативом](/assets/new/marketplace/onboarding/coop-accept-cpp/02-confirm-dialog.png)
Первый уровень онбординга — это **одноразовое решение совета о подключении** Целевой Потребительской Программы (ЦПП) «Стол заказов» к кооперативу. Без этого решения ни один пайщик не может оформить Заказ или опубликовать Предложение.
@@ -6,7 +6,9 @@ tags:
# L2 — Выбор ЦПП при вступлении в кооператив
!!!info "Реализовано — ожидается прогон harness"
Страница `/market/onboarding/member-cpp` реализована (коммит `147951356ab`). На странице — канон-виджет `OnboardingCPPGate` (UX-DR17) с пакетом ЦПП (оферта + Положение). Реальная подпись делается через core Registrator-мастер (`wallet::signagree`) — после клика «Перейти к подписанию» страница редиректит в мастер. Когда `requires_gate=false` — баннер «уже подключены» с переходом к каталогу. Скриншоты — после прогона `bin/shoot.mjs onboarding/member-pick-cpp`.
Страница `/market/onboarding/member-cpp` реализована (коммит `147951356ab`). На странице — канон-виджет `OnboardingCPPGate` (UX-DR17) с пакетом ЦПП (оферта + Положение). Реальная подпись делается через core Registrator-мастер (`wallet::signagree`) — после клика «Перейти к подписанию» страница редиректит в мастер. Когда `requires_gate=false` — баннер «уже подключены» с переходом к каталогу.
![Точка входа на подключение к Marketplace — gate ЦПП или баннер «уже подключены»](/assets/new/marketplace/onboarding/member-pick-cpp/01-gate-or-done.png)
Когда пайщик подаёт заявление о вступлении в кооператив, в мастере регистрации появляется блок «Целевые потребительские программы». Здесь пайщик отмечает программы, в которых хочет участвовать.
@@ -6,7 +6,9 @@ tags:
# Сводный заказ
!!!info "Реализовано — ожидается прогон harness"
Страница `/market/consolidated` реализована (коммит `e40b74fcf91`). Заказы пайщика-заказчика группируются по `cycle_id` (time_based / volume_based / open_subscription / individual) с суммарной стоимостью партии и общим этапом партии (минимальный активный по STAGE_RANK). Внутри партии — карточки `OrderCard role='orderer'`. Polling 15s. Скриншоты — после прогона `bin/shoot.mjs orderer/consolidated`.
Страница `/market/consolidated` реализована (коммит `e40b74fcf91`). Заказы пайщика-заказчика группируются по `cycle_id` (time_based / volume_based / open_subscription / individual) с суммарной стоимостью партии и общим этапом партии (минимальный активный по STAGE_RANK). Внутри партии — карточки `OrderCard role='orderer'`. Polling 15s.
![Empty-state: у пайщика ещё нет заказов](/assets/new/marketplace/orderer/consolidated/01-overview.png)
**Сводный заказ** — это виртуальная партия, в которую агрегируются все Заказы пайщиков по одному и тому же Предложению. Сводный заказ — основа кооперативной закупки: партия передаётся поставщику единым лотом, что даёт цену оптовой закупки.