Реестр заказов админа + докладка со склада в окне выдачи + фикс паевого на выдаче (598-50) #136
Closed
claude
wants to merge 66 commits from
feat/marketplace-admin-orders into feat/marketplace-process-registry
pull from: feat/marketplace-admin-orders
merge into: C9S:feat/marketplace-process-registry
C9S:main
C9S:marketplace2
C9S:dev
C9S:testnet
C9S:fix/598-51-membership-fee-and-type-cleanup
C9S:feat/capital-canon
C9S:feat/598-supplier-registry
C9S:feature/capital-cpp-private-data-templates
C9S:fix/soviet-install-validation
C9S:feat/ku-selforg
C9S:feat/membership-exit
C9S:fix/capital-share-onproject-event
C9S:ci/independent-env-deploy
C9S:fix/registration-pending-display
C9S:coopID
C9S:feat/expense-chassis-mvp
C9S:fix/zip-utf8-flag
C9S:feat/coopid-auth-ui
C9S:feat/coopid-7-signing-bridge
C9S:feat/coopid-12-recovery-account-from-confirm
C9S:feat/coopid-epic-9-metrics
C9S:feat/coopid-epic-6-access-rules-cleanup
C9S:feat/coopid-epic-12
C9S:feat/coopid-epic-11
C9S:feat/coopid-epic-7
C9S:feat/coopid-epic-9
C9S:feat/coopid-epic-6
C9S:feat/marketplace-process-registry
C9S:feat/marketplace-notifications-map
C9S:feat/marketplace-ku-economy
C9S:savanna
C9S:feat/apps-catalog-finish
C9S:feat/epic-13-billing-package-powerup
C9S:feat/coopid-epic-4
C9S:feat/coopid-epic-3
C9S:feat/blagorost-on-chassis
C9S:feat/coopid-epic-1
C9S:feat/marketplace-coop-stock
C9S:feat/marketplace-live-catalog
C9S:feat/coop-invest-blagorost
C9S:feat/ff-release-flow
C9S:fix/marketplace-offer-instance-not-template
C9S:fix/extension-config-lost-update
C9S:feature/C28-28-email-relay
C9S:feat/E16-onsite-sign-gate
C9S:feat/pwa-version-watch
C9S:fix/participants-registry-status-badges
C9S:feat/E16-coop-categories
C9S:fix/sanitize-blockchain-error-toast
C9S:fix/wallet-withdraw-no-phantom-payment
C9S:fix/agenda-program-offer-links
C9S:feat/notification-center-dc-v3
C9S:fix/chatcoop-livekit-room-name
C9S:feat/delete-inactive-participant
C9S:feat/registration-ledger2-suspense
C9S:feat/registration-refund
C9S:feat/registration-payment-dedup
C9S:perf/factory-parallel-fetch
C9S:feat/E16-sklad-rework
C9S:fix/decision-createproject-tsc
C9S:perf/factory-weasyprint-warm-pool
C9S:feat/E16-korzina-zakaz-agregat
C9S:fix/agenda-pending-new-question
C9S:feat/soviet-negative-consensus
C9S:feat/registration-payment-decline
C9S:feat/coop-standards-audit
C9S:parser2
C9S:feat/mkt-return-chairman-cosign
C9S:feat/registration-fsm
C9S:feat/pwa-reliable-update
C9S:parser2-block-time-and-version
C9S:fix/gorozhane-phantom-cleanup
C9S:fix/remove-bank-kpp
C9S:feat/E9-3b-sub-subscribe
C9S:feat/E9-9-approve-moderation
C9S:feat/E10-5-on-chain-watcher
C9S:feat/E10-4-install-pipeline
C9S:feat/E9-3b-ui-publish-package
C9S:feat/E1-tspp-docs-real-text
C9S:feat/E10-3b-dynamic-supergraph
C9S:apps-catalog
C9S:feat/E9-9-3-b-publish-mutation
C9S:feat/sig-v2-export
C9S:feat/E10-1-federation-subgraph
C9S:parser2-epic-4-forks
C9S:feat/decision-authorize-backend
C9S:feat/blagorost-program-expenses-ui
C9S:parser2-epic-6-canonical-storage
C9S:wip/pre-e16-desktop-docs
C9S:feat/E15-min-volume-per-ku
C9S:feat/blagorost-E2-E5-program-expenses
C9S:feat/epic-14-billing-notifications
C9S:blagorost
C9S:feat/E14-explicit-shipment
C9S:feat/marketplace-collective-supply
C9S:feat/blagorost-E1-contract
C9S:feat/C28-21-pg-signed-documents
C9S:provider-billing
C9S:fix/desktop-format-asset-errors
C9S:feat/marketplace-docs
C9S:feat/epic-12-billing-subscriptions
C9S:fix/min-soviet-members-3
C9S:parser2-epic-3-transport
C9S:feat/marketplace2-drop-blocked
C9S:worktree-design-wave1
C9S:feat/notif-mobile-canon
C9S:fix/vue-tsc-desktop
C9S:worktree-marketplace-docs-impl
C9S:feat/chatcoop-hide-matrix-room-id
C9S:feat/epic-8-coop-registry-provider
C9S:parser2-epic-2-idempotency
C9S:feat/chatcoop-secretary-rooms
C9S:feat/remove-l3-blocked
C9S:ci-trial-typecheck-2026-05-23
C9S:fix/controller-revert-transpileonly
C9S:chore/mongo-standalone-local
C9S:chore/ci-unify-release-workflows
C9S:feat/controller-swc-builder
C9S:feat/chatcoop-transcription-memo
C9S:fix/mono-base-ca-certificates
C9S:fix/wallet-withdraw-gateway-timing
C9S:feat/ledger2-burn-blocked-withdraw
C9S:fix/boot-tests-wallet-signagree-v2
C9S:chore/trustees-ownership
C9S:feat/capital-w-cap-gen-cooperative
C9S:chore/re-review-E5-apl-fail-fast
C9S:chore/re-review-E4-fail-fast-tx-hash
C9S:chore/re-review-E3-fix-withdraw-stub
C9S:chore/review-E3-vitrina-fixes
C9S:chore/review-E10-design-fixes
C9S:chore/review-E8-spisanie-fixes
C9S:chore/review-E7-vozvrat-fixes
C9S:chore/review-E6-vydacha-fixes
C9S:chore/review-E5-postavka-fixes
C9S:chore/review-E4-order-fixes
C9S:feat/epic0-onboarding-harness
C9S:chore/marketplace2-sync-dev-and-controller-di
C9S:feat/E11-stol-zakazov-frontend-and-tests
C9S:feat/E11-stol-zakazov-final
C9S:feat/capital-artifacts-access
C9S:fix/floor-asset-display
C9S:feat/epic-9-warehouse-reporting
C9S:feat/598-11-epic-8-writeoff
C9S:feat/E7-garantiynyy-vozvrat
C9S:design
C9S:fix/capital-revert-394-generation-convert-refs
C9S:fix/is-unioned-zod-string-parse
C9S:fix/capital-rename-generation-convert-to-money-invest
C9S:feat/E6-vydacha-payshchiku
C9S:worktree-remove-1081-1082-rename-1080
C9S:feat/init-by-server-from-provider
C9S:feat/E5-postavka-priemka
C9S:feat/E11-techdebt-L12-split-payout
C9S:feat/E4-zakaz
C9S:gh-pages
C9S:feat/E3-vitrina-canon
C9S:feat/E11-S1-ledger2-marketplace-ops
C9S:file-storage
C9S:feat/1-10-marketplace-registration-offer-status
C9S:feat/1-9-marketplace-board-acceptance
C9S:feat/1-8-marketplace-access-matrix
C9S:feat/1-7-marketplace-template-registry
C9S:feat/1-6-marketplace-role-guard
C9S:feat/1-5-marketplace-member-wallet
C9S:feat/1-4-marketplace-onboarding-gate
C9S:feat/1-3-marketplace-access-by-membership
C9S:feat/1-1-install-from-catalog
C9S:ci/lock-tags-only
C9S:onboarding
C9S:reports
C9S:ledger3
C9S:graph-standarts
C9S:feat/ledger-double-entry
C9S:feat/docs-enrichment
C9S:feat/documentation
C9S:feat/marketplace-orders
C9S:feat/interops-extension-system
C9S:cursor/development-environment-setup-2882
C9S:feat/unified-test-pipeline
C9S:fix/security-vulnerabilities
C9S:audio-stream
C9S:project-authorization-on-create
C9S:refactoring
C9S:capital
C9S:element
C9S:ledger
C9S:marketplace
C9S:notifications2
C9S:notifications
C9S:document2
C9S:TSK-900
C9S:TSK-878
C9S:dacom-dark-sun/sprint-4
C9S:uniconstructor/sprint-5
No Reviewers
Labels
No items
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Marketplace
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: C9S/mono#136
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "feat/marketplace-admin-orders"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Стекнут поверх feat/marketplace-process-registry (PR #135).
Что сделано
Стол администратора → новая страница «Реестр заказов» (Order:read:all, видна председателю и совету; ссылок на стол бухгалтера нет):
Backend: marketplaceListAllOrders (Order:read:all) — переиспользует существующий runListQuery с coopname-only фильтром. SDK-запрос + полный codegen.
DRY: блок «Документы + Операции + Проводки» вынесен в общий виджет ProcessDetailCard и переиспользован на обеих страницах; helper'ы цвета/метки процесса — в shared/lib/ledger2. Навигация к реестрам операций/проводок опциональна (бухгалтер → его реестры; администратор → копирование).
Проверки
Страница списания переверстана по канону: вкладки PageTabs «Кандидаты / На повестке / Архив» вместо россыпи карточек и списков; ленты проектов — канон- таблица .table-wrap с BaseBadge-статусами и EmptyState; CTA только на вкладке кандидатов. Документ Заявления 1108: сумма в формате «1 020,00 RUB» (2 знака, разделители), из преамбулы убрано «по итогам цикла», под заголовком добавлен город «г. {{ coop.city }}». Те же суммы 2-знака применены к Записке 1111. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Рендерер BaseDocument навязывает в Shadow DOM white-space: pre-wrap и th{width:30% !important}; пятиколоночный thead давал 5×30%=150% и таблица уезжала вправо («Причина» схлопывалась в столбик), а кастомные margin'ы вместо канонных переносов давали огромные вертикальные зазоры. Привёл оба документа 1-в-1 к style-блоку и структуре сиблингов (эталон 1106): addressee справа, заголовок по центру, город под подзаголовком справа; список позиций — многоколоночная таблица без <th> (шапка через <td><b>), суммы 2 знака.Документы 1108/1111: убран white-space:pre-wrap (рендерил переносы строк исходника и вместе с дефолтными margin'ами <p> удваивал разрывы — документ разъезжался по вертикали); спейсинг переведён на явные margin'ы по эталону уплотнённого 1110; '.digital-document { white-space: normal }' перебивает форсированный pre-wrap из Shadow DOM рендерера. Подписант 1108 — 'от Председателя Совета'. Диалог подписи: документ рендерится канон-компонентом DocumentHtmlReader в листе фиксированной ширины (на мобильном — во всю), без 60vh-обрубка. Детальная страница: журнал решений переведён на канон ActivityTimeline, убран служебный on-chain идентификатор. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>В повестке совета документ рендерит BaseDocument: он прогоняет html через sanitizeHtml (ВЫРЕЗАЕТ <style> документа) и форсит в Shadow DOM .digital-document{white-space:pre-wrap}. Прежняя вёрстка 1108/1111 полагалась на <style> с классами (.addressee/.title-block + margin'ы) — всё вырезалось, оставался pre-wrap → огромные отступы + выравнивание влево. Переверстано 1-в-1 по канон-документу 1106 (он корректен и в повестке, и в предпросмотре): выравнивание инлайн (style=text-align), вертикальный ритм — пустыми строками под pre-wrap, плотные абзацы — инлайн margin:0px, центр-заголовок — h1.header (shadowStyles центрирует .header). Добавлена колонка «Ед. изм.» (ед.) — у инвентаря нет поля единицы, склад считается в дискретных единицах, поэтому константа. Предпросмотр (SubmitToCouncilDialog): рендер html как есть, без класса .statement (тянул глобальный h1{line-height:4.5rem}) и без нормализатора, ломавшего pre-wrap — теперь идентичен повестке. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Колонка marketplace_writeoff_proposal.status была varchar(16), а статус PENDING_CONFIRMATION = 20 символов: callback совета onmktwoauth отлавливался, но UPDATE статуса молча падал «value too long» → проект навсегда застревал в ON_AGENDA (решение совета «не отлавливалось»). Расширил до 32. На колонке индекс (coopname,status), поэтому synchronize не смог изменить длину сам (recreate → ADD NOT NULL на непустой таблице) — расширение выполнено ALTER COLUMN TYPE на месте. Единицы измерения в Заявлении (1108) и Служебной записке (1111): вместо зашитой «ед.» бэкенд резолвит реальную единицу товара по партиям позиции (inventory → заказ/published_offer → offer.unit_of_measure → шт./кг/л/упак.), прокидывает в документ; шаблоны рендерят {{ it.unit }}. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>- BaseDocument.shadowStyles: .digital-document h1 { text-align:center } — заголовок (ПРОТОКОЛ №, СЛУЖЕБНАЯ ЗАПИСКА и пр.) центрируется на слое рендера, как в других документах; инлайн-стили выживают санитайзер, а блочные правила <style> — нет, поэтому правка шаблона существующий подписанный документ не центрировала - DocumentViewerDialog: убрал лишнюю обёртку-лист (ширину никто не просил, проблема была только в выравнивании заголовка) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Поставщик отклонял входящий заказ (decline=erase строки в chain-RAM), но заказ исчезал и тут же возвращался в «Ждут акцепта», а повторный decline/accept падал «не найден по хэшу». Причина: парсер на erase шлёт present=false с последним живым value строки ('active'); у терминального CANCELLED_BY_SUPPLIER forward-rank=undefined, поэтому updateFromBlockchain перетирал backend-статус обратно в ACTIVE. Guard: не менять статус, если заказ уже в терминальной отмене/возврате (mapper выдаёт только живые on-chain статусы, cancelled — KNOWN_UNMAPPED). +2 регрессионных теста. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Реестр заказов кооператива на столе администратора (+ виджет детализации процесса)to Реестр заказов админа + докладка со склада в окне выдачи + фикс паевого на выдаче (598-50)Докладка со склада в окне выдачи + фикс паевого (598-50)
Поверх реестра заказов в этой же ветке добавлена фича «это не пришло — возьмите вот это» и устранено нарушение инварианта паевого на выдаче.
Контракт (
2d01dc1,ef8f8aa,214a921):signiss2, ветка «факт больше заказа»: убрана авто-конвертация паевого (o.mkt.conv) и довзнос с паевого (o.mkt.fee). Доплата тела (o.mkt.lockm) и членский взнос-комиссия КУ (o.mkt.lockmf) — строго сw.mkt.member; при нехватке отказ. Паевой→членский остаётся только по Заявлению о конвертации (convert).p.mkt.supply.standard.yamlподровнян под новую модель.Backend + SDK (
91d5f33):getAcceptSignablePayloadsотдаётmember_amount(доплата с членского) рядом сconvert_amount(дефицит → конвертация с паевого). Сумма обеих = полная стоимость докладки. Прокинуто через DTO/резолвер/SDK + codegen.Frontend инкремент 1 (
b38773c):StockPickDialog(выбор опубликованного остатка КУ) → секция «Доложено со склада» в том же акте + сумма; при «Подписать и открыть выдачу» доложенное уходит пайщику (createStockProposal).Осталось: инкремент 2 — сторона пайщика в гейте подписи (две суммы «с членского / с паевого» + один экран/подпись), под визуальную проверку.
Докладка со склада — переработка под «акт + одна подпись» (вариант Б1)
Переработан флоу докладки/выдачи со склада кооператива под требование: пайщик видит готовый АКТ (пункты имущества, кол-во, цена) и одну кнопку «Подписать» (+ «Отказаться»), без отдельного «Принять предложение».
Модель подписей (контракт не трогали, кроме ранее закоммиченного фикса паевого):
Слои: контракт — без нового экшена (используется существующий stockorder); backend (issuance/stock-proposal сервисы, DTO, резолвер: новый query
marketplaceStockIssuancePayloads, мутацияmarketplaceFinalizeStockIssuanceвместоmarketplaceAcceptStockProposal); SDK+codegen; desktop (IssueActOpenDialog подписывает signiss1; гейт — карточка-акт с «Подписать»).generate-schema/client + SDK typecheck + ESLint — зелёные. Полный e2e — в CI.
Содержимое влито в marketplace2 напрямую через git merge (не через merge-кнопку Gitea) — коммиты
4f58871322и предыдущие в цепочке merge-коммитов marketplace2. Закрываю как поглощённый.Pull request closed