Эпик 9 «Склад и отчётность кооператива» MVP Стола заказов (598-12) (#400)
Publish Docs / build-and-publish-docs (push) Failing after 11m38s

* [598-12][@ant] chore: process-hash-locator Phase B готов к активации marketplace

Эпик 9 / Story 9.3: обновлён комментарий к ключам p.mkt.supply / p.mkt.return /
p.mkt.wroff. Phase A через OPERATION_CODE_TO_PROCESS_TYPE уже связывает все
o.mkt.* с тремя process_type из cooptypes; Phase B ждёт появления entity-
таблицы marketplace::requests с полем request_hash (Locked Decision L10).
Заглушка [] остаётся корректной — Phase B наполняется одной правкой при
готовности C++.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] feat: operator-стол «Склад моего КУ» — Story 9.1

Лента marketplace_inventory отфильтрована по braname текущего КУ;
per-row статусы (LABELED / ISSUED / RETURNED / WRITTEN_OFF) через
mp-status-chip, фильтры по статусу/orderer, summary count by status
(activeOnly + writtenOff). Сортировка по labeled_at DESC по умолчанию.

Backend-доступ ограничивается guard'ом Warehouse: ['read:own-KU'] —
оператор видит только свой участок. Real-time подписки AR37 SDK
платформы подключаются отдельным шагом эпика (на MVP — refresh кнопкой).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] feat: admin-стол «Сводный склад» через WarehouseSummaryGrid — Story 9.2

Две вкладки admin-стола (UX-DR16 + DR31, mp-role-admin):
- «Сводный склад» — агрегация marketplace_inventory по ku × sku через
  canon-виджет WarehouseSummaryGrid (incoming = LABELED + RETURNED, outgoing
  = ISSUED, balance — транзитный остаток без ISSUED);
- «Поток заказов и поставок» — sums маркировок / выдач / возвратов /
  списаний + топ-10 SKU по обороту. Графики динамики (orders_per_day,
  supplies_per_day, writeoffs_per_month) подключаются по AR37 SDK-
  подпискам платформы отдельным шагом.

Backend-доступ Warehouse: ['read:all'] (chairman + member).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] feat: SDK обёртки processes + страница «История операций» — Story 9.5

SDK:
- selectors/processes/processViewSelector + processSummarySelector
  (полное покрытие ProcessView / ProcessSummary / Pagination)
- queries/processes/getProcess + listProcesses
- queries/index.ts: export * as Processes

Desktop pages/Marketplace/OperationsHistory:
- лента всех процессов с фильтрами по coopname / processType / username;
- разворот через стандартный core processRegistry.getProcess(process_hash)
  показывает actions, delta_history и связанные documents;
- кнопка «Скачать JSON» для аудиторской выгрузки конкретного процесса
  (AR36, L13 pull-модель).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] feat: UI-stub «Экосистема кооперативов» — Story 9.4

Раздел admin-стола под межкооперативную торговлю Phase 2 (NFR-Sc2 / AR18).
На MVP — заглушка с информацией о текущем кооперативе и явным сообщением
что список других controller'ов с marketplace появится после подключения
платформенного ecosystem_registry. Backend-регистрация controller через
core-API в отдельном Эпике 9 + техдолге platform (см. issue эпика).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] feat: маршруты market workspace под Эпик 9

Регистрирует 4 новые страницы Эпика 9 в desktop/extensions/market/install:
- market-pvz/warehouse — Story 9.1 «Склад моего КУ» (operator-стол КУ);
- market/warehouse-summary — Story 9.2 «Сводный склад» (admin-стол);
- market/history — Story 9.5 «История операций» (admin-стол);
- market/ecosystem — Story 9.4 «Экосистема» (admin-стол, MVP-stub).

Доступы соответствуют access-matrix marketplace: warehouse-стол КУ —
только chairman; сводный склад / история / экосистема — chairman +
member (board_readonly).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] chore: регенерация schema.gql / zeus / SDK Zeus + fix DTO writeoff

Source-of-truth GraphQL-схема была устаревшая после Эпика 8 — DTO
`MarketplaceWriteoffProposalItemDTO` использовал `?: string | null` без
explicit-`@Field(() => String)`, и Nest GraphQL падал при
`generate-schema` ⇒ Zeus в SDK не получил writeoff queries и Processes
из Story 9.5.

- DTO: пять nullable string-полей writeoff'а получили `@Field(() => String, { nullable: true })`.
- schema.gql регенерирован (`pnpm run generate-schema`).
- zeus обновлён в controller/zeus и sdk/src/zeus (`pnpm run generate-client`).
- В Zeus теперь видны: ProcessView / ProcessSummary / ProcessesFilter,
  MarketplaceWriteoffProposal / PaginatedMarketplaceWriteoffProposals и т.п.

После этого `cd components/sdk && pnpm run build` собирается без ошибок;
desktop потребители (AdminWriteoffs API + новая страница OperationsHistory)
получают типизированный доступ к Zeus.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] fix: enum-значения статусов + убрать as const в bucket аккумуляторе

После регенерации Zeus `MarketplaceInventoryStatus` стал nominal enum
вместо string-literal union — статусы передаются через
`Zeus.MarketplaceInventoryStatus.LABELED|ISSUED|RETURNED|WRITTEN_OFF`,
а не голыми строками.

В `AdminWarehouseSummaryPage.warehouseRows` убран лишний `as const` на
дефолтном bucket'е — он делал поля `in/out/balance` readonly и ломал
накопление через `b.in += qty`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] feat: Phase B locator p.mkt.* — реальные ссылки на marketplace::orders/retrequests/wroffprops

Story 9.3. Контракт marketplace опубликован в Эпике 11; все три marketplace-процесса
(supply / return / writeoff) уже имеют свои entity-таблицы с одноимённым
checksum256-полем `hash`. Pre-existing заглушка `[]` с упоминанием Locked Decision L10
снята: теперь Phase B end-to-end отдаёт текущий снэпшот процесса из blockchain_deltas.

  - p.mkt.supply -> marketplace::orders.hash
  - p.mkt.return -> marketplace::retrequests.hash
  - p.mkt.wroff  -> marketplace::wroffprops.hash

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] refactor: убрать дубль «Истории операций marketplace» — стол бухгалтера единая точка

Старая страница `pages/Marketplace/OperationsHistory` повторяла стол бухгалтера
(`extensions/reports`) — actions / delta_history / documents видны там в общем
реестре операций. По ревью к PR #400 удаляем полностью; вместо неё marketplace
будет инжектировать бизнес-описание процесса в стол бухгалтера через фабрику
(см. следующие коммиты).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] feat: фабрика processInfoFactory и три marketplace info-widget'а — слот в стол бухгалтера

Аналог DecisionFactory, но для бизнес-описания процесса в реестре операций
стола бухгалтера. Каждое расширение регистрирует свой компонент по `process_type`;
стол бухгалтера рендерит его в развёрнутой строке после проводок и движений
по кошелькам. Дубля «истории» больше нет.

  - shared/lib/process-info-factory + types: реестр + getInfoComponent
  - widgets/Marketplace/ProcessSupplyInfoWidget — заказчик, поставщик, КУ,
    состояние, единицы; deep-link «открыть заказ на столе ПВЗ»
  - widgets/Marketplace/ProcessReturnInfoWidget — заказчик, состояние,
    исходный заказ, причина; deep-link «открыть заявление на столе ПВЗ»
  - widgets/Marketplace/ProcessWriteoffInfoWidget — источник проекта (cron/manual),
    состояние, цикл, сумма; deep-link «открыть проект на столе списания»
  - extensions/market/app/extensions.ts — регистрация по `LEDGER2_PROCESS_REGISTRY.name`
    (SUPPLY/RETURN/WRITEOFF), без string-литералов в коде
  - extensions/reports/pages/OperationsPage — слот «Содержание процесса» в развороте

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] style: страницы Эпика 9 на <template lang="pug"> + русские лейблы — снять техжаргон из UI

Привожу страницы к канону стола заказов: PUG-шаблоны, бизнес-словарь
в подписях/фильтрах (Состояние / Кооперативный участок / Заказчик),
никаких `p.mkt.*` или raw-имён enum-значений в видимой части. Внутри —
строгая типизация через `Zeus.MarketplaceInventoryStatus`, switch на
status-полях больше не сравнивается со строками.

  - OperatorOwnWarehouse (Story 9.1) — PUG, enum-fix, человеческие лейблы
  - AdminWarehouseSummary (Story 9.2) — PUG, enum-fix, человеческие лейблы
  - EcosystemRegistry (Story 9.4) — PUG

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] refactor: вынести запрос процесса в entities/Process + чистая типизация в info-widget'ах

По канону Ledger2: api/store/types. Widget'ы больше не вызывают client.Query
и не делают cast'ов вида `as Record<string, unknown>` — снэпшот приходит
строго типизированным `IProcessSnapshot` из SDK через `useProcessStore`.

  - entities/Process/types — IProcessView / IProcessSnapshot / IProcessDelta
    выведены из Queries.Processes.GetProcess.IOutput
  - entities/Process/api — getProcess + pickLatestSnapshot (единственная
    точка приведения JSON-скаляра)
  - entities/Process/model — Pinia store с loadProcess / loadLatestSnapshot
  - widgets/Marketplace/Process{Supply,Return,Writeoff}InfoWidget — используют
    processStore, типы из entities/Process

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] style: убрать пользовательский техжаргон со сводного склада и экосистемы

  - AdminWarehouseSummary: удалить сноску про SDK-подписки и формулу остатка —
    пользователю кооператива это не нужно
  - EcosystemRegistry: оставить короткую фразу «включится позже», без режима
    просмотра и упоминаний платформенного реестра

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [598-12][@ant] docs: зафиксировать паттерн фабрик инжекции в стол совета и стол бухгалтера

Новый документ `components/desktop/docs/extension-factories.md`:
- общий принцип «общие столы единственная точка просмотра, расширения
  инжектируют бизнес-описание»
- DecisionFactory: контракт, пример регистрации (capital → стол совета)
- ProcessInfoFactory: контракт, пример регистрации (market → стол
  бухгалтера) с использованием LEDGER2_PROCESS_REGISTRY вместо
  строковых литералов
- чек-лист для нового расширения (виджет/PUG → app/extensions.ts →
  install.ts → реестр в cooptypes)
- что делать НЕЛЬЗЯ: повторять у себя реестры операций/проводок/повестки
  и пихать техжаргон в infoComponent

В README desktop — ссылка из раздела «Система расширений».

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: ant <ant@noreply.local>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alex Ant
2026-05-18 22:09:52 +05:00
committed by GitHub
parent 80ebdb4a73
commit 8326ddeb4e
42 changed files with 2628 additions and 27 deletions
+167
View File
@@ -7588,6 +7588,12 @@ type MarketplaceCreateShipmentResult {
shipments: [MarketplaceShipment!]!
}
input MarketplaceCreateWriteoffDraftInput {
"""Начало расчётного цикла, если отличается от текущего момента."""
cycle_started_at: String
items: [MarketplaceWriteoffItemInput!]!
}
type MarketplaceCurrentMember {
core_roles: [String!]!
marketplace_roles: [String!]!
@@ -8032,6 +8038,10 @@ input MarketplaceListShipmentsInput {
statuses: [MarketplaceShipmentStatus!]
}
input MarketplaceListWriteoffProposalsInput {
statuses: [MarketplaceWriteoffProposalStatus!]
}
type MarketplaceMemberWallet {
coopname: String!
username: String!
@@ -9078,6 +9088,15 @@ input MarketplaceSignAplReceptionInput {
signed_documents: [MarketplaceAplReceptionSignedDocumentInput!]!
}
input MarketplaceSubmitWriteoffDraftInput {
draft_id: String!
"""
Подписанное председателем Заявление о списании скоропорта (registry_id=1106).
"""
signed_statement: SignedDigitalDocumentInput!
}
"""Результат индивидуального приёма или отклонения заказа поставщиком."""
type MarketplaceSupplierOrderActionResult {
"""Заказ после изменения статуса."""
@@ -9113,6 +9132,11 @@ input MarketplaceUpdateOfferInput {
warranty_days: Int
}
input MarketplaceUpdateWriteoffDraftInput {
id: String!
items: [MarketplaceWriteoffItemInput!]!
}
type MarketplaceVitrine {
"""eosio::name кооператива-владельца витрины"""
coopname: String!
@@ -9179,6 +9203,105 @@ input MarketplaceWithdrawOfferInput {
id: String!
}
type MarketplaceWriteoffDecisionEntry {
action: String!
actor: String!
at: String!
}
input MarketplaceWriteoffItemInput {
"""Сумма списания в формате числа с 4 знаками после запятой."""
amount: String!
asset_title: String!
braname: String!
inventory_id: String
quantity: String!
reason: String!
}
type MarketplaceWriteoffProposal {
authorized_at: String
coopname: String!
created_at: String!
cycle_started_at: String!
"""Аккаунт, принявший финальное решение."""
decided_by_account: String
decision_id: Int
decision_log: [MarketplaceWriteoffDecisionEntry!]!
executed_at: String
"""Идентификатор проекта в системе кооператива."""
id: String!
items: [MarketplaceWriteoffProposalItem!]!
"""
Канонический хеш проекта, используется как process_hash on-chain (wroffprops, soviet.decisions).
"""
proposal_hash: String!
"""Аккаунт инициатора проекта (председатель / админ)."""
proposed_by_account: String
"""Причина отказа совета (если REJECTED)."""
reject_reason: String
rejected_at: String
status: MarketplaceWriteoffProposalStatus!
submitted_at: String
"""Σ сумм всех позиций (форматированный asset, 4 знака)."""
total_amount: String!
trigger: MarketplaceWriteoffProposalTrigger!
updated_at: String!
}
type MarketplaceWriteoffProposalItem {
"""Сумма списания (4 знака после запятой, валюта кооператива)."""
amount: String!
"""Наименование позиции или артикул из карточки имущества."""
asset_title: String!
"""Кооперативный участок (склад) — источник позиции к списанию."""
braname: String!
"""Признак того, что позиция уже исполнена через execwroff."""
executed: Boolean!
"""Идентификатор инвентарной позиции, если известна."""
inventory_id: String
"""Количество единиц к списанию."""
quantity: String!
"""Причина списания (срок годности, повреждение и т.п.)."""
reason: String!
}
"""
Состояние проекта решения совета о списании скоропорта на пути от черновика до итогового списания.
"""
enum MarketplaceWriteoffProposalStatus {
AUTHORIZED
DRAFT
EXECUTED
EXECUTING
ON_AGENDA
REJECTED
}
"""
Источник проекта списания: автоматический ежемесячный крон или ручное создание.
"""
enum MarketplaceWriteoffProposalTrigger {
CRON
MANUAL
}
input MarketplaceWriteoffStatementSignablePayloadInput {
draft_id: String!
}
type MatrixAccountStatusResponseDTO {
hasAccount: Boolean!
iframeUrl: String
@@ -10444,6 +10567,9 @@ type Mutation {
"""
marketplaceCancelOrder(input: MarketplaceCancelOrderInput!): MarketplaceCancelOrderResult!
"""Удалить черновик. Доступно только пока проект в статусе DRAFT."""
marketplaceCancelWriteoffDraft(id: String!): Boolean!
"""
Очистить все доступные категории (сделать доступными все)
@@ -10479,6 +10605,11 @@ type Mutation {
"""
marketplaceCreateShipment(data: MarketplaceCreateShipmentInput!): MarketplaceCreateShipmentResult!
"""
Создаёт ручной черновик проекта списания. На кооператив может быть только один открытый черновик и один проект, отправленный в совет.
"""
marketplaceCreateWriteoffDraft(data: MarketplaceCreateWriteoffDraftInput!): MarketplaceWriteoffProposal!
"""
Поставщик отклоняет сводную заявку — все заказы пакета отменяются, средства разблокируются.
"""
@@ -10577,6 +10708,11 @@ type Mutation {
"""
marketplaceSignAplReceptionAsSupplier(data: MarketplaceSignAplReceptionInput!): MarketplaceAplReceptionResult!
"""
Отправить черновик в совет. Принимает подписанное председателем Заявление 1106. После успешного приёма выполняются propwroff и soviet::createagenda(mktwroff).
"""
marketplaceSubmitWriteoffDraft(data: MarketplaceSubmitWriteoffDraftInput!): MarketplaceWriteoffProposal!
"""
Поставщик запускает поставку по предложению с открытой подпиской: формируется сводная заявка, заказы в её пуле принимаются.
"""
@@ -10585,6 +10721,9 @@ type Mutation {
"""Поставщик правит свой Offer — статус сбрасывается в PENDING_MODERATION"""
marketplaceUpdateOffer(input: MarketplaceUpdateOfferInput!): MarketplaceOffer!
"""Изменить состав черновика — добавить, удалить или поправить позиции."""
marketplaceUpdateWriteoffDraft(data: MarketplaceUpdateWriteoffDraftInput!): MarketplaceWriteoffProposal!
"""Поставщик снимает свой Offer (статус → WITHDRAWN)"""
marketplaceWithdrawOffer(input: MarketplaceWithdrawOfferInput!): MarketplaceOffer!
@@ -11263,6 +11402,20 @@ type PaginatedGatewayPaymentsPaginationResult {
totalPages: Int!
}
type PaginatedMarketplaceWriteoffProposals {
"""Текущая страница"""
currentPage: Int!
"""Элементы текущей страницы"""
items: [MarketplaceWriteoffProposal!]!
"""Общее количество элементов"""
totalCount: Int!
"""Общее количество страниц"""
totalPages: Int!
}
input PaginationInput {
"""Количество элементов на странице"""
limit: Int! = 10
@@ -13033,6 +13186,9 @@ type Query {
"""Список пайщиков-поставщиков, допущенных к публикации оферт"""
marketplaceListWhitelist: [MarketplaceWhitelistEntry!]!
"""Лента всех проектов списания кооператива с фильтром по статусу."""
marketplaceListWriteoffProposals(data: MarketplaceListWriteoffProposalsInput!, options: PaginationInput): PaginatedMarketplaceWriteoffProposals!
"""
Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member
"""
@@ -13043,6 +13199,9 @@ type Query {
"""
marketplaceOnboardingState: MarketplaceOnboardingState!
"""Открытый черновик проекта списания (если есть). Один на кооператив."""
marketplaceOpenWriteoffDraft: MarketplaceWriteoffProposal
"""
Статус видимости оферты Стола заказов в core registration-flow (платформенный AgreementRegistry)
"""
@@ -13074,6 +13233,14 @@ type Query {
"""Контекст пайщика для Стола заказов: core_roles + marketplace_roles"""
marketplaceWhoAmI: MarketplaceCurrentMember!
"""Детали одного проекта списания: items, decision_log, протокол."""
marketplaceWriteoffProposal(id: String!): MarketplaceWriteoffProposal!
"""
Превью Заявления о списании скоропорта (registry 1106) для подписания председателем.
"""
marketplaceWriteoffStatementSignablePayload(data: MarketplaceWriteoffStatementSignablePayloadInput!): GeneratedDocument!
"""
Получение документов кооператива для синхронизации с 1С. Требует секретный ключ в заголовке x-onecoop-secret-key.
"""
@@ -112,24 +112,18 @@ export const PROCESS_HASH_LOCATOR: Readonly<Record<string, HashLocation[]>> = Ob
// Сущностная таблица — `capital::prgwithdraws.withdraw_hash`.
'p.cap.wthcap': [{ code: 'capital', table: 'prgwithdraws', field: 'withdraw_hash' }],
// marketplace — членская модель «Стола заказов» (refactor 2026-05-11).
// Старый p.mkt.reqst (клиринговая модель, таблица marketplace::requests)
// удалён вместе с o.mkt.supply/recv. Новые три процесса (p.mkt.supply /
// p.mkt.return / p.mkt.wroff) пока без entity-таблиц: реализация
// контракта marketplace под членскую модель ещё не написана, в C++ нет
// соответствующих вызовов ledger2::apply. Заглушка [] корректна для
// текущего состояния (контроллер не получит operation_codes, требующие
// этих locator'ов).
//
// Status (Story 1.1, 2026-05-14): расширение `market` устанавливается из
// Каталога приложений; ключи `p.mkt.*` в Phase B готовы к активации.
// Реальные `{code, table, field}` подставляются в Story 4.1 при создании
// backend-таблицы консолидированных заявок (Locked Decision L10) — поле
// `request_hash` (а не `order_hash`, чтобы не путать с `offer_hash` в
// orderoffer-actions).
'p.mkt.supply': [],
'p.mkt.return': [],
'p.mkt.wroff': [],
// marketplace — членская модель «Стола заказов». Три entity-таблицы из
// contracts/cpp/lib/domain/table_marketplace_*.hpp хранят сами процессы:
// - `orders.hash` — поставка имущества (заказ через каталог).
// - `retrequests.hash` — гарантийный возврат имущества.
// - `wroffprops.hash` — проект решения совета о списании скоропорта.
// Имя поля — `hash` (а не `order_hash`/`request_hash`); все три таблицы
// используют один и тот же `checksum256 hash` как первичный
// process-якорь. Через них Phase B resolution в blockchain_deltas
// отдаёт current state процесса вместе с Phase-A экшенами.
'p.mkt.supply': [{ code: 'marketplace', table: 'orders', field: 'hash' }],
'p.mkt.return': [{ code: 'marketplace', table: 'retrequests', field: 'hash' }],
'p.mkt.wroff': [{ code: 'marketplace', table: 'wroffprops', field: 'hash' }],
// p.sov.axncnv — одноактовый процесс: данные из blockchain_actions +
// документ statement (DocumentFieldDetector).
@@ -41,7 +41,10 @@ export class MarketplaceWriteoffProposalItemDTO {
amount!: string;
@Field({ description: 'Причина списания (срок годности, повреждение и т.п.).' })
reason!: string;
@Field({ nullable: true, description: 'Идентификатор инвентарной позиции, если известна.' })
@Field(() => String, {
nullable: true,
description: 'Идентификатор инвентарной позиции, если известна.',
})
inventory_id?: string | null;
@Field({ description: 'Признак того, что позиция уже исполнена через execwroff.' })
executed!: boolean;
@@ -76,25 +79,34 @@ export class MarketplaceWriteoffProposalDTO {
proposal_hash!: string;
@Field(() => Int, { nullable: true })
decision_id?: number | null;
@Field({ nullable: true, description: 'Аккаунт инициатора проекта (председатель / админ).' })
@Field(() => String, {
nullable: true,
description: 'Аккаунт инициатора проекта (председатель / админ).',
})
proposed_by_account?: string | null;
@Field({ nullable: true, description: 'Аккаунт, принявший финальное решение.' })
@Field(() => String, {
nullable: true,
description: 'Аккаунт, принявший финальное решение.',
})
decided_by_account?: string | null;
@Field(() => [MarketplaceWriteoffProposalItemDTO])
items!: MarketplaceWriteoffProposalItemDTO[];
@Field({ description: 'Σ сумм всех позиций (форматированный asset, 4 знака).' })
total_amount!: string;
@Field({ nullable: true, description: 'Причина отказа совета (если REJECTED).' })
@Field(() => String, {
nullable: true,
description: 'Причина отказа совета (если REJECTED).',
})
reject_reason?: string | null;
@Field(() => [MarketplaceWriteoffDecisionEntryDTO])
decision_log!: MarketplaceWriteoffDecisionEntryDTO[];
@Field({ nullable: true })
@Field(() => String, { nullable: true })
submitted_at?: string | null;
@Field({ nullable: true })
@Field(() => String, { nullable: true })
authorized_at?: string | null;
@Field({ nullable: true })
@Field(() => String, { nullable: true })
executed_at?: string | null;
@Field({ nullable: true })
@Field(() => String, { nullable: true })
rejected_at?: string | null;
@Field()
created_at!: string;
+91
View File
@@ -686,6 +686,9 @@ export const AllTypesProps: Record<string,any> = {
MarketplaceCreateShipmentInput:{
groups:"MarketplaceShipmentGroupInput"
},
MarketplaceCreateWriteoffDraftInput:{
items:"MarketplaceWriteoffItemInput"
},
MarketplaceDeclineConsolidatedRequestInput:{
},
@@ -752,6 +755,9 @@ export const AllTypesProps: Record<string,any> = {
MarketplaceListShipmentsInput:{
statuses:"MarketplaceShipmentStatus"
},
MarketplaceListWriteoffProposalsInput:{
statuses:"MarketplaceWriteoffProposalStatus"
},
MarketplaceOpenIssuanceInput:{
signed_document:"MarketplaceIssueActSignedDocumentInput"
},
@@ -803,14 +809,28 @@ export const AllTypesProps: Record<string,any> = {
MarketplaceSignAplReceptionInput:{
signed_documents:"MarketplaceAplReceptionSignedDocumentInput"
},
MarketplaceSubmitWriteoffDraftInput:{
signed_statement:"SignedDigitalDocumentInput"
},
MarketplaceTriggerOpenSubscriptionInput:{
},
MarketplaceUpdateOfferInput:{
barcode_strategy:"MarketplaceBarcodeStrategy"
},
MarketplaceUpdateWriteoffDraftInput:{
items:"MarketplaceWriteoffItemInput"
},
MarketplaceWithdrawOfferInput:{
},
MarketplaceWriteoffItemInput:{
},
MarketplaceWriteoffProposalStatus: "enum" as const,
MarketplaceWriteoffProposalTrigger: "enum" as const,
MarketplaceWriteoffStatementSignablePayloadInput:{
},
MoveCapitalIssueToComponentInput:{
@@ -1294,6 +1314,9 @@ export const AllTypesProps: Record<string,any> = {
},
marketplaceCancelOrder:{
input:"MarketplaceCancelOrderInput"
},
marketplaceCancelWriteoffDraft:{
},
marketplaceCreateAplReception:{
data:"MarketplaceCreateAplReceptionInput"
@@ -1313,6 +1336,9 @@ export const AllTypesProps: Record<string,any> = {
marketplaceCreateShipment:{
data:"MarketplaceCreateShipmentInput"
},
marketplaceCreateWriteoffDraft:{
data:"MarketplaceCreateWriteoffDraftInput"
},
marketplaceDeclineConsolidatedRequest:{
input:"MarketplaceDeclineConsolidatedRequestInput"
},
@@ -1367,12 +1393,18 @@ export const AllTypesProps: Record<string,any> = {
marketplaceSignAplReceptionAsSupplier:{
data:"MarketplaceSignAplReceptionInput"
},
marketplaceSubmitWriteoffDraft:{
data:"MarketplaceSubmitWriteoffDraftInput"
},
marketplaceTriggerOpenSubscription:{
input:"MarketplaceTriggerOpenSubscriptionInput"
},
marketplaceUpdateOffer:{
input:"MarketplaceUpdateOfferInput"
},
marketplaceUpdateWriteoffDraft:{
data:"MarketplaceUpdateWriteoffDraftInput"
},
marketplaceWithdrawOffer:{
input:"MarketplaceWithdrawOfferInput"
},
@@ -1951,6 +1983,10 @@ export const AllTypesProps: Record<string,any> = {
input:"MarketplaceListOrdersInput",
options:"PaginationInput"
},
marketplaceListWriteoffProposals:{
data:"MarketplaceListWriteoffProposalsInput",
options:"PaginationInput"
},
marketplaceRequiredAttributes:{
data:"GetRequiredAttributesInput"
},
@@ -1972,6 +2008,12 @@ export const AllTypesProps: Record<string,any> = {
marketplaceValidateAttributeValues:{
input:"ValidateAttributeValuesInput"
},
marketplaceWriteoffProposal:{
},
marketplaceWriteoffStatementSignablePayload:{
data:"MarketplaceWriteoffStatementSignablePayloadInput"
},
onecoopGetDocuments:{
data:"GetOneCoopDocumentsInput"
},
@@ -4337,6 +4379,41 @@ export const ReturnTypes: Record<string,any> = {
member_account:"String",
role:"String"
},
MarketplaceWriteoffDecisionEntry:{
action:"String",
actor:"String",
at:"String"
},
MarketplaceWriteoffProposal:{
authorized_at:"String",
coopname:"String",
created_at:"String",
cycle_started_at:"String",
decided_by_account:"String",
decision_id:"Int",
decision_log:"MarketplaceWriteoffDecisionEntry",
executed_at:"String",
id:"String",
items:"MarketplaceWriteoffProposalItem",
proposal_hash:"String",
proposed_by_account:"String",
reject_reason:"String",
rejected_at:"String",
status:"MarketplaceWriteoffProposalStatus",
submitted_at:"String",
total_amount:"String",
trigger:"MarketplaceWriteoffProposalTrigger",
updated_at:"String"
},
MarketplaceWriteoffProposalItem:{
amount:"String",
asset_title:"String",
braname:"String",
executed:"Boolean",
inventory_id:"String",
quantity:"String",
reason:"String"
},
MatrixAccountStatusResponseDTO:{
hasAccount:"Boolean",
iframeUrl:"String",
@@ -4592,6 +4669,7 @@ export const ReturnTypes: Record<string,any> = {
marketplaceApproveOffer:"MarketplaceOffer",
marketplaceApproveReturnVisit:"MarketplaceReturnClaimResult",
marketplaceCancelOrder:"MarketplaceCancelOrderResult",
marketplaceCancelWriteoffDraft:"Boolean",
marketplaceClearAvailableCategories:"Boolean",
marketplaceCreateAplReception:"MarketplaceAplReceptionResult",
marketplaceCreateOffer:"MarketplaceOffer",
@@ -4599,6 +4677,7 @@ export const ReturnTypes: Record<string,any> = {
marketplaceCreateRequest:"MarketplaceRequest",
marketplaceCreateReturnClaim:"MarketplaceReturnClaimResult",
marketplaceCreateShipment:"MarketplaceCreateShipmentResult",
marketplaceCreateWriteoffDraft:"MarketplaceWriteoffProposal",
marketplaceDeclineConsolidatedRequest:"MarketplaceConsolidatedRequestActionResult",
marketplaceDeclineIndividualOrder:"MarketplaceSupplierOrderActionResult",
marketplaceDeclineOrderFromOpenPool:"MarketplaceSupplierOrderActionResult",
@@ -4617,8 +4696,10 @@ export const ReturnTypes: Record<string,any> = {
marketplaceSetKUStatus:"MarketplaceKUDetails",
marketplaceSignAplReceptionAsChairman:"MarketplaceAplReceptionResult",
marketplaceSignAplReceptionAsSupplier:"MarketplaceAplReceptionResult",
marketplaceSubmitWriteoffDraft:"MarketplaceWriteoffProposal",
marketplaceTriggerOpenSubscription:"MarketplaceConsolidatedRequest",
marketplaceUpdateOffer:"MarketplaceOffer",
marketplaceUpdateWriteoffDraft:"MarketplaceWriteoffProposal",
marketplaceWithdrawOffer:"MarketplaceOffer",
notifyOnAnnualGeneralMeet:"MeetAggregate",
processConvertToAxonStatement:"Boolean",
@@ -4844,6 +4925,12 @@ export const ReturnTypes: Record<string,any> = {
totalCount:"Int",
totalPages:"Int"
},
PaginatedMarketplaceWriteoffProposals:{
currentPage:"Int",
items:"MarketplaceWriteoffProposal",
totalCount:"Int",
totalPages:"Int"
},
ParticipantAccount:{
braname:"String",
created_at:"DateTime",
@@ -5246,8 +5333,10 @@ export const ReturnTypes: Record<string,any> = {
marketplaceListShipments:"MarketplaceShipment",
marketplaceListSupplierOrders:"MarketplaceOrderPaginationResult",
marketplaceListWhitelist:"MarketplaceWhitelistEntry",
marketplaceListWriteoffProposals:"PaginatedMarketplaceWriteoffProposals",
marketplaceMemberWallet:"MarketplaceMemberWallet",
marketplaceOnboardingState:"MarketplaceOnboardingState",
marketplaceOpenWriteoffDraft:"MarketplaceWriteoffProposal",
marketplaceRegistrationOfferStatus:"MarketplaceRegistrationOfferStatus",
marketplaceRequiredAttributes:"MarketplaceAttribute",
marketplaceReturnClaim:"MarketplaceReturnClaim",
@@ -5257,6 +5346,8 @@ export const ReturnTypes: Record<string,any> = {
marketplaceSearchRequests:"MarketplaceRequest",
marketplaceValidateAttributeValues:"MarketplaceAttributeValidation",
marketplaceWhoAmI:"MarketplaceCurrentMember",
marketplaceWriteoffProposal:"MarketplaceWriteoffProposal",
marketplaceWriteoffStatementSignablePayload:"GeneratedDocument",
onecoopGetDocuments:"OneCoopDocumentsResponse",
process:"ProcessView",
processes:"ProcessSummaryPaginationResult",
+454
View File
@@ -6525,6 +6525,11 @@ export type ValueTypes = {
__typename?: boolean | `@${string}`,
['...on MarketplaceCreateShipmentResult']?: Omit<ValueTypes["MarketplaceCreateShipmentResult"], "...on MarketplaceCreateShipmentResult">
}>;
["MarketplaceCreateWriteoffDraftInput"]: {
/** Начало расчётного цикла, если отличается от текущего момента. */
cycle_started_at?: string | undefined | null | Variable<any, string>,
items: Array<ValueTypes["MarketplaceWriteoffItemInput"]> | Variable<any, string>
};
["MarketplaceCurrentMember"]: AliasType<{
core_roles?:boolean | `@${string}`,
marketplace_roles?:boolean | `@${string}`,
@@ -6839,6 +6844,9 @@ export type ValueTypes = {
cycle_id?: ValueTypes["ID"] | undefined | null | Variable<any, string>,
/** Фильтр по статусам партий. */
statuses?: Array<ValueTypes["MarketplaceShipmentStatus"]> | undefined | null | Variable<any, string>
};
["MarketplaceListWriteoffProposalsInput"]: {
statuses?: Array<ValueTypes["MarketplaceWriteoffProposalStatus"]> | undefined | null | Variable<any, string>
};
["MarketplaceMemberWallet"]: AliasType<{
coopname?:boolean | `@${string}`,
@@ -7561,6 +7569,11 @@ export type ValueTypes = {
apl_reception_id: ValueTypes["ID"] | Variable<any, string>,
/** Подписанные клиентом акты приёмки — один документ на каждый Order группы. Backend верифицирует подпись и отправляет on-chain signsupp/signchair с этим документом. */
signed_documents: Array<ValueTypes["MarketplaceAplReceptionSignedDocumentInput"]> | Variable<any, string>
};
["MarketplaceSubmitWriteoffDraftInput"]: {
draft_id: string | Variable<any, string>,
/** Подписанное председателем Заявление о списании скоропорта (registry_id=1106). */
signed_statement: ValueTypes["SignedDigitalDocumentInput"] | Variable<any, string>
};
/** Результат индивидуального приёма или отклонения заказа поставщиком. */
["MarketplaceSupplierOrderActionResult"]: AliasType<{
@@ -7592,6 +7605,10 @@ export type ValueTypes = {
unit_of_measure?: string | undefined | null | Variable<any, string>,
unlimited_flag?: boolean | undefined | null | Variable<any, string>,
warranty_days?: number | undefined | null | Variable<any, string>
};
["MarketplaceUpdateWriteoffDraftInput"]: {
id: string | Variable<any, string>,
items: Array<ValueTypes["MarketplaceWriteoffItemInput"]> | Variable<any, string>
};
["MarketplaceVitrine"]: AliasType<{
/** eosio::name кооператива-владельца витрины */
@@ -7642,6 +7659,76 @@ export type ValueTypes = {
}>;
["MarketplaceWithdrawOfferInput"]: {
id: string | Variable<any, string>
};
["MarketplaceWriteoffDecisionEntry"]: AliasType<{
action?:boolean | `@${string}`,
actor?:boolean | `@${string}`,
at?:boolean | `@${string}`,
__typename?: boolean | `@${string}`,
['...on MarketplaceWriteoffDecisionEntry']?: Omit<ValueTypes["MarketplaceWriteoffDecisionEntry"], "...on MarketplaceWriteoffDecisionEntry">
}>;
["MarketplaceWriteoffItemInput"]: {
/** Сумма списания в формате числа с 4 знаками после запятой. */
amount: string | Variable<any, string>,
asset_title: string | Variable<any, string>,
braname: string | Variable<any, string>,
inventory_id?: string | undefined | null | Variable<any, string>,
quantity: string | Variable<any, string>,
reason: string | Variable<any, string>
};
["MarketplaceWriteoffProposal"]: AliasType<{
authorized_at?:boolean | `@${string}`,
coopname?:boolean | `@${string}`,
created_at?:boolean | `@${string}`,
cycle_started_at?:boolean | `@${string}`,
/** Аккаунт, принявший финальное решение. */
decided_by_account?:boolean | `@${string}`,
decision_id?:boolean | `@${string}`,
decision_log?:ValueTypes["MarketplaceWriteoffDecisionEntry"],
executed_at?:boolean | `@${string}`,
/** Идентификатор проекта в системе кооператива. */
id?:boolean | `@${string}`,
items?:ValueTypes["MarketplaceWriteoffProposalItem"],
/** Канонический хеш проекта, используется как process_hash on-chain (wroffprops, soviet.decisions). */
proposal_hash?:boolean | `@${string}`,
/** Аккаунт инициатора проекта (председатель / админ). */
proposed_by_account?:boolean | `@${string}`,
/** Причина отказа совета (если REJECTED). */
reject_reason?:boolean | `@${string}`,
rejected_at?:boolean | `@${string}`,
status?:boolean | `@${string}`,
submitted_at?:boolean | `@${string}`,
/** Σ сумм всех позиций (форматированный asset, 4 знака). */
total_amount?:boolean | `@${string}`,
trigger?:boolean | `@${string}`,
updated_at?:boolean | `@${string}`,
__typename?: boolean | `@${string}`,
['...on MarketplaceWriteoffProposal']?: Omit<ValueTypes["MarketplaceWriteoffProposal"], "...on MarketplaceWriteoffProposal">
}>;
["MarketplaceWriteoffProposalItem"]: AliasType<{
/** Сумма списания (4 знака после запятой, валюта кооператива). */
amount?:boolean | `@${string}`,
/** Наименование позиции или артикул из карточки имущества. */
asset_title?:boolean | `@${string}`,
/** Кооперативный участок (склад) — источник позиции к списанию. */
braname?:boolean | `@${string}`,
/** Признак того, что позиция уже исполнена через execwroff. */
executed?:boolean | `@${string}`,
/** Идентификатор инвентарной позиции, если известна. */
inventory_id?:boolean | `@${string}`,
/** Количество единиц к списанию. */
quantity?:boolean | `@${string}`,
/** Причина списания (срок годности, повреждение и т.п.). */
reason?:boolean | `@${string}`,
__typename?: boolean | `@${string}`,
['...on MarketplaceWriteoffProposalItem']?: Omit<ValueTypes["MarketplaceWriteoffProposalItem"], "...on MarketplaceWriteoffProposalItem">
}>;
/** Состояние проекта решения совета о списании скоропорта на пути от черновика до итогового списания. */
["MarketplaceWriteoffProposalStatus"]:MarketplaceWriteoffProposalStatus;
/** Источник проекта списания: автоматический ежемесячный крон или ручное создание. */
["MarketplaceWriteoffProposalTrigger"]:MarketplaceWriteoffProposalTrigger;
["MarketplaceWriteoffStatementSignablePayloadInput"]: {
draft_id: string | Variable<any, string>
};
["MatrixAccountStatusResponseDTO"]: AliasType<{
hasAccount?:boolean | `@${string}`,
@@ -8013,6 +8100,7 @@ marketplaceAddToWhitelist?: [{ input: ValueTypes["MarketplaceAddToWhitelistInput
marketplaceApproveOffer?: [{ input: ValueTypes["MarketplaceApproveOfferInput"] | Variable<any, string>},ValueTypes["MarketplaceOffer"]],
marketplaceApproveReturnVisit?: [{ data: ValueTypes["MarketplaceApproveReturnVisitInput"] | Variable<any, string>},ValueTypes["MarketplaceReturnClaimResult"]],
marketplaceCancelOrder?: [{ input: ValueTypes["MarketplaceCancelOrderInput"] | Variable<any, string>},ValueTypes["MarketplaceCancelOrderResult"]],
marketplaceCancelWriteoffDraft?: [{ id: string | Variable<any, string>},boolean | `@${string}`],
/** Очистить все доступные категории (сделать доступными все)
Требуемые роли: chairman. */
@@ -8023,6 +8111,7 @@ marketplaceCreateOrder?: [{ input: ValueTypes["MarketplaceCreateOrderInput"] | V
marketplaceCreateRequest?: [{ data: ValueTypes["CreateRequestInput"] | Variable<any, string>},ValueTypes["MarketplaceRequest"]],
marketplaceCreateReturnClaim?: [{ data: ValueTypes["MarketplaceCreateReturnClaimInput"] | Variable<any, string>},ValueTypes["MarketplaceReturnClaimResult"]],
marketplaceCreateShipment?: [{ data: ValueTypes["MarketplaceCreateShipmentInput"] | Variable<any, string>},ValueTypes["MarketplaceCreateShipmentResult"]],
marketplaceCreateWriteoffDraft?: [{ data: ValueTypes["MarketplaceCreateWriteoffDraftInput"] | Variable<any, string>},ValueTypes["MarketplaceWriteoffProposal"]],
marketplaceDeclineConsolidatedRequest?: [{ input: ValueTypes["MarketplaceDeclineConsolidatedRequestInput"] | Variable<any, string>},ValueTypes["MarketplaceConsolidatedRequestActionResult"]],
marketplaceDeclineIndividualOrder?: [{ input: ValueTypes["MarketplaceDeclineIndividualOrderInput"] | Variable<any, string>},ValueTypes["MarketplaceSupplierOrderActionResult"]],
marketplaceDeclineOrderFromOpenPool?: [{ input: ValueTypes["MarketplaceDeclineOrderFromOpenPoolInput"] | Variable<any, string>},ValueTypes["MarketplaceSupplierOrderActionResult"]],
@@ -8041,8 +8130,10 @@ marketplaceRetryKUGeocode?: [{ coopname: string | Variable<any, string>, coreBra
marketplaceSetKUStatus?: [{ data: ValueTypes["MarketplaceSetKUStatusInput"] | Variable<any, string>},ValueTypes["MarketplaceKUDetails"]],
marketplaceSignAplReceptionAsChairman?: [{ data: ValueTypes["MarketplaceSignAplReceptionInput"] | Variable<any, string>},ValueTypes["MarketplaceAplReceptionResult"]],
marketplaceSignAplReceptionAsSupplier?: [{ data: ValueTypes["MarketplaceSignAplReceptionInput"] | Variable<any, string>},ValueTypes["MarketplaceAplReceptionResult"]],
marketplaceSubmitWriteoffDraft?: [{ data: ValueTypes["MarketplaceSubmitWriteoffDraftInput"] | Variable<any, string>},ValueTypes["MarketplaceWriteoffProposal"]],
marketplaceTriggerOpenSubscription?: [{ input: ValueTypes["MarketplaceTriggerOpenSubscriptionInput"] | Variable<any, string>},ValueTypes["MarketplaceConsolidatedRequest"]],
marketplaceUpdateOffer?: [{ input: ValueTypes["MarketplaceUpdateOfferInput"] | Variable<any, string>},ValueTypes["MarketplaceOffer"]],
marketplaceUpdateWriteoffDraft?: [{ data: ValueTypes["MarketplaceUpdateWriteoffDraftInput"] | Variable<any, string>},ValueTypes["MarketplaceWriteoffProposal"]],
marketplaceWithdrawOffer?: [{ input: ValueTypes["MarketplaceWithdrawOfferInput"] | Variable<any, string>},ValueTypes["MarketplaceOffer"]],
notifyOnAnnualGeneralMeet?: [{ data: ValueTypes["NotifyOnAnnualGeneralMeetInput"] | Variable<any, string>},ValueTypes["MeetAggregate"]],
processConvertToAxonStatement?: [{ data: ValueTypes["ProcessConvertToAxonStatementInput"] | Variable<any, string>},boolean | `@${string}`],
@@ -8486,6 +8577,18 @@ walmoveWallets?: [{ input: ValueTypes["WalmoveInput"] | Variable<any, string>},V
totalPages?:boolean | `@${string}`,
__typename?: boolean | `@${string}`,
['...on PaginatedGatewayPaymentsPaginationResult']?: Omit<ValueTypes["PaginatedGatewayPaymentsPaginationResult"], "...on PaginatedGatewayPaymentsPaginationResult">
}>;
["PaginatedMarketplaceWriteoffProposals"]: AliasType<{
/** Текущая страница */
currentPage?:boolean | `@${string}`,
/** Элементы текущей страницы */
items?:ValueTypes["MarketplaceWriteoffProposal"],
/** Общее количество элементов */
totalCount?:boolean | `@${string}`,
/** Общее количество страниц */
totalPages?:boolean | `@${string}`,
__typename?: boolean | `@${string}`,
['...on PaginatedMarketplaceWriteoffProposals']?: Omit<ValueTypes["PaginatedMarketplaceWriteoffProposals"], "...on PaginatedMarketplaceWriteoffProposals">
}>;
["PaginationInput"]: {
/** Количество элементов на странице */
@@ -9448,10 +9551,13 @@ marketplaceListShipments?: [{ data?: ValueTypes["MarketplaceListShipmentsInput"]
marketplaceListSupplierOrders?: [{ input?: ValueTypes["MarketplaceListOrdersInput"] | undefined | null | Variable<any, string>, options?: ValueTypes["PaginationInput"] | undefined | null | Variable<any, string>},ValueTypes["MarketplaceOrderPaginationResult"]],
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
marketplaceListWhitelist?:ValueTypes["MarketplaceWhitelistEntry"],
marketplaceListWriteoffProposals?: [{ data: ValueTypes["MarketplaceListWriteoffProposalsInput"] | Variable<any, string>, options?: ValueTypes["PaginationInput"] | undefined | null | Variable<any, string>},ValueTypes["PaginatedMarketplaceWriteoffProposals"]],
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
marketplaceMemberWallet?:ValueTypes["MarketplaceMemberWallet"],
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
marketplaceOnboardingState?:ValueTypes["MarketplaceOnboardingState"],
/** Открытый черновик проекта списания (если есть). Один на кооператив. */
marketplaceOpenWriteoffDraft?:ValueTypes["MarketplaceWriteoffProposal"],
/** Статус видимости оферты Стола заказов в core registration-flow (платформенный AgreementRegistry) */
marketplaceRegistrationOfferStatus?:ValueTypes["MarketplaceRegistrationOfferStatus"],
marketplaceRequiredAttributes?: [{ data: ValueTypes["GetRequiredAttributesInput"] | Variable<any, string>},ValueTypes["MarketplaceAttribute"]],
@@ -9463,6 +9569,8 @@ marketplaceSearchRequests?: [{ data: ValueTypes["SearchRequestsInput"] | Variabl
marketplaceValidateAttributeValues?: [{ input: ValueTypes["ValidateAttributeValuesInput"] | Variable<any, string>},ValueTypes["MarketplaceAttributeValidation"]],
/** Контекст пайщика для Стола заказов: core_roles + marketplace_roles */
marketplaceWhoAmI?:ValueTypes["MarketplaceCurrentMember"],
marketplaceWriteoffProposal?: [{ id: string | Variable<any, string>},ValueTypes["MarketplaceWriteoffProposal"]],
marketplaceWriteoffStatementSignablePayload?: [{ data: ValueTypes["MarketplaceWriteoffStatementSignablePayloadInput"] | Variable<any, string>},ValueTypes["GeneratedDocument"]],
onecoopGetDocuments?: [{ data: ValueTypes["GetOneCoopDocumentsInput"] | Variable<any, string>},ValueTypes["OneCoopDocumentsResponse"]],
process?: [{ coopname: string | Variable<any, string>, hash: string | Variable<any, string>},ValueTypes["ProcessView"]],
processes?: [{ filter: ValueTypes["ProcessesFilter"] | Variable<any, string>, pagination: ValueTypes["PaginationInput"] | Variable<any, string>},ValueTypes["ProcessSummaryPaginationResult"]],
@@ -16325,6 +16433,11 @@ export type ResolverInputTypes = {
shipments?:ResolverInputTypes["MarketplaceShipment"],
__typename?: boolean | `@${string}`
}>;
["MarketplaceCreateWriteoffDraftInput"]: {
/** Начало расчётного цикла, если отличается от текущего момента. */
cycle_started_at?: string | undefined | null,
items: Array<ResolverInputTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceCurrentMember"]: AliasType<{
core_roles?:boolean | `@${string}`,
marketplace_roles?:boolean | `@${string}`,
@@ -16632,6 +16745,9 @@ export type ResolverInputTypes = {
cycle_id?: ResolverInputTypes["ID"] | undefined | null,
/** Фильтр по статусам партий. */
statuses?: Array<ResolverInputTypes["MarketplaceShipmentStatus"]> | undefined | null
};
["MarketplaceListWriteoffProposalsInput"]: {
statuses?: Array<ResolverInputTypes["MarketplaceWriteoffProposalStatus"]> | undefined | null
};
["MarketplaceMemberWallet"]: AliasType<{
coopname?:boolean | `@${string}`,
@@ -17330,6 +17446,11 @@ export type ResolverInputTypes = {
apl_reception_id: ResolverInputTypes["ID"],
/** Подписанные клиентом акты приёмки — один документ на каждый Order группы. Backend верифицирует подпись и отправляет on-chain signsupp/signchair с этим документом. */
signed_documents: Array<ResolverInputTypes["MarketplaceAplReceptionSignedDocumentInput"]>
};
["MarketplaceSubmitWriteoffDraftInput"]: {
draft_id: string,
/** Подписанное председателем Заявление о списании скоропорта (registry_id=1106). */
signed_statement: ResolverInputTypes["SignedDigitalDocumentInput"]
};
/** Результат индивидуального приёма или отклонения заказа поставщиком. */
["MarketplaceSupplierOrderActionResult"]: AliasType<{
@@ -17360,6 +17481,10 @@ export type ResolverInputTypes = {
unit_of_measure?: string | undefined | null,
unlimited_flag?: boolean | undefined | null,
warranty_days?: number | undefined | null
};
["MarketplaceUpdateWriteoffDraftInput"]: {
id: string,
items: Array<ResolverInputTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceVitrine"]: AliasType<{
/** eosio::name кооператива-владельца витрины */
@@ -17407,6 +17532,73 @@ export type ResolverInputTypes = {
}>;
["MarketplaceWithdrawOfferInput"]: {
id: string
};
["MarketplaceWriteoffDecisionEntry"]: AliasType<{
action?:boolean | `@${string}`,
actor?:boolean | `@${string}`,
at?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["MarketplaceWriteoffItemInput"]: {
/** Сумма списания в формате числа с 4 знаками после запятой. */
amount: string,
asset_title: string,
braname: string,
inventory_id?: string | undefined | null,
quantity: string,
reason: string
};
["MarketplaceWriteoffProposal"]: AliasType<{
authorized_at?:boolean | `@${string}`,
coopname?:boolean | `@${string}`,
created_at?:boolean | `@${string}`,
cycle_started_at?:boolean | `@${string}`,
/** Аккаунт, принявший финальное решение. */
decided_by_account?:boolean | `@${string}`,
decision_id?:boolean | `@${string}`,
decision_log?:ResolverInputTypes["MarketplaceWriteoffDecisionEntry"],
executed_at?:boolean | `@${string}`,
/** Идентификатор проекта в системе кооператива. */
id?:boolean | `@${string}`,
items?:ResolverInputTypes["MarketplaceWriteoffProposalItem"],
/** Канонический хеш проекта, используется как process_hash on-chain (wroffprops, soviet.decisions). */
proposal_hash?:boolean | `@${string}`,
/** Аккаунт инициатора проекта (председатель / админ). */
proposed_by_account?:boolean | `@${string}`,
/** Причина отказа совета (если REJECTED). */
reject_reason?:boolean | `@${string}`,
rejected_at?:boolean | `@${string}`,
status?:boolean | `@${string}`,
submitted_at?:boolean | `@${string}`,
/** Σ сумм всех позиций (форматированный asset, 4 знака). */
total_amount?:boolean | `@${string}`,
trigger?:boolean | `@${string}`,
updated_at?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["MarketplaceWriteoffProposalItem"]: AliasType<{
/** Сумма списания (4 знака после запятой, валюта кооператива). */
amount?:boolean | `@${string}`,
/** Наименование позиции или артикул из карточки имущества. */
asset_title?:boolean | `@${string}`,
/** Кооперативный участок (склад) — источник позиции к списанию. */
braname?:boolean | `@${string}`,
/** Признак того, что позиция уже исполнена через execwroff. */
executed?:boolean | `@${string}`,
/** Идентификатор инвентарной позиции, если известна. */
inventory_id?:boolean | `@${string}`,
/** Количество единиц к списанию. */
quantity?:boolean | `@${string}`,
/** Причина списания (срок годности, повреждение и т.п.). */
reason?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
/** Состояние проекта решения совета о списании скоропорта на пути от черновика до итогового списания. */
["MarketplaceWriteoffProposalStatus"]:MarketplaceWriteoffProposalStatus;
/** Источник проекта списания: автоматический ежемесячный крон или ручное создание. */
["MarketplaceWriteoffProposalTrigger"]:MarketplaceWriteoffProposalTrigger;
["MarketplaceWriteoffStatementSignablePayloadInput"]: {
draft_id: string
};
["MatrixAccountStatusResponseDTO"]: AliasType<{
hasAccount?:boolean | `@${string}`,
@@ -17769,6 +17961,7 @@ marketplaceAddToWhitelist?: [{ input: ResolverInputTypes["MarketplaceAddToWhitel
marketplaceApproveOffer?: [{ input: ResolverInputTypes["MarketplaceApproveOfferInput"]},ResolverInputTypes["MarketplaceOffer"]],
marketplaceApproveReturnVisit?: [{ data: ResolverInputTypes["MarketplaceApproveReturnVisitInput"]},ResolverInputTypes["MarketplaceReturnClaimResult"]],
marketplaceCancelOrder?: [{ input: ResolverInputTypes["MarketplaceCancelOrderInput"]},ResolverInputTypes["MarketplaceCancelOrderResult"]],
marketplaceCancelWriteoffDraft?: [{ id: string},boolean | `@${string}`],
/** Очистить все доступные категории (сделать доступными все)
Требуемые роли: chairman. */
@@ -17779,6 +17972,7 @@ marketplaceCreateOrder?: [{ input: ResolverInputTypes["MarketplaceCreateOrderInp
marketplaceCreateRequest?: [{ data: ResolverInputTypes["CreateRequestInput"]},ResolverInputTypes["MarketplaceRequest"]],
marketplaceCreateReturnClaim?: [{ data: ResolverInputTypes["MarketplaceCreateReturnClaimInput"]},ResolverInputTypes["MarketplaceReturnClaimResult"]],
marketplaceCreateShipment?: [{ data: ResolverInputTypes["MarketplaceCreateShipmentInput"]},ResolverInputTypes["MarketplaceCreateShipmentResult"]],
marketplaceCreateWriteoffDraft?: [{ data: ResolverInputTypes["MarketplaceCreateWriteoffDraftInput"]},ResolverInputTypes["MarketplaceWriteoffProposal"]],
marketplaceDeclineConsolidatedRequest?: [{ input: ResolverInputTypes["MarketplaceDeclineConsolidatedRequestInput"]},ResolverInputTypes["MarketplaceConsolidatedRequestActionResult"]],
marketplaceDeclineIndividualOrder?: [{ input: ResolverInputTypes["MarketplaceDeclineIndividualOrderInput"]},ResolverInputTypes["MarketplaceSupplierOrderActionResult"]],
marketplaceDeclineOrderFromOpenPool?: [{ input: ResolverInputTypes["MarketplaceDeclineOrderFromOpenPoolInput"]},ResolverInputTypes["MarketplaceSupplierOrderActionResult"]],
@@ -17797,8 +17991,10 @@ marketplaceRetryKUGeocode?: [{ coopname: string, coreBraname: string},ResolverIn
marketplaceSetKUStatus?: [{ data: ResolverInputTypes["MarketplaceSetKUStatusInput"]},ResolverInputTypes["MarketplaceKUDetails"]],
marketplaceSignAplReceptionAsChairman?: [{ data: ResolverInputTypes["MarketplaceSignAplReceptionInput"]},ResolverInputTypes["MarketplaceAplReceptionResult"]],
marketplaceSignAplReceptionAsSupplier?: [{ data: ResolverInputTypes["MarketplaceSignAplReceptionInput"]},ResolverInputTypes["MarketplaceAplReceptionResult"]],
marketplaceSubmitWriteoffDraft?: [{ data: ResolverInputTypes["MarketplaceSubmitWriteoffDraftInput"]},ResolverInputTypes["MarketplaceWriteoffProposal"]],
marketplaceTriggerOpenSubscription?: [{ input: ResolverInputTypes["MarketplaceTriggerOpenSubscriptionInput"]},ResolverInputTypes["MarketplaceConsolidatedRequest"]],
marketplaceUpdateOffer?: [{ input: ResolverInputTypes["MarketplaceUpdateOfferInput"]},ResolverInputTypes["MarketplaceOffer"]],
marketplaceUpdateWriteoffDraft?: [{ data: ResolverInputTypes["MarketplaceUpdateWriteoffDraftInput"]},ResolverInputTypes["MarketplaceWriteoffProposal"]],
marketplaceWithdrawOffer?: [{ input: ResolverInputTypes["MarketplaceWithdrawOfferInput"]},ResolverInputTypes["MarketplaceOffer"]],
notifyOnAnnualGeneralMeet?: [{ data: ResolverInputTypes["NotifyOnAnnualGeneralMeetInput"]},ResolverInputTypes["MeetAggregate"]],
processConvertToAxonStatement?: [{ data: ResolverInputTypes["ProcessConvertToAxonStatementInput"]},boolean | `@${string}`],
@@ -18212,6 +18408,17 @@ walmoveWallets?: [{ input: ResolverInputTypes["WalmoveInput"]},ResolverInputType
/** Общее количество страниц */
totalPages?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["PaginatedMarketplaceWriteoffProposals"]: AliasType<{
/** Текущая страница */
currentPage?:boolean | `@${string}`,
/** Элементы текущей страницы */
items?:ResolverInputTypes["MarketplaceWriteoffProposal"],
/** Общее количество элементов */
totalCount?:boolean | `@${string}`,
/** Общее количество страниц */
totalPages?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["PaginationInput"]: {
/** Количество элементов на странице */
@@ -19148,10 +19355,13 @@ marketplaceListShipments?: [{ data?: ResolverInputTypes["MarketplaceListShipment
marketplaceListSupplierOrders?: [{ input?: ResolverInputTypes["MarketplaceListOrdersInput"] | undefined | null, options?: ResolverInputTypes["PaginationInput"] | undefined | null},ResolverInputTypes["MarketplaceOrderPaginationResult"]],
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
marketplaceListWhitelist?:ResolverInputTypes["MarketplaceWhitelistEntry"],
marketplaceListWriteoffProposals?: [{ data: ResolverInputTypes["MarketplaceListWriteoffProposalsInput"], options?: ResolverInputTypes["PaginationInput"] | undefined | null},ResolverInputTypes["PaginatedMarketplaceWriteoffProposals"]],
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
marketplaceMemberWallet?:ResolverInputTypes["MarketplaceMemberWallet"],
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
marketplaceOnboardingState?:ResolverInputTypes["MarketplaceOnboardingState"],
/** Открытый черновик проекта списания (если есть). Один на кооператив. */
marketplaceOpenWriteoffDraft?:ResolverInputTypes["MarketplaceWriteoffProposal"],
/** Статус видимости оферты Стола заказов в core registration-flow (платформенный AgreementRegistry) */
marketplaceRegistrationOfferStatus?:ResolverInputTypes["MarketplaceRegistrationOfferStatus"],
marketplaceRequiredAttributes?: [{ data: ResolverInputTypes["GetRequiredAttributesInput"]},ResolverInputTypes["MarketplaceAttribute"]],
@@ -19163,6 +19373,8 @@ marketplaceSearchRequests?: [{ data: ResolverInputTypes["SearchRequestsInput"]},
marketplaceValidateAttributeValues?: [{ input: ResolverInputTypes["ValidateAttributeValuesInput"]},ResolverInputTypes["MarketplaceAttributeValidation"]],
/** Контекст пайщика для Стола заказов: core_roles + marketplace_roles */
marketplaceWhoAmI?:ResolverInputTypes["MarketplaceCurrentMember"],
marketplaceWriteoffProposal?: [{ id: string},ResolverInputTypes["MarketplaceWriteoffProposal"]],
marketplaceWriteoffStatementSignablePayload?: [{ data: ResolverInputTypes["MarketplaceWriteoffStatementSignablePayloadInput"]},ResolverInputTypes["GeneratedDocument"]],
onecoopGetDocuments?: [{ data: ResolverInputTypes["GetOneCoopDocumentsInput"]},ResolverInputTypes["OneCoopDocumentsResponse"]],
process?: [{ coopname: string, hash: string},ResolverInputTypes["ProcessView"]],
processes?: [{ filter: ResolverInputTypes["ProcessesFilter"], pagination: ResolverInputTypes["PaginationInput"]},ResolverInputTypes["ProcessSummaryPaginationResult"]],
@@ -25809,6 +26021,11 @@ export type ModelTypes = {
["MarketplaceCreateShipmentResult"]: {
/** Созданные партии — по одной на каждый КУ заявки. */
shipments: Array<ModelTypes["MarketplaceShipment"]>
};
["MarketplaceCreateWriteoffDraftInput"]: {
/** Начало расчётного цикла, если отличается от текущего момента. */
cycle_started_at?: string | undefined | null,
items: Array<ModelTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceCurrentMember"]: {
core_roles: Array<string>,
@@ -26109,6 +26326,9 @@ export type ModelTypes = {
cycle_id?: ModelTypes["ID"] | undefined | null,
/** Фильтр по статусам партий. */
statuses?: Array<ModelTypes["MarketplaceShipmentStatus"]> | undefined | null
};
["MarketplaceListWriteoffProposalsInput"]: {
statuses?: Array<ModelTypes["MarketplaceWriteoffProposalStatus"]> | undefined | null
};
["MarketplaceMemberWallet"]: {
coopname: string,
@@ -26774,6 +26994,11 @@ export type ModelTypes = {
apl_reception_id: ModelTypes["ID"],
/** Подписанные клиентом акты приёмки — один документ на каждый Order группы. Backend верифицирует подпись и отправляет on-chain signsupp/signchair с этим документом. */
signed_documents: Array<ModelTypes["MarketplaceAplReceptionSignedDocumentInput"]>
};
["MarketplaceSubmitWriteoffDraftInput"]: {
draft_id: string,
/** Подписанное председателем Заявление о списании скоропорта (registry_id=1106). */
signed_statement: ModelTypes["SignedDigitalDocumentInput"]
};
/** Результат индивидуального приёма или отклонения заказа поставщиком. */
["MarketplaceSupplierOrderActionResult"]: {
@@ -26803,6 +27028,10 @@ export type ModelTypes = {
unit_of_measure?: string | undefined | null,
unlimited_flag?: boolean | undefined | null,
warranty_days?: number | undefined | null
};
["MarketplaceUpdateWriteoffDraftInput"]: {
id: string,
items: Array<ModelTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceVitrine"]: {
/** eosio::name кооператива-владельца витрины */
@@ -26847,6 +27076,68 @@ export type ModelTypes = {
};
["MarketplaceWithdrawOfferInput"]: {
id: string
};
["MarketplaceWriteoffDecisionEntry"]: {
action: string,
actor: string,
at: string
};
["MarketplaceWriteoffItemInput"]: {
/** Сумма списания в формате числа с 4 знаками после запятой. */
amount: string,
asset_title: string,
braname: string,
inventory_id?: string | undefined | null,
quantity: string,
reason: string
};
["MarketplaceWriteoffProposal"]: {
authorized_at?: string | undefined | null,
coopname: string,
created_at: string,
cycle_started_at: string,
/** Аккаунт, принявший финальное решение. */
decided_by_account?: string | undefined | null,
decision_id?: number | undefined | null,
decision_log: Array<ModelTypes["MarketplaceWriteoffDecisionEntry"]>,
executed_at?: string | undefined | null,
/** Идентификатор проекта в системе кооператива. */
id: string,
items: Array<ModelTypes["MarketplaceWriteoffProposalItem"]>,
/** Канонический хеш проекта, используется как process_hash on-chain (wroffprops, soviet.decisions). */
proposal_hash: string,
/** Аккаунт инициатора проекта (председатель / админ). */
proposed_by_account?: string | undefined | null,
/** Причина отказа совета (если REJECTED). */
reject_reason?: string | undefined | null,
rejected_at?: string | undefined | null,
status: ModelTypes["MarketplaceWriteoffProposalStatus"],
submitted_at?: string | undefined | null,
/** Σ сумм всех позиций (форматированный asset, 4 знака). */
total_amount: string,
trigger: ModelTypes["MarketplaceWriteoffProposalTrigger"],
updated_at: string
};
["MarketplaceWriteoffProposalItem"]: {
/** Сумма списания (4 знака после запятой, валюта кооператива). */
amount: string,
/** Наименование позиции или артикул из карточки имущества. */
asset_title: string,
/** Кооперативный участок (склад) — источник позиции к списанию. */
braname: string,
/** Признак того, что позиция уже исполнена через execwroff. */
executed: boolean,
/** Идентификатор инвентарной позиции, если известна. */
inventory_id?: string | undefined | null,
/** Количество единиц к списанию. */
quantity: string,
/** Причина списания (срок годности, повреждение и т.п.). */
reason: string
};
["MarketplaceWriteoffProposalStatus"]:MarketplaceWriteoffProposalStatus;
["MarketplaceWriteoffProposalTrigger"]:MarketplaceWriteoffProposalTrigger;
["MarketplaceWriteoffStatementSignablePayloadInput"]: {
draft_id: string
};
["MatrixAccountStatusResponseDTO"]: {
hasAccount: boolean,
@@ -27604,6 +27895,8 @@ export type ModelTypes = {
marketplaceApproveReturnVisit: ModelTypes["MarketplaceReturnClaimResult"],
/** Отменить свой заказ до его приёма поставщиком; средства разблокируются. */
marketplaceCancelOrder: ModelTypes["MarketplaceCancelOrderResult"],
/** Удалить черновик. Доступно только пока проект в статусе DRAFT. */
marketplaceCancelWriteoffDraft: boolean,
/** Очистить все доступные категории (сделать доступными все)
Требуемые роли: chairman. */
@@ -27622,6 +27915,8 @@ export type ModelTypes = {
marketplaceCreateReturnClaim: ModelTypes["MarketplaceReturnClaimResult"],
/** Сформировать партии поставки из акцептованной заявки: одна группа на каждый КУ-получатель. */
marketplaceCreateShipment: ModelTypes["MarketplaceCreateShipmentResult"],
/** Создаёт ручной черновик проекта списания. На кооператив может быть только один открытый черновик и один проект, отправленный в совет. */
marketplaceCreateWriteoffDraft: ModelTypes["MarketplaceWriteoffProposal"],
/** Поставщик отклоняет сводную заявку — все заказы пакета отменяются, средства разблокируются. */
marketplaceDeclineConsolidatedRequest: ModelTypes["MarketplaceConsolidatedRequestActionResult"],
/** Поставщик отказывается от одного индивидуального заказа; средства разблокируются. */
@@ -27670,10 +27965,14 @@ export type ModelTypes = {
marketplaceSignAplReceptionAsChairman: ModelTypes["MarketplaceAplReceptionResult"],
/** Поставщик ставит первую подпись на акте приёмки (лично — Вариант А; асинхронно через push — Вариант Б). */
marketplaceSignAplReceptionAsSupplier: ModelTypes["MarketplaceAplReceptionResult"],
/** Отправить черновик в совет. Принимает подписанное председателем Заявление 1106. После успешного приёма выполняются propwroff и soviet::createagenda(mktwroff). */
marketplaceSubmitWriteoffDraft: ModelTypes["MarketplaceWriteoffProposal"],
/** Поставщик запускает поставку по предложению с открытой подпиской: формируется сводная заявка, заказы в её пуле принимаются. */
marketplaceTriggerOpenSubscription: ModelTypes["MarketplaceConsolidatedRequest"],
/** Поставщик правит свой Offer — статус сбрасывается в PENDING_MODERATION */
marketplaceUpdateOffer: ModelTypes["MarketplaceOffer"],
/** Изменить состав черновика — добавить, удалить или поправить позиции. */
marketplaceUpdateWriteoffDraft: ModelTypes["MarketplaceWriteoffProposal"],
/** Поставщик снимает свой Offer (статус → WITHDRAWN) */
marketplaceWithdrawOffer: ModelTypes["MarketplaceOffer"],
/** Уведомление о проведении общего собрания пайщиков
@@ -28126,6 +28425,16 @@ export type ModelTypes = {
totalCount: number,
/** Общее количество страниц */
totalPages: number
};
["PaginatedMarketplaceWriteoffProposals"]: {
/** Текущая страница */
currentPage: number,
/** Элементы текущей страницы */
items: Array<ModelTypes["MarketplaceWriteoffProposal"]>,
/** Общее количество элементов */
totalCount: number,
/** Общее количество страниц */
totalPages: number
};
["PaginationInput"]: {
/** Количество элементов на странице */
@@ -29249,10 +29558,14 @@ export type ModelTypes = {
marketplaceListSupplierOrders: ModelTypes["MarketplaceOrderPaginationResult"],
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
marketplaceListWhitelist: Array<ModelTypes["MarketplaceWhitelistEntry"]>,
/** Лента всех проектов списания кооператива с фильтром по статусу. */
marketplaceListWriteoffProposals: ModelTypes["PaginatedMarketplaceWriteoffProposals"],
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
marketplaceMemberWallet: ModelTypes["MarketplaceMemberWallet"],
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
marketplaceOnboardingState: ModelTypes["MarketplaceOnboardingState"],
/** Открытый черновик проекта списания (если есть). Один на кооператив. */
marketplaceOpenWriteoffDraft?: ModelTypes["MarketplaceWriteoffProposal"] | undefined | null,
/** Статус видимости оферты Стола заказов в core registration-flow (платформенный AgreementRegistry) */
marketplaceRegistrationOfferStatus: ModelTypes["MarketplaceRegistrationOfferStatus"],
/** Получить обязательные атрибуты для категории и типа товара marketplace */
@@ -29271,6 +29584,10 @@ export type ModelTypes = {
marketplaceValidateAttributeValues: ModelTypes["MarketplaceAttributeValidation"],
/** Контекст пайщика для Стола заказов: core_roles + marketplace_roles */
marketplaceWhoAmI: ModelTypes["MarketplaceCurrentMember"],
/** Детали одного проекта списания: items, decision_log, протокол. */
marketplaceWriteoffProposal: ModelTypes["MarketplaceWriteoffProposal"],
/** Превью Заявления о списании скоропорта (registry 1106) для подписания председателем. */
marketplaceWriteoffStatementSignablePayload: ModelTypes["GeneratedDocument"],
/** Получение документов кооператива для синхронизации с 1С. Требует секретный ключ в заголовке x-onecoop-secret-key. */
onecoopGetDocuments: ModelTypes["OneCoopDocumentsResponse"],
/** Получить полную картину процесса ledger2 по process_hash
@@ -36186,6 +36503,11 @@ export type GraphQLTypes = {
/** Созданные партии — по одной на каждый КУ заявки. */
shipments: Array<GraphQLTypes["MarketplaceShipment"]>,
['...on MarketplaceCreateShipmentResult']: Omit<GraphQLTypes["MarketplaceCreateShipmentResult"], "...on MarketplaceCreateShipmentResult">
};
["MarketplaceCreateWriteoffDraftInput"]: {
/** Начало расчётного цикла, если отличается от текущего момента. */
cycle_started_at?: string | undefined | null,
items: Array<GraphQLTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceCurrentMember"]: {
__typename: "MarketplaceCurrentMember",
@@ -36501,6 +36823,9 @@ export type GraphQLTypes = {
cycle_id?: GraphQLTypes["ID"] | undefined | null,
/** Фильтр по статусам партий. */
statuses?: Array<GraphQLTypes["MarketplaceShipmentStatus"]> | undefined | null
};
["MarketplaceListWriteoffProposalsInput"]: {
statuses?: Array<GraphQLTypes["MarketplaceWriteoffProposalStatus"]> | undefined | null
};
["MarketplaceMemberWallet"]: {
__typename: "MarketplaceMemberWallet",
@@ -37223,6 +37548,11 @@ export type GraphQLTypes = {
apl_reception_id: GraphQLTypes["ID"],
/** Подписанные клиентом акты приёмки — один документ на каждый Order группы. Backend верифицирует подпись и отправляет on-chain signsupp/signchair с этим документом. */
signed_documents: Array<GraphQLTypes["MarketplaceAplReceptionSignedDocumentInput"]>
};
["MarketplaceSubmitWriteoffDraftInput"]: {
draft_id: string,
/** Подписанное председателем Заявление о списании скоропорта (registry_id=1106). */
signed_statement: GraphQLTypes["SignedDigitalDocumentInput"]
};
/** Результат индивидуального приёма или отклонения заказа поставщиком. */
["MarketplaceSupplierOrderActionResult"]: {
@@ -37254,6 +37584,10 @@ export type GraphQLTypes = {
unit_of_measure?: string | undefined | null,
unlimited_flag?: boolean | undefined | null,
warranty_days?: number | undefined | null
};
["MarketplaceUpdateWriteoffDraftInput"]: {
id: string,
items: Array<GraphQLTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceVitrine"]: {
__typename: "MarketplaceVitrine",
@@ -37304,6 +37638,76 @@ export type GraphQLTypes = {
};
["MarketplaceWithdrawOfferInput"]: {
id: string
};
["MarketplaceWriteoffDecisionEntry"]: {
__typename: "MarketplaceWriteoffDecisionEntry",
action: string,
actor: string,
at: string,
['...on MarketplaceWriteoffDecisionEntry']: Omit<GraphQLTypes["MarketplaceWriteoffDecisionEntry"], "...on MarketplaceWriteoffDecisionEntry">
};
["MarketplaceWriteoffItemInput"]: {
/** Сумма списания в формате числа с 4 знаками после запятой. */
amount: string,
asset_title: string,
braname: string,
inventory_id?: string | undefined | null,
quantity: string,
reason: string
};
["MarketplaceWriteoffProposal"]: {
__typename: "MarketplaceWriteoffProposal",
authorized_at?: string | undefined | null,
coopname: string,
created_at: string,
cycle_started_at: string,
/** Аккаунт, принявший финальное решение. */
decided_by_account?: string | undefined | null,
decision_id?: number | undefined | null,
decision_log: Array<GraphQLTypes["MarketplaceWriteoffDecisionEntry"]>,
executed_at?: string | undefined | null,
/** Идентификатор проекта в системе кооператива. */
id: string,
items: Array<GraphQLTypes["MarketplaceWriteoffProposalItem"]>,
/** Канонический хеш проекта, используется как process_hash on-chain (wroffprops, soviet.decisions). */
proposal_hash: string,
/** Аккаунт инициатора проекта (председатель / админ). */
proposed_by_account?: string | undefined | null,
/** Причина отказа совета (если REJECTED). */
reject_reason?: string | undefined | null,
rejected_at?: string | undefined | null,
status: GraphQLTypes["MarketplaceWriteoffProposalStatus"],
submitted_at?: string | undefined | null,
/** Σ сумм всех позиций (форматированный asset, 4 знака). */
total_amount: string,
trigger: GraphQLTypes["MarketplaceWriteoffProposalTrigger"],
updated_at: string,
['...on MarketplaceWriteoffProposal']: Omit<GraphQLTypes["MarketplaceWriteoffProposal"], "...on MarketplaceWriteoffProposal">
};
["MarketplaceWriteoffProposalItem"]: {
__typename: "MarketplaceWriteoffProposalItem",
/** Сумма списания (4 знака после запятой, валюта кооператива). */
amount: string,
/** Наименование позиции или артикул из карточки имущества. */
asset_title: string,
/** Кооперативный участок (склад) — источник позиции к списанию. */
braname: string,
/** Признак того, что позиция уже исполнена через execwroff. */
executed: boolean,
/** Идентификатор инвентарной позиции, если известна. */
inventory_id?: string | undefined | null,
/** Количество единиц к списанию. */
quantity: string,
/** Причина списания (срок годности, повреждение и т.п.). */
reason: string,
['...on MarketplaceWriteoffProposalItem']: Omit<GraphQLTypes["MarketplaceWriteoffProposalItem"], "...on MarketplaceWriteoffProposalItem">
};
/** Состояние проекта решения совета о списании скоропорта на пути от черновика до итогового списания. */
["MarketplaceWriteoffProposalStatus"]: MarketplaceWriteoffProposalStatus;
/** Источник проекта списания: автоматический ежемесячный крон или ручное создание. */
["MarketplaceWriteoffProposalTrigger"]: MarketplaceWriteoffProposalTrigger;
["MarketplaceWriteoffStatementSignablePayloadInput"]: {
draft_id: string
};
["MatrixAccountStatusResponseDTO"]: {
__typename: "MatrixAccountStatusResponseDTO",
@@ -38080,6 +38484,8 @@ export type GraphQLTypes = {
marketplaceApproveReturnVisit: GraphQLTypes["MarketplaceReturnClaimResult"],
/** Отменить свой заказ до его приёма поставщиком; средства разблокируются. */
marketplaceCancelOrder: GraphQLTypes["MarketplaceCancelOrderResult"],
/** Удалить черновик. Доступно только пока проект в статусе DRAFT. */
marketplaceCancelWriteoffDraft: boolean,
/** Очистить все доступные категории (сделать доступными все)
Требуемые роли: chairman. */
@@ -38098,6 +38504,8 @@ export type GraphQLTypes = {
marketplaceCreateReturnClaim: GraphQLTypes["MarketplaceReturnClaimResult"],
/** Сформировать партии поставки из акцептованной заявки: одна группа на каждый КУ-получатель. */
marketplaceCreateShipment: GraphQLTypes["MarketplaceCreateShipmentResult"],
/** Создаёт ручной черновик проекта списания. На кооператив может быть только один открытый черновик и один проект, отправленный в совет. */
marketplaceCreateWriteoffDraft: GraphQLTypes["MarketplaceWriteoffProposal"],
/** Поставщик отклоняет сводную заявку — все заказы пакета отменяются, средства разблокируются. */
marketplaceDeclineConsolidatedRequest: GraphQLTypes["MarketplaceConsolidatedRequestActionResult"],
/** Поставщик отказывается от одного индивидуального заказа; средства разблокируются. */
@@ -38146,10 +38554,14 @@ export type GraphQLTypes = {
marketplaceSignAplReceptionAsChairman: GraphQLTypes["MarketplaceAplReceptionResult"],
/** Поставщик ставит первую подпись на акте приёмки (лично — Вариант А; асинхронно через push — Вариант Б). */
marketplaceSignAplReceptionAsSupplier: GraphQLTypes["MarketplaceAplReceptionResult"],
/** Отправить черновик в совет. Принимает подписанное председателем Заявление 1106. После успешного приёма выполняются propwroff и soviet::createagenda(mktwroff). */
marketplaceSubmitWriteoffDraft: GraphQLTypes["MarketplaceWriteoffProposal"],
/** Поставщик запускает поставку по предложению с открытой подпиской: формируется сводная заявка, заказы в её пуле принимаются. */
marketplaceTriggerOpenSubscription: GraphQLTypes["MarketplaceConsolidatedRequest"],
/** Поставщик правит свой Offer — статус сбрасывается в PENDING_MODERATION */
marketplaceUpdateOffer: GraphQLTypes["MarketplaceOffer"],
/** Изменить состав черновика — добавить, удалить или поправить позиции. */
marketplaceUpdateWriteoffDraft: GraphQLTypes["MarketplaceWriteoffProposal"],
/** Поставщик снимает свой Offer (статус → WITHDRAWN) */
marketplaceWithdrawOffer: GraphQLTypes["MarketplaceOffer"],
/** Уведомление о проведении общего собрания пайщиков
@@ -38662,6 +39074,18 @@ export type GraphQLTypes = {
/** Общее количество страниц */
totalPages: number,
['...on PaginatedGatewayPaymentsPaginationResult']: Omit<GraphQLTypes["PaginatedGatewayPaymentsPaginationResult"], "...on PaginatedGatewayPaymentsPaginationResult">
};
["PaginatedMarketplaceWriteoffProposals"]: {
__typename: "PaginatedMarketplaceWriteoffProposals",
/** Текущая страница */
currentPage: number,
/** Элементы текущей страницы */
items: Array<GraphQLTypes["MarketplaceWriteoffProposal"]>,
/** Общее количество элементов */
totalCount: number,
/** Общее количество страниц */
totalPages: number,
['...on PaginatedMarketplaceWriteoffProposals']: Omit<GraphQLTypes["PaginatedMarketplaceWriteoffProposals"], "...on PaginatedMarketplaceWriteoffProposals">
};
["PaginationInput"]: {
/** Количество элементов на странице */
@@ -39857,10 +40281,14 @@ export type GraphQLTypes = {
marketplaceListSupplierOrders: GraphQLTypes["MarketplaceOrderPaginationResult"],
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
marketplaceListWhitelist: Array<GraphQLTypes["MarketplaceWhitelistEntry"]>,
/** Лента всех проектов списания кооператива с фильтром по статусу. */
marketplaceListWriteoffProposals: GraphQLTypes["PaginatedMarketplaceWriteoffProposals"],
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
marketplaceMemberWallet: GraphQLTypes["MarketplaceMemberWallet"],
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
marketplaceOnboardingState: GraphQLTypes["MarketplaceOnboardingState"],
/** Открытый черновик проекта списания (если есть). Один на кооператив. */
marketplaceOpenWriteoffDraft?: GraphQLTypes["MarketplaceWriteoffProposal"] | undefined | null,
/** Статус видимости оферты Стола заказов в core registration-flow (платформенный AgreementRegistry) */
marketplaceRegistrationOfferStatus: GraphQLTypes["MarketplaceRegistrationOfferStatus"],
/** Получить обязательные атрибуты для категории и типа товара marketplace */
@@ -39879,6 +40307,10 @@ export type GraphQLTypes = {
marketplaceValidateAttributeValues: GraphQLTypes["MarketplaceAttributeValidation"],
/** Контекст пайщика для Стола заказов: core_roles + marketplace_roles */
marketplaceWhoAmI: GraphQLTypes["MarketplaceCurrentMember"],
/** Детали одного проекта списания: items, decision_log, протокол. */
marketplaceWriteoffProposal: GraphQLTypes["MarketplaceWriteoffProposal"],
/** Превью Заявления о списании скоропорта (registry 1106) для подписания председателем. */
marketplaceWriteoffStatementSignablePayload: GraphQLTypes["GeneratedDocument"],
/** Получение документов кооператива для синхронизации с 1С. Требует секретный ключ в заголовке x-onecoop-secret-key. */
onecoopGetDocuments: GraphQLTypes["OneCoopDocumentsResponse"],
/** Получить полную картину процесса ledger2 по process_hash
@@ -41822,6 +42254,20 @@ export enum MarketplaceShipmentStatus {
RECEPTION_IN_PROGRESS = "RECEPTION_IN_PROGRESS",
SUPPLY_PREPARED = "SUPPLY_PREPARED"
}
/** Состояние проекта решения совета о списании скоропорта на пути от черновика до итогового списания. */
export enum MarketplaceWriteoffProposalStatus {
AUTHORIZED = "AUTHORIZED",
DRAFT = "DRAFT",
EXECUTED = "EXECUTED",
EXECUTING = "EXECUTING",
ON_AGENDA = "ON_AGENDA",
REJECTED = "REJECTED"
}
/** Источник проекта списания: автоматический ежемесячный крон или ручное создание. */
export enum MarketplaceWriteoffProposalTrigger {
CRON = "CRON",
MANUAL = "MANUAL"
}
/** Тип юридического лица */
export enum OrganizationType {
AO = "AO",
@@ -42263,6 +42709,7 @@ type ZEUS_VARIABLES = {
["MarketplaceCreateOrderInput"]: ValueTypes["MarketplaceCreateOrderInput"];
["MarketplaceCreateReturnClaimInput"]: ValueTypes["MarketplaceCreateReturnClaimInput"];
["MarketplaceCreateShipmentInput"]: ValueTypes["MarketplaceCreateShipmentInput"];
["MarketplaceCreateWriteoffDraftInput"]: ValueTypes["MarketplaceCreateWriteoffDraftInput"];
["MarketplaceDeclineConsolidatedRequestInput"]: ValueTypes["MarketplaceDeclineConsolidatedRequestInput"];
["MarketplaceDeclineIndividualOrderInput"]: ValueTypes["MarketplaceDeclineIndividualOrderInput"];
["MarketplaceDeclineOrderFromOpenPoolInput"]: ValueTypes["MarketplaceDeclineOrderFromOpenPoolInput"];
@@ -42285,6 +42732,7 @@ type ZEUS_VARIABLES = {
["MarketplaceListPendingOffersInput"]: ValueTypes["MarketplaceListPendingOffersInput"];
["MarketplaceListReturnClaimsByBranameInput"]: ValueTypes["MarketplaceListReturnClaimsByBranameInput"];
["MarketplaceListShipmentsInput"]: ValueTypes["MarketplaceListShipmentsInput"];
["MarketplaceListWriteoffProposalsInput"]: ValueTypes["MarketplaceListWriteoffProposalsInput"];
["MarketplaceOpenIssuanceInput"]: ValueTypes["MarketplaceOpenIssuanceInput"];
["MarketplaceOrderCycleType"]: ValueTypes["MarketplaceOrderCycleType"];
["MarketplaceOrderIssuanceFactDiffState"]: ValueTypes["MarketplaceOrderIssuanceFactDiffState"];
@@ -42307,9 +42755,15 @@ type ZEUS_VARIABLES = {
["MarketplaceShipmentStatus"]: ValueTypes["MarketplaceShipmentStatus"];
["MarketplaceShipmentTTNDataInput"]: ValueTypes["MarketplaceShipmentTTNDataInput"];
["MarketplaceSignAplReceptionInput"]: ValueTypes["MarketplaceSignAplReceptionInput"];
["MarketplaceSubmitWriteoffDraftInput"]: ValueTypes["MarketplaceSubmitWriteoffDraftInput"];
["MarketplaceTriggerOpenSubscriptionInput"]: ValueTypes["MarketplaceTriggerOpenSubscriptionInput"];
["MarketplaceUpdateOfferInput"]: ValueTypes["MarketplaceUpdateOfferInput"];
["MarketplaceUpdateWriteoffDraftInput"]: ValueTypes["MarketplaceUpdateWriteoffDraftInput"];
["MarketplaceWithdrawOfferInput"]: ValueTypes["MarketplaceWithdrawOfferInput"];
["MarketplaceWriteoffItemInput"]: ValueTypes["MarketplaceWriteoffItemInput"];
["MarketplaceWriteoffProposalStatus"]: ValueTypes["MarketplaceWriteoffProposalStatus"];
["MarketplaceWriteoffProposalTrigger"]: ValueTypes["MarketplaceWriteoffProposalTrigger"];
["MarketplaceWriteoffStatementSignablePayloadInput"]: ValueTypes["MarketplaceWriteoffStatementSignablePayloadInput"];
["MoveCapitalIssueToComponentInput"]: ValueTypes["MoveCapitalIssueToComponentInput"];
["NotificationWorkflowRecipientInput"]: ValueTypes["NotificationWorkflowRecipientInput"];
["NotifyOnAnnualGeneralMeetInput"]: ValueTypes["NotifyOnAnnualGeneralMeetInput"];
+1 -1
View File
@@ -7,7 +7,7 @@
- Архитектура Feature Sliced Design (FSD)
- SSR и SPA режимы (Quasar Framework)
- Pug-шаблоны с Composition API
- Система расширений (extensions) для модульного подключения функциональности
- Система расширений (extensions) для модульного подключения функциональности (см. [docs/extension-factories.md](docs/extension-factories.md) о фабриках инжекции в стол совета и стол бухгалтера)
- Интернационализация (Vue I18n)
- Pinia для управления состоянием с персистентностью
- Интеграция с блокчейном EOSIO через Wharfkit
@@ -0,0 +1,170 @@
# Фабрики инжекции компонентов между расширениями
В desktop есть два «общих стола», на которые приходят данные из разных
расширений: **стол совета** (`extensions/soviet`) и **стол бухгалтера**
(`extensions/reports`). Они показывают единый поток того, чем живёт
кооператив — повестка решений и реестр операций соответственно — и должны
оставаться единственной точкой просмотра для пользователя.
Чтобы прикладные расширения (`capital`, `market`, `registrator`, …) могли
показать на этих столах своё бизнес-описание, не дублируя интерфейс у себя
и не размывая роль стола, используется паттерн **фабрик инжекции**.
Расширение регистрирует Vue-компонент по идентификатору доменной сущности
(тип решения / тип процесса), общий стол этот компонент рендерит в нужном
слоте.
## Где какая фабрика
| Фабрика | Куда инжектирует | Чем индексируется | Источник правды по идентификатору |
|---|---|---|---|
| `decisionFactory` (`shared/lib/decision-factory`) | Стол совета — `widgets/Questions/QuestionsTable` (повестка) | `decisionType` (строка из `table.type`) | Реестр решений в backend / `cooptypes` |
| `processInfoFactory` (`shared/lib/process-info-factory`) | Стол бухгалтера — `extensions/reports/pages/OperationsPage` (реестр операций) | `process_type` | `Ledger2.LEDGER2_PROCESS_REGISTRY` |
Обе фабрики устроены одинаково: singleton-реестр `Record<string, Handler>`
+ методы `registerHandler / getInfoComponent / hasHandler`. Регистрация —
side-effect при загрузке расширения; общий стол читает реестр на каждом
ререндере строки.
## Когда что добавлять
- **Новый тип решения совета** (нужна подпись Протокола, голосование,
отдельная заявка-инициатор) — `decisionFactory`. Помимо `infoComponent`
здесь нужен `generateHandler`, генерирующий PDF-документ решения.
- **Новый тип процесса ledger2** (поставка, возврат, списание, выпуск
займа и т. п.) — `processInfoFactory`. Достаточно одного
`infoComponent`: проводки, движения по кошелькам и документы стол
бухгалтера соберёт сам, расширение лишь даёт человекочитаемое
«содержание процесса» в бизнес-словаре + deep-link на свой собственный
стол.
## Что НЕ должно делать расширение
- **Не показывать у себя реестр операций / проводок / документов.** Эта
информация уже есть на столе бухгалтера в общем виде по всем процессам.
Дублирование = два «правильных» места + расхождения между ними.
- **Не показывать у себя ленту решений совета.** Все решения по всем
расширениям видны в одной повестке.
- **Не пихать в `infoComponent` техничку**: `process_type` / `o.mkt.*` /
block_num / event_id / raw enum-значения. Стол читают председатель,
бухгалтер, ревизор — у них нет контекста разработчика. Только бизнес-
поля и deep-link.
## DecisionFactory — стол совета
### Контракт
```ts
// shared/lib/types/decision-factory.ts
interface IDecisionHandler {
generateHandler: (data: IGenerateDecisionData) => Promise<unknown>
infoComponent?: Component<{ agenda: IAgenda }>
}
```
`infoComponent` получает `IAgenda` (строку повестки) и рендерит блок
дополнительной информации справа от стандартных полей повестки.
### Пример регистрации (`extensions/capital`)
```ts
// extensions/capital/app/extensions.ts
import { decisionFactory } from 'src/shared/lib/decision-factory'
import { CreateResultDecisionInfoWidget } from '../widgets/CreateResultDecisionInfoWidget'
import { useGenerateResultContributionDecision } from '../features/Result/.../model'
export function registerCapitalDecisionHandlers() {
decisionFactory.registerHandler('createresult', {
generateHandler: async ({ decision_id, username, row }) => {
const meta = JSON.parse(row.table.statement.meta) as { result_hash: string }
const { generateResultContributionDecision } = useGenerateResultContributionDecision()
return generateResultContributionDecision({ result_hash: meta.result_hash, decision_id, username })
},
infoComponent: CreateResultDecisionInfoWidget,
})
}
```
Регистрация вызывается из `install.ts` расширения **до** `return` workspace-
конфигурации, чтобы стол совета увидел handler раньше первого ренда.
## ProcessInfoFactory — стол бухгалтера
### Контракт
```ts
// shared/lib/types/process-info-factory.ts
interface IProcessInfoProps {
processHash: string
processType: string
coopname: string
}
interface IProcessInfoHandler {
infoComponent: Component<IProcessInfoProps>
}
```
`infoComponent` получает три props и должен:
- сам подтянуть `IProcessSnapshot` через `useProcessStore().loadLatestSnapshot({ coopname, hash: processHash })`;
- отрисовать бизнес-поля из снэпшота;
- дать кнопку-deep-link на свой собственный стол расширения с
`query: { process_hash: processHash }`.
### Пример регистрации (`extensions/market`)
```ts
// extensions/market/app/extensions.ts
import { Ledger2 } from 'cooptypes'
import { processInfoFactory } from 'src/shared/lib/process-info-factory'
import { ProcessSupplyInfoWidget } from 'src/widgets/Marketplace/ProcessSupplyInfoWidget'
import { ProcessReturnInfoWidget } from 'src/widgets/Marketplace/ProcessReturnInfoWidget'
import { ProcessWriteoffInfoWidget } from 'src/widgets/Marketplace/ProcessWriteoffInfoWidget'
function processTypeByName(name: string): string {
const meta = Ledger2.LEDGER2_PROCESS_REGISTRY.find(
(p) => p.contract === 'marketplace' && p.name === name,
)
if (!meta) throw new Error(`process_type marketplace::${name} отсутствует в LEDGER2_PROCESS_REGISTRY`)
return meta.type
}
export function registerMarketplaceProcessInfoHandlers(): void {
processInfoFactory.registerHandler(processTypeByName('SUPPLY'), { infoComponent: ProcessSupplyInfoWidget })
processInfoFactory.registerHandler(processTypeByName('RETURN'), { infoComponent: ProcessReturnInfoWidget })
processInfoFactory.registerHandler(processTypeByName('WRITEOFF'), { infoComponent: ProcessWriteoffInfoWidget })
}
```
Ключ берётся из `Ledger2.LEDGER2_PROCESS_REGISTRY` через `name`-поле, а не
строковым литералом — переименование `process_type` в cooptypes
автоматически подцепится.
Вызов `registerMarketplaceProcessInfoHandlers()` стоит в `install.ts`
расширения до `return`.
## Чек-лист для нового расширения
1. Завести виджет(ы) `widgets/.../<DomainName>InfoWidget``<template lang="pug">`,
бизнес-поля + deep-link, никаких raw enum / process_type / hash в видимой части.
2. Создать `extensions/<name>/app/extensions.ts` с функцией
`register<Name>(Decision|ProcessInfo)Handlers()`.
3. Импортировать и вызвать её в `extensions/<name>/install.ts` до `return`.
4. Если новый `process_type` или `decision_type` — добавить запись в
соответствующий реестр (`cooptypes` для процессов; backend-реестр для
решений). Иначе фабрика правильно молчит, но строка в общем столе
останется без бизнес-блока.
5. На своём собственном столе расширения не пытаться повторить реестр
операций / проводок / повестки. Если нужно «открыть процесс» — это
deep-link в общий стол.
## Связанные файлы
- `components/desktop/src/shared/lib/decision-factory/index.ts`
- `components/desktop/src/shared/lib/process-info-factory/index.ts`
- `components/desktop/src/shared/lib/types/decision-factory.ts`
- `components/desktop/src/shared/lib/types/process-info-factory.ts`
- `components/desktop/src/widgets/Questions/QuestionsTable/QuestionsTable.vue` — рендер слота на столе совета
- `components/desktop/extensions/reports/pages/OperationsPage/ui/OperationsPage.vue` — рендер слота на столе бухгалтера
- `components/desktop/src/entities/Process` — api / store для `processInfoFactory`-виджетов
- `components/desktop/extensions/capital/app/extensions.ts` — образец `decisionFactory`-регистрации
- `components/desktop/extensions/market/app/extensions.ts` — образец `processInfoFactory`-регистрации
@@ -0,0 +1,40 @@
import { Ledger2 } from 'cooptypes'
import { processInfoFactory } from 'src/shared/lib/process-info-factory'
import { ProcessSupplyInfoWidget } from 'src/widgets/Marketplace/ProcessSupplyInfoWidget'
import { ProcessReturnInfoWidget } from 'src/widgets/Marketplace/ProcessReturnInfoWidget'
import { ProcessWriteoffInfoWidget } from 'src/widgets/Marketplace/ProcessWriteoffInfoWidget'
/**
* Регистрация прикладных info-widget'ов «Содержание процесса» для стола
* бухгалтера. Сами проводки/кошельки/документы остаются в `extensions/reports`
* — здесь мы только описываем бизнес-смысл процессов marketplace, чтобы
* председатель и бухгалтер видели заказчика, поставщика, КУ, ссылку на
* соответствующий стол ПВЗ/админа.
*
* Идентификатор process_type берём из `Ledger2.LEDGER2_PROCESS_REGISTRY`
* (источник правды), а не строкой — переименование процесса синхронно
* подцепится по полю `name` (`SUPPLY` / `RETURN` / `WRITEOFF`).
*/
function processTypeByName(name: string): string {
const meta = Ledger2.LEDGER2_PROCESS_REGISTRY.find(
(p) => p.contract === 'marketplace' && p.name === name,
)
if (!meta) {
throw new Error(
`[market/extensions] process_type marketplace::${name} отсутствует в LEDGER2_PROCESS_REGISTRY`,
)
}
return meta.type
}
export function registerMarketplaceProcessInfoHandlers(): void {
processInfoFactory.registerHandler(processTypeByName('SUPPLY'), {
infoComponent: ProcessSupplyInfoWidget,
})
processInfoFactory.registerHandler(processTypeByName('RETURN'), {
infoComponent: ProcessReturnInfoWidget,
})
processInfoFactory.registerHandler(processTypeByName('WRITEOFF'), {
infoComponent: ProcessWriteoffInfoWidget,
})
}
@@ -9,10 +9,15 @@ import { OrdererReadyToReceivePage } from 'src/pages/Marketplace/OrdererReadyToR
import { OrdererReturnClaimsPage } from 'src/pages/Marketplace/OrdererReturnClaims'
import { OperatorReturnClaimsPage } from 'src/pages/Marketplace/OperatorReturnClaims'
import { AdminWriteoffsPage } from 'src/pages/Marketplace/AdminWriteoffs'
import { OperatorOwnWarehousePage } from 'src/pages/Marketplace/OperatorOwnWarehouse'
import { AdminWarehouseSummaryPage } from 'src/pages/Marketplace/AdminWarehouseSummary'
import { EcosystemRegistryPage } from 'src/pages/Marketplace/EcosystemRegistry'
import type { IWorkspaceConfig } from 'src/shared/lib/types/workspace'
import { agreementsBase } from 'src/shared/lib/consts/workspaces'
import { registerMarketplaceProcessInfoHandlers } from './app/extensions'
export default async function (): Promise<IWorkspaceConfig[]> {
registerMarketplaceProcessInfoHandlers()
return [{
workspace: 'market',
extension_name: 'market',
@@ -116,6 +121,41 @@ export default async function (): Promise<IWorkspaceConfig[]> {
agreements: agreementsBase,
},
},
{
// Эпик 9 / Story 9.2: admin-стол сводного склада кооператива.
// Использует canon-виджет WarehouseSummaryGrid (UX-DR16) и поверх
// marketplace_inventory агрегирует приход/расход/остаток по
// ku × sku. Вторая вкладка — поток заказов/поставок (FR37/FR38),
// на MVP — табличные итоги, графики динамики подключаются по
// AR37 SDK-подписки платформы.
path: 'warehouse-summary',
name: 'marketplace-warehouse-summary',
component: markRaw(AdminWarehouseSummaryPage),
meta: {
title: 'Сводный склад',
icon: 'fa-solid fa-warehouse',
roles: ['chairman', 'member'],
requiresAuth: true,
agreements: agreementsBase,
},
},
{
// Эпик 9 / Story 9.4: раздел экосистемы — список controller'ов
// других кооперативов с расширением «Стол заказов». MVP — режим
// read-only заглушки до подключения платформенного
// `ecosystem_registry` (NFR-Sc2 / AR18). Полная активация —
// вторая фаза (межкооперативная торговля).
path: 'ecosystem',
name: 'marketplace-ecosystem',
component: markRaw(EcosystemRegistryPage),
meta: {
title: 'Экосистема',
icon: 'fa-solid fa-network-wired',
roles: ['chairman', 'member'],
requiresAuth: true,
agreements: agreementsBase,
},
},
{
// Витрина дизайн-системы (Эпик 10): открыта председателю и членам совета
// для утверждения 13 custom-компонентов до их применения в эпиках 1-9.
@@ -199,6 +239,25 @@ export default async function (): Promise<IWorkspaceConfig[]> {
agreements: agreementsBase,
},
},
{
// Эпик 9 / Story 9.1: operator-стол «Склад моего КУ».
// Таблица marketplace_inventory отфильтрована по braname; per-row
// статусы (LABELED / ISSUED / RETURNED / WRITTEN_OFF), фильтры по
// статусу/orderer, summary count by status. Backend-доступ —
// `Warehouse: ['read:own-KU']` гарантирует, что оператор видит
// только свой участок. Real-time через AR37 SDK-подписки
// платформы (подключается отдельным шагом эпика).
path: 'warehouse',
name: 'marketplace-pvz-warehouse',
component: markRaw(OperatorOwnWarehousePage),
meta: {
title: 'Склад моего КУ',
icon: 'fa-solid fa-boxes-stacked',
roles: ['chairman'],
requiresAuth: true,
agreements: agreementsBase,
},
},
],
},
],
@@ -246,6 +246,21 @@ div.page-shell
q-td.text-right(:props='cp') {{ formatAmount(cp.row.quantity) }}
.text-caption.text-grey-6(v-else) Проводок нет
//- Слот расширения: содержание процесса в бизнес-терминах.
//- Рисуется только если соответствующее расширение зарегистрировало
//- свой info-widget через processInfoFactory.registerHandler.
.q-mt-md(v-if='props.row.processHash && hasProcessInfo(props.row)')
q-card(flat bordered)
q-card-section.q-pb-none
.text-subtitle2 Содержание процесса
q-card-section.q-pt-sm
component(
:is='processInfoComponent(props.row)'
:process-hash='props.row.processHash'
:process-type='rowProcessType(props.row) || ""'
:coopname='info.coopname'
)
template(#item='props')
.col-12
q-card.q-pa-md.q-mb-sm
@@ -291,6 +306,7 @@ import { useAccountStore } from 'src/entities/Account'
import { formatAsset2Digits } from 'src/shared/lib/utils'
import { DirectionCell, WalletIdCell, AccountIdCell } from '../../../shared/ui'
import { Ledger2 } from 'cooptypes'
import { processInfoFactory } from 'src/shared/lib/process-info-factory'
const { info } = useSystemStore()
const { isMobile } = useWindowSize()
@@ -323,6 +339,25 @@ function rowChipText(row: ILedger2Operation): string {
return row.operationCode ?? (row.action === 'walmove' ? 'o.adj.walmove' : row.action === 'revert' ? 'o.adj.rev' : '—')
}
/**
* Слот «Содержание процесса» рисуют прикладные расширения (marketplace,
* capital, …) через `processInfoFactory.registerHandler(process_type, …)`.
* Сама страница остаётся неизменной — она лишь даёт расширению место,
* чтобы показать заказчика, поставщика, состав заказа и deep-link на свой
* собственный стол. Без зарегистрированного компонента блок не появляется.
*/
function rowProcessType(row: ILedger2Operation): string | undefined {
return Ledger2.getOperationProcessType(row.operationCode)
}
function hasProcessInfo(row: ILedger2Operation): boolean {
const pt = rowProcessType(row)
return !!pt && processInfoFactory.hasHandler(pt)
}
function processInfoComponent(row: ILedger2Operation) {
const pt = rowProcessType(row)
return pt ? processInfoFactory.getInfoComponent(pt) : undefined
}
// Цветовая схема по контракту-источнику operation_code — пастельный chip +
// accent-полоска. operation_code имеет формат `o.<contract>.<verb>`, контракт
// лежит во втором сегменте (parts[1]).
@@ -0,0 +1,29 @@
import { Queries } from '@coopenomics/sdk'
import { client } from 'src/shared/api/client'
import type { IProcessGetInput, IProcessSnapshot, IProcessView } from '../types'
async function getProcess(input: IProcessGetInput): Promise<IProcessView | undefined> {
const { [Queries.Processes.GetProcess.name]: output } = await client.Query(
Queries.Processes.GetProcess.query,
{ variables: input },
)
return output
}
/**
* Текущий snapshot процесса = последний delta_history по block_num. На
* stale-данных или fresh-процессе массив может быть пустым — возвращаем null,
* чтобы прикладной слой не делал ни проверок длины, ни приведений.
*/
function pickLatestSnapshot(view: IProcessView | undefined): IProcessSnapshot | null {
const deltas = view?.delta_history ?? []
if (!deltas.length) return null
const latest = [...deltas].sort((a, b) => a.block_num - b.block_num).at(-1)
const raw = latest?.value
return (raw && typeof raw === 'object' ? (raw as IProcessSnapshot) : null)
}
export const processApi = {
getProcess,
pickLatestSnapshot,
}
@@ -0,0 +1,2 @@
export * from './types'
export * from './model'
@@ -0,0 +1 @@
export * from './store'
@@ -0,0 +1,38 @@
import { defineStore } from 'pinia'
import { ref, type Ref } from 'vue'
import { processApi } from '../api'
import type { IProcessGetInput, IProcessSnapshot, IProcessView } from '../types'
const namespace = 'processStore'
interface IProcessStore {
loading: Ref<boolean>
loadProcess: (input: IProcessGetInput) => Promise<IProcessView | undefined>
loadLatestSnapshot: (input: IProcessGetInput) => Promise<IProcessSnapshot | null>
}
export const useProcessStore = defineStore(namespace, (): IProcessStore => {
const loading = ref(false)
async function loadProcess(input: IProcessGetInput): Promise<IProcessView | undefined> {
loading.value = true
try {
return await processApi.getProcess(input)
} finally {
loading.value = false
}
}
async function loadLatestSnapshot(
input: IProcessGetInput,
): Promise<IProcessSnapshot | null> {
const view = await loadProcess(input)
return processApi.pickLatestSnapshot(view)
}
return {
loading,
loadProcess,
loadLatestSnapshot,
}
})
@@ -0,0 +1,20 @@
import type { Queries, Zeus } from '@coopenomics/sdk'
export type IProcessView =
Queries.Processes.GetProcess.IOutput[typeof Queries.Processes.GetProcess.name]
export type IProcessGetInput = Queries.Processes.GetProcess.IInput
export type IProcessDelta = NonNullable<IProcessView>['delta_history'][number]
export type IProcessAction = NonNullable<IProcessView>['actions'][number]
export type IProcessDocument = NonNullable<IProcessView>['documents'][number]
/**
* Текущий снэпшот процесса в bs-таблице расширения (marketplace::orders, …).
* GraphQL-схема отдаёт `value: JSON`, поэтому строгое описание полей даёт
* прикладной слой (см. info-widget'ы расширений). На уровне entity достаточно
* generic-формы.
*/
export type IProcessSnapshot = Record<string, unknown>
@@ -0,0 +1,17 @@
import { Queries } from '@coopenomics/sdk';
import { client } from 'src/shared/api/client';
export type MarketplaceInventoryItemView =
Queries.Marketplace.ListInventory.IOutput['marketplaceListInventory'][number];
export type IListInventoryInput = Queries.Marketplace.ListInventory.IInput['data'];
export async function listAllInventory(
data?: IListInventoryInput,
): Promise<MarketplaceInventoryItemView[]> {
const { [Queries.Marketplace.ListInventory.name]: result } = await client.Query(
Queries.Marketplace.ListInventory.query,
{ variables: { data: data ?? {} } },
);
return result;
}
@@ -0,0 +1 @@
export { AdminWarehouseSummaryPage } from './ui';
@@ -0,0 +1,211 @@
<template lang="pug">
q-page.mp-role-admin.q-pa-md
.row.items-center.q-mb-md
.text-h5.col Сводный склад кооператива
q-btn(
flat
no-caps
color='primary'
icon='refresh'
label='Обновить'
:loading='loading'
@click='load'
)
q-tabs.text-grey-7(
v-model='tab'
dense
align='left'
active-color='primary'
indicator-color='primary'
narrow-indicator
)
q-tab(name='warehouse' label='Сводный склад')
q-tab(name='flow' label='Поток заказов и поставок')
q-separator
q-tab-panels(v-model='tab' animated keep-alive)
q-tab-panel.q-px-none(name='warehouse')
.row.q-col-gutter-md.q-mb-md
q-card.mp-card.col-12.col-sm-3
q-card-section
.text-caption.text-grey-7 Активных позиций
.text-h6 {{ summary.totalActive }}
q-card.mp-card.col-12.col-sm-3
q-card-section
.text-caption.text-grey-7 КУ с движением
.text-h6 {{ summary.kuCount }}
q-card.mp-card.col-12.col-sm-3
q-card-section
.text-caption.text-grey-7 Товарных позиций в обороте
.text-h6 {{ summary.skuCount }}
q-card.mp-card.col-12.col-sm-3
q-card-section
.text-caption.text-grey-7 Списано (накопительно)
.text-h6 {{ summary.writtenOff }}
WarehouseSummaryGrid(:rows='warehouseRows')
q-tab-panel.q-px-none(name='flow')
.row.q-col-gutter-md.q-mb-md
q-card.mp-card.col-12.col-sm-3
q-card-section
.text-caption.text-grey-7 Маркировок за период
.text-h6 {{ flow.labeled }}
q-card.mp-card.col-12.col-sm-3
q-card-section
.text-caption.text-grey-7 Выдач пайщикам
.text-h6 {{ flow.issued }}
q-card.mp-card.col-12.col-sm-3
q-card-section
.text-caption.text-grey-7 Возвратов на склад
.text-h6 {{ flow.returned }}
q-card.mp-card.col-12.col-sm-3
q-card-section
.text-caption.text-grey-7 Списаний
.text-h6 {{ flow.writtenOff }}
q-table.mp-card(
:rows='topProducts'
:columns='topColumns'
row-key='sku'
flat
bordered
dense
:pagination='{ rowsPerPage: 10 }'
:rows-per-page-options='[10, 25, 50]'
binary-state-sort
)
template(#top)
.text-subtitle1 Топ позиций по обороту
</template>
<script lang="ts" setup>
import { computed, onMounted, ref } from 'vue'
import type { QTableProps } from 'quasar'
import { Zeus } from '@coopenomics/sdk'
import { FailAlert } from 'src/shared/api'
import {
WarehouseSummaryGrid,
type WarehouseRow,
} from 'src/widgets/Marketplace/WarehouseSummaryGrid'
import { listAllInventory, type MarketplaceInventoryItemView } from '../api'
const tab = ref<'warehouse' | 'flow'>('warehouse')
const items = ref<MarketplaceInventoryItemView[]>([])
const loading = ref(false)
async function load(): Promise<void> {
loading.value = true
try {
items.value = await listAllInventory({})
} catch (e) {
FailAlert(e, 'Не удалось загрузить сводный склад')
} finally {
loading.value = false
}
}
onMounted(() => {
void load()
})
interface BucketKey {
ku: string
sku: string
title: string
}
const summary = computed(() => {
const kus = new Set<string>()
const skus = new Set<string>()
let active = 0
let writtenOff = 0
for (const row of items.value) {
kus.add(row.braname)
skus.add(row.product_name_snapshot)
if (row.status === Zeus.MarketplaceInventoryStatus.WRITTEN_OFF) writtenOff += row.quantity_per_label
else active += row.quantity_per_label
}
return {
totalActive: active,
writtenOff,
kuCount: kus.size,
skuCount: skus.size,
}
})
const warehouseRows = computed<WarehouseRow[]>(() => {
const buckets = new Map<string, { key: BucketKey; in: number; out: number; balance: number }>()
for (const row of items.value) {
const k = `${row.braname}::${row.product_name_snapshot}`
const b = buckets.get(k) ?? {
key: { ku: row.braname, sku: row.product_name_snapshot, title: row.product_name_snapshot },
in: 0,
out: 0,
balance: 0,
}
const qty = row.quantity_per_label
if (
row.status === Zeus.MarketplaceInventoryStatus.LABELED ||
row.status === Zeus.MarketplaceInventoryStatus.RETURNED
) {
b.in += qty
b.balance += qty
} else if (row.status === Zeus.MarketplaceInventoryStatus.ISSUED) {
b.out += qty
} else if (row.status === Zeus.MarketplaceInventoryStatus.WRITTEN_OFF) {
b.in += qty
b.out += qty
}
buckets.set(k, b)
}
return [...buckets.values()].map((b) => ({
sku: b.key.sku,
title: b.key.title,
pvz: b.key.ku,
incoming: b.in,
outgoing: b.out,
balance: b.balance,
unit: 'шт',
}))
})
const flow = computed(() => {
let labeled = 0
let issued = 0
let returned = 0
let writtenOff = 0
for (const row of items.value) {
const qty = row.quantity_per_label
if (row.status === Zeus.MarketplaceInventoryStatus.LABELED) labeled += qty
if (row.status === Zeus.MarketplaceInventoryStatus.ISSUED) issued += qty
if (row.status === Zeus.MarketplaceInventoryStatus.RETURNED) returned += qty
if (row.status === Zeus.MarketplaceInventoryStatus.WRITTEN_OFF) writtenOff += qty
}
return { labeled, issued, returned, writtenOff }
})
const topProducts = computed(() => {
const totals = new Map<string, { sku: string; turnover: number; ku: Set<string> }>()
for (const row of items.value) {
const entry =
totals.get(row.product_name_snapshot) ??
{ sku: row.product_name_snapshot, turnover: 0, ku: new Set<string>() }
entry.turnover += row.quantity_per_label
entry.ku.add(row.braname)
totals.set(row.product_name_snapshot, entry)
}
return [...totals.values()]
.map((e) => ({ sku: e.sku, turnover: e.turnover, ku_count: e.ku.size }))
.sort((a, b) => b.turnover - a.turnover)
.slice(0, 10)
})
const topColumns: QTableProps['columns'] = [
{ name: 'sku', label: 'Позиция', field: 'sku', align: 'left', sortable: true },
{ name: 'turnover', label: 'Оборот, ед.', field: 'turnover', align: 'right', sortable: true },
{ name: 'ku_count', label: 'КУ', field: 'ku_count', align: 'right', sortable: true },
]
</script>
@@ -0,0 +1 @@
export { default as AdminWarehouseSummaryPage } from './AdminWarehouseSummaryPage.vue';
@@ -0,0 +1 @@
export { EcosystemRegistryPage } from './ui';
@@ -0,0 +1,27 @@
<template lang="pug">
q-page.mp-role-admin.q-pa-md
.text-h5.q-mb-md Экосистема кооперативов
q-card.mp-card.q-mb-md
q-card-section
.text-subtitle1 Текущий кооператив
.text-body2.text-grey-7.q-mt-xs
| Кооператив&nbsp;
strong {{ coopname || '—' }}
| установил расширение «Стол заказов».
q-card.mp-card
q-card-section
.text-subtitle1 Другие кооперативы с расширением «Стол заказов»
.row.items-center.q-pa-md.text-grey-7.q-gutter-sm
q-icon(name='info' size='20px')
.text-body2 Межкооперативная торговля включится позже.
</template>
<script lang="ts" setup>
import { computed } from 'vue'
import { useRoute } from 'vue-router'
const route = useRoute()
const coopname = computed(() => String(route.params.coopname ?? ''))
</script>
@@ -0,0 +1 @@
export { default as EcosystemRegistryPage } from './EcosystemRegistryPage.vue';
@@ -0,0 +1,17 @@
import { Queries } from '@coopenomics/sdk';
import { client } from 'src/shared/api/client';
export type MarketplaceInventoryItemView =
Queries.Marketplace.ListInventory.IOutput['marketplaceListInventory'][number];
export type IListInventoryInput = Queries.Marketplace.ListInventory.IInput['data'];
export async function listInventory(
data: IListInventoryInput,
): Promise<MarketplaceInventoryItemView[]> {
const { [Queries.Marketplace.ListInventory.name]: result } = await client.Query(
Queries.Marketplace.ListInventory.query,
{ variables: { data } },
);
return result;
}
@@ -0,0 +1 @@
export { OperatorOwnWarehousePage } from './ui';
@@ -0,0 +1,201 @@
<template lang="pug">
q-page.mp-role-operator.q-pa-md
.text-h5.q-mb-md Склад моего КУ
q-card.mp-card.q-mb-md
q-card-section.q-gutter-sm
.row.q-col-gutter-sm.items-end
q-input.col-12.col-sm-4(
v-model='braname'
label='Код кооперативного участка'
dense
outlined
@keyup.enter='load'
)
q-select.col-12.col-sm-3(
v-model='statusFilter'
:options='statusOptions'
label='Состояние'
dense
outlined
multiple
emit-value
map-options
)
q-input.col-12.col-sm-3(
v-model='ordererFilter'
label='Заказчик'
dense
outlined
)
q-btn.col-12.col-sm-2(
color='primary'
label='Обновить'
:loading='loading'
@click='load'
)
.row.q-col-gutter-md.q-mb-md(v-if='items.length')
q-card.mp-card.col-12.col-sm-3
q-card-section
.text-caption.text-grey-7 Активных наклеек
.text-h6 {{ summary.totalActive }}
q-card.mp-card.col-12.col-sm-3(
v-for='(count, status) in summary.byStatus'
:key='status'
)
q-card-section
.text-caption.text-grey-7 {{ humanStatus(status) }}
.text-h6 {{ count }}
q-table.mp-card(
:rows='filteredRows'
:columns='columns'
row-key='id'
:loading='loading'
:pagination='{ rowsPerPage: 25, sortBy: "labeled_at", descending: true }'
:rows-per-page-options='[25, 50, 100, 0]'
flat
bordered
binary-state-sort
)
template(#body-cell-status='props')
q-td(:props='props')
span.mp-status-chip(:class='statusChipClass(props.row.status)')
| {{ humanStatus(props.row.status) }}
template(#body-cell-age='props')
q-td(:props='props') {{ formatAge(props.row.labeled_at) }}
template(#body-cell-labeled_at='props')
q-td(:props='props') {{ formatDateTime(props.row.labeled_at) }}
template(#no-data)
.full-width.text-center.q-pa-md.text-grey-7
| {{ braname
| ? 'Наклеек по этому КУ нет — проверьте код или фильтры по состояниям.'
| : 'Введите код КУ и нажмите «Обновить».' }}
</template>
<script lang="ts" setup>
import { computed, onMounted, ref } from 'vue'
import type { QTableProps } from 'quasar'
import { FailAlert } from 'src/shared/api'
import { Zeus } from '@coopenomics/sdk'
import { listInventory, type MarketplaceInventoryItemView } from '../api'
const braname = ref<string>('')
const statusFilter = ref<MarketplaceInventoryItemView['status'][]>([])
const ordererFilter = ref<string>('')
const items = ref<MarketplaceInventoryItemView[]>([])
const loading = ref(false)
type InventoryStatus = MarketplaceInventoryItemView['status']
const statusOptions: { label: string; value: InventoryStatus }[] = [
{ label: 'На складе', value: Zeus.MarketplaceInventoryStatus.LABELED },
{ label: 'Выдано пайщику', value: Zeus.MarketplaceInventoryStatus.ISSUED },
{ label: 'Возврат на склад', value: Zeus.MarketplaceInventoryStatus.RETURNED },
{ label: 'Списано', value: Zeus.MarketplaceInventoryStatus.WRITTEN_OFF },
]
const columns: QTableProps['columns'] = [
{ name: 'barcode_value', label: 'Штрих-код', field: 'barcode_value', align: 'left', sortable: true },
{ name: 'product', label: 'Товар', field: 'product_name_snapshot', align: 'left', sortable: true },
{ name: 'orderer', label: 'Заказчик', field: 'orderer_account_snapshot', align: 'left', sortable: true },
{ name: 'quantity', label: 'Ед.', field: 'quantity_per_label', align: 'right', sortable: true },
{ name: 'status', label: 'Состояние', field: 'status', align: 'left', sortable: true },
{ name: 'age', label: 'Возраст', field: 'labeled_at', align: 'right' },
{ name: 'labeled_at', label: 'Промаркировано', field: 'labeled_at', align: 'left', sortable: true },
]
const filteredRows = computed(() => {
const orderer = ordererFilter.value.trim().toLowerCase()
return items.value.filter((row) => {
if (statusFilter.value.length && !statusFilter.value.includes(row.status)) return false
if (orderer && !row.orderer_account_snapshot.toLowerCase().includes(orderer)) return false
return true
})
})
const summary = computed(() => {
const byStatus: Record<string, number> = {}
for (const row of items.value) {
byStatus[row.status] = (byStatus[row.status] ?? 0) + 1
}
return {
byStatus,
totalActive:
(byStatus[Zeus.MarketplaceInventoryStatus.LABELED] ?? 0) +
(byStatus[Zeus.MarketplaceInventoryStatus.ISSUED] ?? 0) +
(byStatus[Zeus.MarketplaceInventoryStatus.RETURNED] ?? 0),
}
})
async function load(): Promise<void> {
if (!braname.value.trim()) {
items.value = []
return
}
loading.value = true
try {
items.value = await listInventory({ braname: braname.value.trim() })
} catch (e) {
FailAlert(e, 'Не удалось загрузить склад КУ')
} finally {
loading.value = false
}
}
onMounted(() => {
void load()
})
function humanStatus(status: string): string {
switch (status) {
case Zeus.MarketplaceInventoryStatus.LABELED:
return 'На складе'
case Zeus.MarketplaceInventoryStatus.ISSUED:
return 'Выдано пайщику'
case Zeus.MarketplaceInventoryStatus.RETURNED:
return 'Возврат на склад'
case Zeus.MarketplaceInventoryStatus.WRITTEN_OFF:
return 'Списано'
default:
return status
}
}
function statusChipClass(status: string): string {
switch (status) {
case Zeus.MarketplaceInventoryStatus.LABELED:
return 'mp-status-chip--info'
case Zeus.MarketplaceInventoryStatus.ISSUED:
return 'mp-status-chip--success'
case Zeus.MarketplaceInventoryStatus.RETURNED:
return 'mp-status-chip--warning'
case Zeus.MarketplaceInventoryStatus.WRITTEN_OFF:
return 'mp-status-chip--error'
default:
return 'mp-status-chip--neutral'
}
}
function formatAge(value: unknown): string {
if (value === null || value === undefined) return '—'
const parsed = new Date(String(value))
if (Number.isNaN(parsed.getTime())) return '—'
const days = Math.floor((Date.now() - parsed.getTime()) / 86_400_000)
if (days <= 0) return 'сегодня'
if (days === 1) return '1 день'
if (days < 5) return `${days} дня`
return `${days} дней`
}
function formatDateTime(value: unknown): string {
if (value === null || value === undefined) return '—'
const parsed = new Date(String(value))
if (Number.isNaN(parsed.getTime())) return '—'
return parsed.toLocaleString('ru-RU')
}
</script>
@@ -0,0 +1 @@
export { default as OperatorOwnWarehousePage } from './OperatorOwnWarehousePage.vue';
@@ -0,0 +1,41 @@
import type {
IProcessInfoHandler,
ProcessInfoComponent,
ProcessInfoHandlersRegistry,
} from '../types/process-info-factory'
/**
* Фабрика расширений для столбца «Содержание процесса» на столе бухгалтера.
* Каждое прикладное расширение (marketplace, capital, registrator, …)
* регистрирует один Vue-компонент на каждый известный ему process_type.
* Сам стол бухгалтера остаётся source-of-truth по проводкам, кошелькам и
* документам — дополнительный widget показывает только бизнес-описание
* операции (кто заказчик, кто поставщик, состав, deep-link на стол расширения).
*/
class ProcessInfoFactory {
private handlers: ProcessInfoHandlersRegistry = {}
registerHandler(processType: string, handler: IProcessInfoHandler): void {
this.handlers[processType] = handler
}
getInfoComponent(processType: string): ProcessInfoComponent | undefined {
return this.handlers[processType]?.infoComponent
}
hasHandler(processType: string): boolean {
return processType in this.handlers
}
getRegisteredTypes(): string[] {
return Object.keys(this.handlers)
}
}
export const processInfoFactory = new ProcessInfoFactory()
export { ProcessInfoFactory }
export type {
IProcessInfoHandler,
ProcessInfoComponent,
ProcessInfoHandlersRegistry,
} from '../types/process-info-factory'
@@ -0,0 +1,15 @@
import type { Component } from 'vue'
export interface IProcessInfoProps {
processHash: string
processType: string
coopname: string
}
export type ProcessInfoComponent = Component<IProcessInfoProps>
export interface IProcessInfoHandler {
infoComponent: ProcessInfoComponent
}
export type ProcessInfoHandlersRegistry = Record<string, IProcessInfoHandler>
@@ -0,0 +1,87 @@
<template lang="pug">
.process-return-info
div(v-if='loading')
q-spinner(size='sm')
span.q-ml-sm.text-grey-7 Загрузка содержания заявления
div(v-else-if='snapshot')
.row.q-col-gutter-md
.col-12.col-sm-6
.text-caption.text-grey-7 Тип процесса
.text-body2.text-weight-medium Гарантийный возврат имущества
.col-12.col-sm-6
.text-caption.text-grey-7 Кооперативный участок (КУ)
.text-body2 {{ field('braname') || '—' }}
.col-12.col-sm-6
.text-caption.text-grey-7 Заказчик
.text-body2.font-monospace {{ field('orderer') || field('orderer_account') || '—' }}
.col-12.col-sm-6
.text-caption.text-grey-7 Состояние заявления
.text-body2 {{ field('status') || '—' }}
.col-12.col-sm-6
.text-caption.text-grey-7 Исходный заказ
.text-body2.font-monospace {{ shortHash(field('order_hash') || field('parent_order_hash')) }}
.col-12.col-sm-6
.text-caption.text-grey-7 Причина обращения
.text-body2 {{ field('reason') || '—' }}
.row.q-mt-md
q-btn(
flat
no-caps
color='primary'
icon='fa-solid fa-up-right-from-square'
label='Открыть заявление на столе ПВЗ'
:to='deepLink'
)
div(v-else)
.text-caption.text-grey-7 Содержание заявления ещё не доступно.
</template>
<script lang="ts" setup>
import { computed, onMounted, ref } from 'vue'
import { useProcessStore, type IProcessSnapshot } from 'src/entities/Process'
interface Props {
processHash: string
processType: string
coopname: string
}
const props = defineProps<Props>()
const processStore = useProcessStore()
const loading = ref(true)
const snapshot = ref<IProcessSnapshot | null>(null)
function field(name: string): string {
const v = snapshot.value?.[name]
return typeof v === 'string' ? v : v != null ? String(v) : ''
}
function shortHash(v: string): string {
if (!v) return '—'
return v.length > 16 ? `${v.slice(0, 8)}${v.slice(-4)}` : v
}
const deepLink = computed(() => ({
name: 'marketplace-pvz-returns',
params: { coopname: props.coopname },
query: { process_hash: props.processHash },
}))
onMounted(async () => {
try {
snapshot.value = await processStore.loadLatestSnapshot({
coopname: props.coopname,
hash: props.processHash,
})
} finally {
loading.value = false
}
})
</script>
<style lang="scss" scoped>
.font-monospace {
font-family: 'JetBrains Mono', 'Courier New', monospace;
letter-spacing: 0.03em;
}
</style>
@@ -0,0 +1 @@
export { default as ProcessReturnInfoWidget } from './ProcessReturnInfoWidget.vue'
@@ -0,0 +1,82 @@
<template lang="pug">
.process-supply-info
div(v-if='loading')
q-spinner(size='sm')
span.q-ml-sm.text-grey-7 Загрузка содержания заказа
div(v-else-if='snapshot')
.row.q-col-gutter-md
.col-12.col-sm-6
.text-caption.text-grey-7 Тип процесса
.text-body2.text-weight-medium Поставка имущества кооперативу
.col-12.col-sm-6
.text-caption.text-grey-7 Кооперативный участок (КУ)
.text-body2 {{ field('braname') || '—' }}
.col-12.col-sm-6
.text-caption.text-grey-7 Заказчик
.text-body2.font-monospace {{ field('orderer') || field('orderer_account') || '—' }}
.col-12.col-sm-6
.text-caption.text-grey-7 Поставщик
.text-body2.font-monospace {{ field('offerer') || field('offerer_account') || '—' }}
.col-12.col-sm-6
.text-caption.text-grey-7 Состояние заказа
.text-body2 {{ field('status') || '—' }}
.col-12.col-sm-6
.text-caption.text-grey-7 Единиц в заказе
.text-body2 {{ field('units_total') || field('units') || '—' }}
.row.q-mt-md
q-btn(
flat
no-caps
color='primary'
icon='fa-solid fa-up-right-from-square'
label='Открыть заказ на столе ПВЗ'
:to='deepLink'
)
div(v-else)
.text-caption.text-grey-7 Содержание заказа ещё не доступно.
</template>
<script lang="ts" setup>
import { computed, onMounted, ref } from 'vue'
import { useProcessStore, type IProcessSnapshot } from 'src/entities/Process'
interface Props {
processHash: string
processType: string
coopname: string
}
const props = defineProps<Props>()
const processStore = useProcessStore()
const loading = ref(true)
const snapshot = ref<IProcessSnapshot | null>(null)
function field(name: string): string {
const v = snapshot.value?.[name]
return typeof v === 'string' ? v : v != null ? String(v) : ''
}
const deepLink = computed(() => ({
name: 'marketplace-pvz-issuance',
params: { coopname: props.coopname },
query: { process_hash: props.processHash },
}))
onMounted(async () => {
try {
snapshot.value = await processStore.loadLatestSnapshot({
coopname: props.coopname,
hash: props.processHash,
})
} finally {
loading.value = false
}
})
</script>
<style lang="scss" scoped>
.font-monospace {
font-family: 'JetBrains Mono', 'Courier New', monospace;
letter-spacing: 0.03em;
}
</style>
@@ -0,0 +1 @@
export { default as ProcessSupplyInfoWidget } from './ProcessSupplyInfoWidget.vue'
@@ -0,0 +1,96 @@
<template lang="pug">
.process-writeoff-info
div(v-if='loading')
q-spinner(size='sm')
span.q-ml-sm.text-grey-7 Загрузка проекта решения
div(v-else-if='snapshot')
.row.q-col-gutter-md
.col-12.col-sm-6
.text-caption.text-grey-7 Тип процесса
.text-body2.text-weight-medium Списание скоропорта
.col-12.col-sm-6
.text-caption.text-grey-7 Источник проекта
.text-body2 {{ triggerLabel }}
.col-12.col-sm-6
.text-caption.text-grey-7 Состояние решения
.text-body2 {{ field('status') || '—' }}
.col-12.col-sm-6
.text-caption.text-grey-7 Расчётный цикл начат
.text-body2 {{ formatDate(field('cycle_started_at')) }}
.col-12.col-sm-6
.text-caption.text-grey-7 Итоговая сумма
.text-body2.font-monospace {{ field('total_amount') || '—' }}
.col-12.col-sm-6
.text-caption.text-grey-7 Решение совета
.text-body2 {{ field('decision_id') || 'не зарегистрировано' }}
.row.q-mt-md
q-btn(
flat
no-caps
color='primary'
icon='fa-solid fa-up-right-from-square'
label='Открыть проект на столе списания скоропорта'
:to='deepLink'
)
div(v-else)
.text-caption.text-grey-7 Содержание проекта ещё не доступно.
</template>
<script lang="ts" setup>
import { computed, onMounted, ref } from 'vue'
import { useProcessStore, type IProcessSnapshot } from 'src/entities/Process'
interface Props {
processHash: string
processType: string
coopname: string
}
const props = defineProps<Props>()
const processStore = useProcessStore()
const loading = ref(true)
const snapshot = ref<IProcessSnapshot | null>(null)
function field(name: string): string {
const v = snapshot.value?.[name]
return typeof v === 'string' ? v : v != null ? String(v) : ''
}
const triggerLabel = computed(() => {
const v = field('trigger')
if (v === 'cron') return 'Автоматический (ежемесячный)'
if (v === 'manual') return 'Ручной (по инициативе председателя)'
return '—'
})
function formatDate(value: string): string {
if (!value) return '—'
const d = new Date(value)
if (Number.isNaN(d.getTime())) return value
return d.toLocaleDateString('ru-RU')
}
const deepLink = computed(() => ({
name: 'marketplace-writeoffs',
params: { coopname: props.coopname },
query: { process_hash: props.processHash },
}))
onMounted(async () => {
try {
snapshot.value = await processStore.loadLatestSnapshot({
coopname: props.coopname,
hash: props.processHash,
})
} finally {
loading.value = false
}
})
</script>
<style lang="scss" scoped>
.font-monospace {
font-family: 'JetBrains Mono', 'Courier New', monospace;
letter-spacing: 0.03em;
}
</style>
@@ -0,0 +1 @@
export { default as ProcessWriteoffInfoWidget } from './ProcessWriteoffInfoWidget.vue'
+1
View File
@@ -18,6 +18,7 @@ export * as Notification from './notification'
export * as Onboarding from './onboarding'
export * as OneCoop from './onecoop'
export * as PaymentMethods from './paymentMethods'
export * as Processes from './processes'
export * as Registration from './registration'
export * as Reports from './reports'
export * as Search from './search'
@@ -0,0 +1,23 @@
import { processViewSelector } from '../../selectors/processes/processViewSelector'
import { $, type GraphQLTypes, type InputType, Selector } from '../../zeus/index'
export const name = 'process'
export const query = Selector('Query')({
[name]: [
{ coopname: $('coopname', 'String!'), hash: $('hash', 'String!') },
processViewSelector,
],
})
export interface IInput {
/**
* @private
*/
[key: string]: unknown
coopname: string
hash: string
}
export type IOutput = InputType<GraphQLTypes['Query'], typeof query>
@@ -0,0 +1,4 @@
/** Стандартный core ProcessRegistry: получение одного процесса по process_hash */
export * as GetProcess from './getProcess'
/** Стандартный core ProcessRegistry: листинг процессов с фильтрами и пагинацией */
export * as ListProcesses from './listProcesses'
@@ -0,0 +1,26 @@
import { processSummaryPaginationSelector } from '../../selectors/processes/processSummarySelector'
import { $, type GraphQLTypes, type InputType, type ModelTypes, Selector } from '../../zeus/index'
export const name = 'processes'
export const query = Selector('Query')({
[name]: [
{
filter: $('filter', 'ProcessesFilter!'),
pagination: $('pagination', 'PaginationInput!'),
},
processSummaryPaginationSelector,
],
})
export interface IInput {
/**
* @private
*/
[key: string]: unknown
filter: ModelTypes['ProcessesFilter']
pagination: ModelTypes['PaginationInput']
}
export type IOutput = InputType<GraphQLTypes['Query'], typeof query>
@@ -0,0 +1,23 @@
import { Selector, type ValueTypes } from '../../zeus/index'
import type { MakeAllFieldsRequired } from '../../utils/MakeAllFieldsRequired'
const rawProcessSummarySelector = {
coopname: true,
firstSeenAt: true,
lastSeenAt: true,
processHash: true,
processType: true,
username: true,
}
const _validateSummary: MakeAllFieldsRequired<ValueTypes['ProcessSummary']> =
rawProcessSummarySelector
export const processSummarySelector = Selector('ProcessSummary')(rawProcessSummarySelector)
export const processSummaryPaginationSelector = Selector('ProcessSummaryPaginationResult')({
currentPage: true,
totalCount: true,
totalPages: true,
items: rawProcessSummarySelector,
})
@@ -0,0 +1,64 @@
import { Selector, type ValueTypes } from '../../zeus/index'
import type { MakeAllFieldsRequired } from '../../utils/MakeAllFieldsRequired'
const rawActionSelector = {
id: true,
account: true,
name: true,
data: true,
block_num: true,
block_id: true,
global_sequence: true,
transaction_id: true,
created_at: true,
}
const _validateAction: MakeAllFieldsRequired<ValueTypes['ProcessAction']> = rawActionSelector
const rawDeltaSelector = {
id: true,
code: true,
scope: true,
table: true,
primary_key: true,
present: true,
value: true,
block_num: true,
created_at: true,
}
const _validateDelta: MakeAllFieldsRequired<ValueTypes['ProcessDelta']> = rawDeltaSelector
const rawDocumentSourceSelector = {
code: true,
table: true,
field: true,
primary_key: true,
}
const _validateDocSource: MakeAllFieldsRequired<ValueTypes['ProcessDocumentSource']> =
rawDocumentSourceSelector
const rawDocumentSelector = {
hash: true,
source: rawDocumentSourceSelector,
document: true,
raw: true,
}
const _validateDoc: MakeAllFieldsRequired<ValueTypes['ProcessDocument']> = rawDocumentSelector
const rawProcessViewSelector = {
process_type: true,
process_hash: true,
coopname: true,
first_seen_at: true,
last_seen_at: true,
actions: rawActionSelector,
delta_history: rawDeltaSelector,
documents: rawDocumentSelector,
}
const _validateView: MakeAllFieldsRequired<ValueTypes['ProcessView']> = rawProcessViewSelector
export const processViewSelector = Selector('ProcessView')(rawProcessViewSelector)
+91
View File
@@ -686,6 +686,9 @@ export const AllTypesProps: Record<string,any> = {
MarketplaceCreateShipmentInput:{
groups:"MarketplaceShipmentGroupInput"
},
MarketplaceCreateWriteoffDraftInput:{
items:"MarketplaceWriteoffItemInput"
},
MarketplaceDeclineConsolidatedRequestInput:{
},
@@ -752,6 +755,9 @@ export const AllTypesProps: Record<string,any> = {
MarketplaceListShipmentsInput:{
statuses:"MarketplaceShipmentStatus"
},
MarketplaceListWriteoffProposalsInput:{
statuses:"MarketplaceWriteoffProposalStatus"
},
MarketplaceOpenIssuanceInput:{
signed_document:"MarketplaceIssueActSignedDocumentInput"
},
@@ -803,14 +809,28 @@ export const AllTypesProps: Record<string,any> = {
MarketplaceSignAplReceptionInput:{
signed_documents:"MarketplaceAplReceptionSignedDocumentInput"
},
MarketplaceSubmitWriteoffDraftInput:{
signed_statement:"SignedDigitalDocumentInput"
},
MarketplaceTriggerOpenSubscriptionInput:{
},
MarketplaceUpdateOfferInput:{
barcode_strategy:"MarketplaceBarcodeStrategy"
},
MarketplaceUpdateWriteoffDraftInput:{
items:"MarketplaceWriteoffItemInput"
},
MarketplaceWithdrawOfferInput:{
},
MarketplaceWriteoffItemInput:{
},
MarketplaceWriteoffProposalStatus: "enum" as const,
MarketplaceWriteoffProposalTrigger: "enum" as const,
MarketplaceWriteoffStatementSignablePayloadInput:{
},
MoveCapitalIssueToComponentInput:{
@@ -1294,6 +1314,9 @@ export const AllTypesProps: Record<string,any> = {
},
marketplaceCancelOrder:{
input:"MarketplaceCancelOrderInput"
},
marketplaceCancelWriteoffDraft:{
},
marketplaceCreateAplReception:{
data:"MarketplaceCreateAplReceptionInput"
@@ -1313,6 +1336,9 @@ export const AllTypesProps: Record<string,any> = {
marketplaceCreateShipment:{
data:"MarketplaceCreateShipmentInput"
},
marketplaceCreateWriteoffDraft:{
data:"MarketplaceCreateWriteoffDraftInput"
},
marketplaceDeclineConsolidatedRequest:{
input:"MarketplaceDeclineConsolidatedRequestInput"
},
@@ -1367,12 +1393,18 @@ export const AllTypesProps: Record<string,any> = {
marketplaceSignAplReceptionAsSupplier:{
data:"MarketplaceSignAplReceptionInput"
},
marketplaceSubmitWriteoffDraft:{
data:"MarketplaceSubmitWriteoffDraftInput"
},
marketplaceTriggerOpenSubscription:{
input:"MarketplaceTriggerOpenSubscriptionInput"
},
marketplaceUpdateOffer:{
input:"MarketplaceUpdateOfferInput"
},
marketplaceUpdateWriteoffDraft:{
data:"MarketplaceUpdateWriteoffDraftInput"
},
marketplaceWithdrawOffer:{
input:"MarketplaceWithdrawOfferInput"
},
@@ -1951,6 +1983,10 @@ export const AllTypesProps: Record<string,any> = {
input:"MarketplaceListOrdersInput",
options:"PaginationInput"
},
marketplaceListWriteoffProposals:{
data:"MarketplaceListWriteoffProposalsInput",
options:"PaginationInput"
},
marketplaceRequiredAttributes:{
data:"GetRequiredAttributesInput"
},
@@ -1972,6 +2008,12 @@ export const AllTypesProps: Record<string,any> = {
marketplaceValidateAttributeValues:{
input:"ValidateAttributeValuesInput"
},
marketplaceWriteoffProposal:{
},
marketplaceWriteoffStatementSignablePayload:{
data:"MarketplaceWriteoffStatementSignablePayloadInput"
},
onecoopGetDocuments:{
data:"GetOneCoopDocumentsInput"
},
@@ -4337,6 +4379,41 @@ export const ReturnTypes: Record<string,any> = {
member_account:"String",
role:"String"
},
MarketplaceWriteoffDecisionEntry:{
action:"String",
actor:"String",
at:"String"
},
MarketplaceWriteoffProposal:{
authorized_at:"String",
coopname:"String",
created_at:"String",
cycle_started_at:"String",
decided_by_account:"String",
decision_id:"Int",
decision_log:"MarketplaceWriteoffDecisionEntry",
executed_at:"String",
id:"String",
items:"MarketplaceWriteoffProposalItem",
proposal_hash:"String",
proposed_by_account:"String",
reject_reason:"String",
rejected_at:"String",
status:"MarketplaceWriteoffProposalStatus",
submitted_at:"String",
total_amount:"String",
trigger:"MarketplaceWriteoffProposalTrigger",
updated_at:"String"
},
MarketplaceWriteoffProposalItem:{
amount:"String",
asset_title:"String",
braname:"String",
executed:"Boolean",
inventory_id:"String",
quantity:"String",
reason:"String"
},
MatrixAccountStatusResponseDTO:{
hasAccount:"Boolean",
iframeUrl:"String",
@@ -4592,6 +4669,7 @@ export const ReturnTypes: Record<string,any> = {
marketplaceApproveOffer:"MarketplaceOffer",
marketplaceApproveReturnVisit:"MarketplaceReturnClaimResult",
marketplaceCancelOrder:"MarketplaceCancelOrderResult",
marketplaceCancelWriteoffDraft:"Boolean",
marketplaceClearAvailableCategories:"Boolean",
marketplaceCreateAplReception:"MarketplaceAplReceptionResult",
marketplaceCreateOffer:"MarketplaceOffer",
@@ -4599,6 +4677,7 @@ export const ReturnTypes: Record<string,any> = {
marketplaceCreateRequest:"MarketplaceRequest",
marketplaceCreateReturnClaim:"MarketplaceReturnClaimResult",
marketplaceCreateShipment:"MarketplaceCreateShipmentResult",
marketplaceCreateWriteoffDraft:"MarketplaceWriteoffProposal",
marketplaceDeclineConsolidatedRequest:"MarketplaceConsolidatedRequestActionResult",
marketplaceDeclineIndividualOrder:"MarketplaceSupplierOrderActionResult",
marketplaceDeclineOrderFromOpenPool:"MarketplaceSupplierOrderActionResult",
@@ -4617,8 +4696,10 @@ export const ReturnTypes: Record<string,any> = {
marketplaceSetKUStatus:"MarketplaceKUDetails",
marketplaceSignAplReceptionAsChairman:"MarketplaceAplReceptionResult",
marketplaceSignAplReceptionAsSupplier:"MarketplaceAplReceptionResult",
marketplaceSubmitWriteoffDraft:"MarketplaceWriteoffProposal",
marketplaceTriggerOpenSubscription:"MarketplaceConsolidatedRequest",
marketplaceUpdateOffer:"MarketplaceOffer",
marketplaceUpdateWriteoffDraft:"MarketplaceWriteoffProposal",
marketplaceWithdrawOffer:"MarketplaceOffer",
notifyOnAnnualGeneralMeet:"MeetAggregate",
processConvertToAxonStatement:"Boolean",
@@ -4844,6 +4925,12 @@ export const ReturnTypes: Record<string,any> = {
totalCount:"Int",
totalPages:"Int"
},
PaginatedMarketplaceWriteoffProposals:{
currentPage:"Int",
items:"MarketplaceWriteoffProposal",
totalCount:"Int",
totalPages:"Int"
},
ParticipantAccount:{
braname:"String",
created_at:"DateTime",
@@ -5246,8 +5333,10 @@ export const ReturnTypes: Record<string,any> = {
marketplaceListShipments:"MarketplaceShipment",
marketplaceListSupplierOrders:"MarketplaceOrderPaginationResult",
marketplaceListWhitelist:"MarketplaceWhitelistEntry",
marketplaceListWriteoffProposals:"PaginatedMarketplaceWriteoffProposals",
marketplaceMemberWallet:"MarketplaceMemberWallet",
marketplaceOnboardingState:"MarketplaceOnboardingState",
marketplaceOpenWriteoffDraft:"MarketplaceWriteoffProposal",
marketplaceRegistrationOfferStatus:"MarketplaceRegistrationOfferStatus",
marketplaceRequiredAttributes:"MarketplaceAttribute",
marketplaceReturnClaim:"MarketplaceReturnClaim",
@@ -5257,6 +5346,8 @@ export const ReturnTypes: Record<string,any> = {
marketplaceSearchRequests:"MarketplaceRequest",
marketplaceValidateAttributeValues:"MarketplaceAttributeValidation",
marketplaceWhoAmI:"MarketplaceCurrentMember",
marketplaceWriteoffProposal:"MarketplaceWriteoffProposal",
marketplaceWriteoffStatementSignablePayload:"GeneratedDocument",
onecoopGetDocuments:"OneCoopDocumentsResponse",
process:"ProcessView",
processes:"ProcessSummaryPaginationResult",
+454
View File
@@ -6525,6 +6525,11 @@ export type ValueTypes = {
__typename?: boolean | `@${string}`,
['...on MarketplaceCreateShipmentResult']?: Omit<ValueTypes["MarketplaceCreateShipmentResult"], "...on MarketplaceCreateShipmentResult">
}>;
["MarketplaceCreateWriteoffDraftInput"]: {
/** Начало расчётного цикла, если отличается от текущего момента. */
cycle_started_at?: string | undefined | null | Variable<any, string>,
items: Array<ValueTypes["MarketplaceWriteoffItemInput"]> | Variable<any, string>
};
["MarketplaceCurrentMember"]: AliasType<{
core_roles?:boolean | `@${string}`,
marketplace_roles?:boolean | `@${string}`,
@@ -6839,6 +6844,9 @@ export type ValueTypes = {
cycle_id?: ValueTypes["ID"] | undefined | null | Variable<any, string>,
/** Фильтр по статусам партий. */
statuses?: Array<ValueTypes["MarketplaceShipmentStatus"]> | undefined | null | Variable<any, string>
};
["MarketplaceListWriteoffProposalsInput"]: {
statuses?: Array<ValueTypes["MarketplaceWriteoffProposalStatus"]> | undefined | null | Variable<any, string>
};
["MarketplaceMemberWallet"]: AliasType<{
coopname?:boolean | `@${string}`,
@@ -7561,6 +7569,11 @@ export type ValueTypes = {
apl_reception_id: ValueTypes["ID"] | Variable<any, string>,
/** Подписанные клиентом акты приёмки — один документ на каждый Order группы. Backend верифицирует подпись и отправляет on-chain signsupp/signchair с этим документом. */
signed_documents: Array<ValueTypes["MarketplaceAplReceptionSignedDocumentInput"]> | Variable<any, string>
};
["MarketplaceSubmitWriteoffDraftInput"]: {
draft_id: string | Variable<any, string>,
/** Подписанное председателем Заявление о списании скоропорта (registry_id=1106). */
signed_statement: ValueTypes["SignedDigitalDocumentInput"] | Variable<any, string>
};
/** Результат индивидуального приёма или отклонения заказа поставщиком. */
["MarketplaceSupplierOrderActionResult"]: AliasType<{
@@ -7592,6 +7605,10 @@ export type ValueTypes = {
unit_of_measure?: string | undefined | null | Variable<any, string>,
unlimited_flag?: boolean | undefined | null | Variable<any, string>,
warranty_days?: number | undefined | null | Variable<any, string>
};
["MarketplaceUpdateWriteoffDraftInput"]: {
id: string | Variable<any, string>,
items: Array<ValueTypes["MarketplaceWriteoffItemInput"]> | Variable<any, string>
};
["MarketplaceVitrine"]: AliasType<{
/** eosio::name кооператива-владельца витрины */
@@ -7642,6 +7659,76 @@ export type ValueTypes = {
}>;
["MarketplaceWithdrawOfferInput"]: {
id: string | Variable<any, string>
};
["MarketplaceWriteoffDecisionEntry"]: AliasType<{
action?:boolean | `@${string}`,
actor?:boolean | `@${string}`,
at?:boolean | `@${string}`,
__typename?: boolean | `@${string}`,
['...on MarketplaceWriteoffDecisionEntry']?: Omit<ValueTypes["MarketplaceWriteoffDecisionEntry"], "...on MarketplaceWriteoffDecisionEntry">
}>;
["MarketplaceWriteoffItemInput"]: {
/** Сумма списания в формате числа с 4 знаками после запятой. */
amount: string | Variable<any, string>,
asset_title: string | Variable<any, string>,
braname: string | Variable<any, string>,
inventory_id?: string | undefined | null | Variable<any, string>,
quantity: string | Variable<any, string>,
reason: string | Variable<any, string>
};
["MarketplaceWriteoffProposal"]: AliasType<{
authorized_at?:boolean | `@${string}`,
coopname?:boolean | `@${string}`,
created_at?:boolean | `@${string}`,
cycle_started_at?:boolean | `@${string}`,
/** Аккаунт, принявший финальное решение. */
decided_by_account?:boolean | `@${string}`,
decision_id?:boolean | `@${string}`,
decision_log?:ValueTypes["MarketplaceWriteoffDecisionEntry"],
executed_at?:boolean | `@${string}`,
/** Идентификатор проекта в системе кооператива. */
id?:boolean | `@${string}`,
items?:ValueTypes["MarketplaceWriteoffProposalItem"],
/** Канонический хеш проекта, используется как process_hash on-chain (wroffprops, soviet.decisions). */
proposal_hash?:boolean | `@${string}`,
/** Аккаунт инициатора проекта (председатель / админ). */
proposed_by_account?:boolean | `@${string}`,
/** Причина отказа совета (если REJECTED). */
reject_reason?:boolean | `@${string}`,
rejected_at?:boolean | `@${string}`,
status?:boolean | `@${string}`,
submitted_at?:boolean | `@${string}`,
/** Σ сумм всех позиций (форматированный asset, 4 знака). */
total_amount?:boolean | `@${string}`,
trigger?:boolean | `@${string}`,
updated_at?:boolean | `@${string}`,
__typename?: boolean | `@${string}`,
['...on MarketplaceWriteoffProposal']?: Omit<ValueTypes["MarketplaceWriteoffProposal"], "...on MarketplaceWriteoffProposal">
}>;
["MarketplaceWriteoffProposalItem"]: AliasType<{
/** Сумма списания (4 знака после запятой, валюта кооператива). */
amount?:boolean | `@${string}`,
/** Наименование позиции или артикул из карточки имущества. */
asset_title?:boolean | `@${string}`,
/** Кооперативный участок (склад) — источник позиции к списанию. */
braname?:boolean | `@${string}`,
/** Признак того, что позиция уже исполнена через execwroff. */
executed?:boolean | `@${string}`,
/** Идентификатор инвентарной позиции, если известна. */
inventory_id?:boolean | `@${string}`,
/** Количество единиц к списанию. */
quantity?:boolean | `@${string}`,
/** Причина списания (срок годности, повреждение и т.п.). */
reason?:boolean | `@${string}`,
__typename?: boolean | `@${string}`,
['...on MarketplaceWriteoffProposalItem']?: Omit<ValueTypes["MarketplaceWriteoffProposalItem"], "...on MarketplaceWriteoffProposalItem">
}>;
/** Состояние проекта решения совета о списании скоропорта на пути от черновика до итогового списания. */
["MarketplaceWriteoffProposalStatus"]:MarketplaceWriteoffProposalStatus;
/** Источник проекта списания: автоматический ежемесячный крон или ручное создание. */
["MarketplaceWriteoffProposalTrigger"]:MarketplaceWriteoffProposalTrigger;
["MarketplaceWriteoffStatementSignablePayloadInput"]: {
draft_id: string | Variable<any, string>
};
["MatrixAccountStatusResponseDTO"]: AliasType<{
hasAccount?:boolean | `@${string}`,
@@ -8013,6 +8100,7 @@ marketplaceAddToWhitelist?: [{ input: ValueTypes["MarketplaceAddToWhitelistInput
marketplaceApproveOffer?: [{ input: ValueTypes["MarketplaceApproveOfferInput"] | Variable<any, string>},ValueTypes["MarketplaceOffer"]],
marketplaceApproveReturnVisit?: [{ data: ValueTypes["MarketplaceApproveReturnVisitInput"] | Variable<any, string>},ValueTypes["MarketplaceReturnClaimResult"]],
marketplaceCancelOrder?: [{ input: ValueTypes["MarketplaceCancelOrderInput"] | Variable<any, string>},ValueTypes["MarketplaceCancelOrderResult"]],
marketplaceCancelWriteoffDraft?: [{ id: string | Variable<any, string>},boolean | `@${string}`],
/** Очистить все доступные категории (сделать доступными все)
Требуемые роли: chairman. */
@@ -8023,6 +8111,7 @@ marketplaceCreateOrder?: [{ input: ValueTypes["MarketplaceCreateOrderInput"] | V
marketplaceCreateRequest?: [{ data: ValueTypes["CreateRequestInput"] | Variable<any, string>},ValueTypes["MarketplaceRequest"]],
marketplaceCreateReturnClaim?: [{ data: ValueTypes["MarketplaceCreateReturnClaimInput"] | Variable<any, string>},ValueTypes["MarketplaceReturnClaimResult"]],
marketplaceCreateShipment?: [{ data: ValueTypes["MarketplaceCreateShipmentInput"] | Variable<any, string>},ValueTypes["MarketplaceCreateShipmentResult"]],
marketplaceCreateWriteoffDraft?: [{ data: ValueTypes["MarketplaceCreateWriteoffDraftInput"] | Variable<any, string>},ValueTypes["MarketplaceWriteoffProposal"]],
marketplaceDeclineConsolidatedRequest?: [{ input: ValueTypes["MarketplaceDeclineConsolidatedRequestInput"] | Variable<any, string>},ValueTypes["MarketplaceConsolidatedRequestActionResult"]],
marketplaceDeclineIndividualOrder?: [{ input: ValueTypes["MarketplaceDeclineIndividualOrderInput"] | Variable<any, string>},ValueTypes["MarketplaceSupplierOrderActionResult"]],
marketplaceDeclineOrderFromOpenPool?: [{ input: ValueTypes["MarketplaceDeclineOrderFromOpenPoolInput"] | Variable<any, string>},ValueTypes["MarketplaceSupplierOrderActionResult"]],
@@ -8041,8 +8130,10 @@ marketplaceRetryKUGeocode?: [{ coopname: string | Variable<any, string>, coreBra
marketplaceSetKUStatus?: [{ data: ValueTypes["MarketplaceSetKUStatusInput"] | Variable<any, string>},ValueTypes["MarketplaceKUDetails"]],
marketplaceSignAplReceptionAsChairman?: [{ data: ValueTypes["MarketplaceSignAplReceptionInput"] | Variable<any, string>},ValueTypes["MarketplaceAplReceptionResult"]],
marketplaceSignAplReceptionAsSupplier?: [{ data: ValueTypes["MarketplaceSignAplReceptionInput"] | Variable<any, string>},ValueTypes["MarketplaceAplReceptionResult"]],
marketplaceSubmitWriteoffDraft?: [{ data: ValueTypes["MarketplaceSubmitWriteoffDraftInput"] | Variable<any, string>},ValueTypes["MarketplaceWriteoffProposal"]],
marketplaceTriggerOpenSubscription?: [{ input: ValueTypes["MarketplaceTriggerOpenSubscriptionInput"] | Variable<any, string>},ValueTypes["MarketplaceConsolidatedRequest"]],
marketplaceUpdateOffer?: [{ input: ValueTypes["MarketplaceUpdateOfferInput"] | Variable<any, string>},ValueTypes["MarketplaceOffer"]],
marketplaceUpdateWriteoffDraft?: [{ data: ValueTypes["MarketplaceUpdateWriteoffDraftInput"] | Variable<any, string>},ValueTypes["MarketplaceWriteoffProposal"]],
marketplaceWithdrawOffer?: [{ input: ValueTypes["MarketplaceWithdrawOfferInput"] | Variable<any, string>},ValueTypes["MarketplaceOffer"]],
notifyOnAnnualGeneralMeet?: [{ data: ValueTypes["NotifyOnAnnualGeneralMeetInput"] | Variable<any, string>},ValueTypes["MeetAggregate"]],
processConvertToAxonStatement?: [{ data: ValueTypes["ProcessConvertToAxonStatementInput"] | Variable<any, string>},boolean | `@${string}`],
@@ -8486,6 +8577,18 @@ walmoveWallets?: [{ input: ValueTypes["WalmoveInput"] | Variable<any, string>},V
totalPages?:boolean | `@${string}`,
__typename?: boolean | `@${string}`,
['...on PaginatedGatewayPaymentsPaginationResult']?: Omit<ValueTypes["PaginatedGatewayPaymentsPaginationResult"], "...on PaginatedGatewayPaymentsPaginationResult">
}>;
["PaginatedMarketplaceWriteoffProposals"]: AliasType<{
/** Текущая страница */
currentPage?:boolean | `@${string}`,
/** Элементы текущей страницы */
items?:ValueTypes["MarketplaceWriteoffProposal"],
/** Общее количество элементов */
totalCount?:boolean | `@${string}`,
/** Общее количество страниц */
totalPages?:boolean | `@${string}`,
__typename?: boolean | `@${string}`,
['...on PaginatedMarketplaceWriteoffProposals']?: Omit<ValueTypes["PaginatedMarketplaceWriteoffProposals"], "...on PaginatedMarketplaceWriteoffProposals">
}>;
["PaginationInput"]: {
/** Количество элементов на странице */
@@ -9448,10 +9551,13 @@ marketplaceListShipments?: [{ data?: ValueTypes["MarketplaceListShipmentsInput"]
marketplaceListSupplierOrders?: [{ input?: ValueTypes["MarketplaceListOrdersInput"] | undefined | null | Variable<any, string>, options?: ValueTypes["PaginationInput"] | undefined | null | Variable<any, string>},ValueTypes["MarketplaceOrderPaginationResult"]],
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
marketplaceListWhitelist?:ValueTypes["MarketplaceWhitelistEntry"],
marketplaceListWriteoffProposals?: [{ data: ValueTypes["MarketplaceListWriteoffProposalsInput"] | Variable<any, string>, options?: ValueTypes["PaginationInput"] | undefined | null | Variable<any, string>},ValueTypes["PaginatedMarketplaceWriteoffProposals"]],
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
marketplaceMemberWallet?:ValueTypes["MarketplaceMemberWallet"],
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
marketplaceOnboardingState?:ValueTypes["MarketplaceOnboardingState"],
/** Открытый черновик проекта списания (если есть). Один на кооператив. */
marketplaceOpenWriteoffDraft?:ValueTypes["MarketplaceWriteoffProposal"],
/** Статус видимости оферты Стола заказов в core registration-flow (платформенный AgreementRegistry) */
marketplaceRegistrationOfferStatus?:ValueTypes["MarketplaceRegistrationOfferStatus"],
marketplaceRequiredAttributes?: [{ data: ValueTypes["GetRequiredAttributesInput"] | Variable<any, string>},ValueTypes["MarketplaceAttribute"]],
@@ -9463,6 +9569,8 @@ marketplaceSearchRequests?: [{ data: ValueTypes["SearchRequestsInput"] | Variabl
marketplaceValidateAttributeValues?: [{ input: ValueTypes["ValidateAttributeValuesInput"] | Variable<any, string>},ValueTypes["MarketplaceAttributeValidation"]],
/** Контекст пайщика для Стола заказов: core_roles + marketplace_roles */
marketplaceWhoAmI?:ValueTypes["MarketplaceCurrentMember"],
marketplaceWriteoffProposal?: [{ id: string | Variable<any, string>},ValueTypes["MarketplaceWriteoffProposal"]],
marketplaceWriteoffStatementSignablePayload?: [{ data: ValueTypes["MarketplaceWriteoffStatementSignablePayloadInput"] | Variable<any, string>},ValueTypes["GeneratedDocument"]],
onecoopGetDocuments?: [{ data: ValueTypes["GetOneCoopDocumentsInput"] | Variable<any, string>},ValueTypes["OneCoopDocumentsResponse"]],
process?: [{ coopname: string | Variable<any, string>, hash: string | Variable<any, string>},ValueTypes["ProcessView"]],
processes?: [{ filter: ValueTypes["ProcessesFilter"] | Variable<any, string>, pagination: ValueTypes["PaginationInput"] | Variable<any, string>},ValueTypes["ProcessSummaryPaginationResult"]],
@@ -16325,6 +16433,11 @@ export type ResolverInputTypes = {
shipments?:ResolverInputTypes["MarketplaceShipment"],
__typename?: boolean | `@${string}`
}>;
["MarketplaceCreateWriteoffDraftInput"]: {
/** Начало расчётного цикла, если отличается от текущего момента. */
cycle_started_at?: string | undefined | null,
items: Array<ResolverInputTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceCurrentMember"]: AliasType<{
core_roles?:boolean | `@${string}`,
marketplace_roles?:boolean | `@${string}`,
@@ -16632,6 +16745,9 @@ export type ResolverInputTypes = {
cycle_id?: ResolverInputTypes["ID"] | undefined | null,
/** Фильтр по статусам партий. */
statuses?: Array<ResolverInputTypes["MarketplaceShipmentStatus"]> | undefined | null
};
["MarketplaceListWriteoffProposalsInput"]: {
statuses?: Array<ResolverInputTypes["MarketplaceWriteoffProposalStatus"]> | undefined | null
};
["MarketplaceMemberWallet"]: AliasType<{
coopname?:boolean | `@${string}`,
@@ -17330,6 +17446,11 @@ export type ResolverInputTypes = {
apl_reception_id: ResolverInputTypes["ID"],
/** Подписанные клиентом акты приёмки — один документ на каждый Order группы. Backend верифицирует подпись и отправляет on-chain signsupp/signchair с этим документом. */
signed_documents: Array<ResolverInputTypes["MarketplaceAplReceptionSignedDocumentInput"]>
};
["MarketplaceSubmitWriteoffDraftInput"]: {
draft_id: string,
/** Подписанное председателем Заявление о списании скоропорта (registry_id=1106). */
signed_statement: ResolverInputTypes["SignedDigitalDocumentInput"]
};
/** Результат индивидуального приёма или отклонения заказа поставщиком. */
["MarketplaceSupplierOrderActionResult"]: AliasType<{
@@ -17360,6 +17481,10 @@ export type ResolverInputTypes = {
unit_of_measure?: string | undefined | null,
unlimited_flag?: boolean | undefined | null,
warranty_days?: number | undefined | null
};
["MarketplaceUpdateWriteoffDraftInput"]: {
id: string,
items: Array<ResolverInputTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceVitrine"]: AliasType<{
/** eosio::name кооператива-владельца витрины */
@@ -17407,6 +17532,73 @@ export type ResolverInputTypes = {
}>;
["MarketplaceWithdrawOfferInput"]: {
id: string
};
["MarketplaceWriteoffDecisionEntry"]: AliasType<{
action?:boolean | `@${string}`,
actor?:boolean | `@${string}`,
at?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["MarketplaceWriteoffItemInput"]: {
/** Сумма списания в формате числа с 4 знаками после запятой. */
amount: string,
asset_title: string,
braname: string,
inventory_id?: string | undefined | null,
quantity: string,
reason: string
};
["MarketplaceWriteoffProposal"]: AliasType<{
authorized_at?:boolean | `@${string}`,
coopname?:boolean | `@${string}`,
created_at?:boolean | `@${string}`,
cycle_started_at?:boolean | `@${string}`,
/** Аккаунт, принявший финальное решение. */
decided_by_account?:boolean | `@${string}`,
decision_id?:boolean | `@${string}`,
decision_log?:ResolverInputTypes["MarketplaceWriteoffDecisionEntry"],
executed_at?:boolean | `@${string}`,
/** Идентификатор проекта в системе кооператива. */
id?:boolean | `@${string}`,
items?:ResolverInputTypes["MarketplaceWriteoffProposalItem"],
/** Канонический хеш проекта, используется как process_hash on-chain (wroffprops, soviet.decisions). */
proposal_hash?:boolean | `@${string}`,
/** Аккаунт инициатора проекта (председатель / админ). */
proposed_by_account?:boolean | `@${string}`,
/** Причина отказа совета (если REJECTED). */
reject_reason?:boolean | `@${string}`,
rejected_at?:boolean | `@${string}`,
status?:boolean | `@${string}`,
submitted_at?:boolean | `@${string}`,
/** Σ сумм всех позиций (форматированный asset, 4 знака). */
total_amount?:boolean | `@${string}`,
trigger?:boolean | `@${string}`,
updated_at?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["MarketplaceWriteoffProposalItem"]: AliasType<{
/** Сумма списания (4 знака после запятой, валюта кооператива). */
amount?:boolean | `@${string}`,
/** Наименование позиции или артикул из карточки имущества. */
asset_title?:boolean | `@${string}`,
/** Кооперативный участок (склад) — источник позиции к списанию. */
braname?:boolean | `@${string}`,
/** Признак того, что позиция уже исполнена через execwroff. */
executed?:boolean | `@${string}`,
/** Идентификатор инвентарной позиции, если известна. */
inventory_id?:boolean | `@${string}`,
/** Количество единиц к списанию. */
quantity?:boolean | `@${string}`,
/** Причина списания (срок годности, повреждение и т.п.). */
reason?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
/** Состояние проекта решения совета о списании скоропорта на пути от черновика до итогового списания. */
["MarketplaceWriteoffProposalStatus"]:MarketplaceWriteoffProposalStatus;
/** Источник проекта списания: автоматический ежемесячный крон или ручное создание. */
["MarketplaceWriteoffProposalTrigger"]:MarketplaceWriteoffProposalTrigger;
["MarketplaceWriteoffStatementSignablePayloadInput"]: {
draft_id: string
};
["MatrixAccountStatusResponseDTO"]: AliasType<{
hasAccount?:boolean | `@${string}`,
@@ -17769,6 +17961,7 @@ marketplaceAddToWhitelist?: [{ input: ResolverInputTypes["MarketplaceAddToWhitel
marketplaceApproveOffer?: [{ input: ResolverInputTypes["MarketplaceApproveOfferInput"]},ResolverInputTypes["MarketplaceOffer"]],
marketplaceApproveReturnVisit?: [{ data: ResolverInputTypes["MarketplaceApproveReturnVisitInput"]},ResolverInputTypes["MarketplaceReturnClaimResult"]],
marketplaceCancelOrder?: [{ input: ResolverInputTypes["MarketplaceCancelOrderInput"]},ResolverInputTypes["MarketplaceCancelOrderResult"]],
marketplaceCancelWriteoffDraft?: [{ id: string},boolean | `@${string}`],
/** Очистить все доступные категории (сделать доступными все)
Требуемые роли: chairman. */
@@ -17779,6 +17972,7 @@ marketplaceCreateOrder?: [{ input: ResolverInputTypes["MarketplaceCreateOrderInp
marketplaceCreateRequest?: [{ data: ResolverInputTypes["CreateRequestInput"]},ResolverInputTypes["MarketplaceRequest"]],
marketplaceCreateReturnClaim?: [{ data: ResolverInputTypes["MarketplaceCreateReturnClaimInput"]},ResolverInputTypes["MarketplaceReturnClaimResult"]],
marketplaceCreateShipment?: [{ data: ResolverInputTypes["MarketplaceCreateShipmentInput"]},ResolverInputTypes["MarketplaceCreateShipmentResult"]],
marketplaceCreateWriteoffDraft?: [{ data: ResolverInputTypes["MarketplaceCreateWriteoffDraftInput"]},ResolverInputTypes["MarketplaceWriteoffProposal"]],
marketplaceDeclineConsolidatedRequest?: [{ input: ResolverInputTypes["MarketplaceDeclineConsolidatedRequestInput"]},ResolverInputTypes["MarketplaceConsolidatedRequestActionResult"]],
marketplaceDeclineIndividualOrder?: [{ input: ResolverInputTypes["MarketplaceDeclineIndividualOrderInput"]},ResolverInputTypes["MarketplaceSupplierOrderActionResult"]],
marketplaceDeclineOrderFromOpenPool?: [{ input: ResolverInputTypes["MarketplaceDeclineOrderFromOpenPoolInput"]},ResolverInputTypes["MarketplaceSupplierOrderActionResult"]],
@@ -17797,8 +17991,10 @@ marketplaceRetryKUGeocode?: [{ coopname: string, coreBraname: string},ResolverIn
marketplaceSetKUStatus?: [{ data: ResolverInputTypes["MarketplaceSetKUStatusInput"]},ResolverInputTypes["MarketplaceKUDetails"]],
marketplaceSignAplReceptionAsChairman?: [{ data: ResolverInputTypes["MarketplaceSignAplReceptionInput"]},ResolverInputTypes["MarketplaceAplReceptionResult"]],
marketplaceSignAplReceptionAsSupplier?: [{ data: ResolverInputTypes["MarketplaceSignAplReceptionInput"]},ResolverInputTypes["MarketplaceAplReceptionResult"]],
marketplaceSubmitWriteoffDraft?: [{ data: ResolverInputTypes["MarketplaceSubmitWriteoffDraftInput"]},ResolverInputTypes["MarketplaceWriteoffProposal"]],
marketplaceTriggerOpenSubscription?: [{ input: ResolverInputTypes["MarketplaceTriggerOpenSubscriptionInput"]},ResolverInputTypes["MarketplaceConsolidatedRequest"]],
marketplaceUpdateOffer?: [{ input: ResolverInputTypes["MarketplaceUpdateOfferInput"]},ResolverInputTypes["MarketplaceOffer"]],
marketplaceUpdateWriteoffDraft?: [{ data: ResolverInputTypes["MarketplaceUpdateWriteoffDraftInput"]},ResolverInputTypes["MarketplaceWriteoffProposal"]],
marketplaceWithdrawOffer?: [{ input: ResolverInputTypes["MarketplaceWithdrawOfferInput"]},ResolverInputTypes["MarketplaceOffer"]],
notifyOnAnnualGeneralMeet?: [{ data: ResolverInputTypes["NotifyOnAnnualGeneralMeetInput"]},ResolverInputTypes["MeetAggregate"]],
processConvertToAxonStatement?: [{ data: ResolverInputTypes["ProcessConvertToAxonStatementInput"]},boolean | `@${string}`],
@@ -18212,6 +18408,17 @@ walmoveWallets?: [{ input: ResolverInputTypes["WalmoveInput"]},ResolverInputType
/** Общее количество страниц */
totalPages?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["PaginatedMarketplaceWriteoffProposals"]: AliasType<{
/** Текущая страница */
currentPage?:boolean | `@${string}`,
/** Элементы текущей страницы */
items?:ResolverInputTypes["MarketplaceWriteoffProposal"],
/** Общее количество элементов */
totalCount?:boolean | `@${string}`,
/** Общее количество страниц */
totalPages?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["PaginationInput"]: {
/** Количество элементов на странице */
@@ -19148,10 +19355,13 @@ marketplaceListShipments?: [{ data?: ResolverInputTypes["MarketplaceListShipment
marketplaceListSupplierOrders?: [{ input?: ResolverInputTypes["MarketplaceListOrdersInput"] | undefined | null, options?: ResolverInputTypes["PaginationInput"] | undefined | null},ResolverInputTypes["MarketplaceOrderPaginationResult"]],
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
marketplaceListWhitelist?:ResolverInputTypes["MarketplaceWhitelistEntry"],
marketplaceListWriteoffProposals?: [{ data: ResolverInputTypes["MarketplaceListWriteoffProposalsInput"], options?: ResolverInputTypes["PaginationInput"] | undefined | null},ResolverInputTypes["PaginatedMarketplaceWriteoffProposals"]],
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
marketplaceMemberWallet?:ResolverInputTypes["MarketplaceMemberWallet"],
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
marketplaceOnboardingState?:ResolverInputTypes["MarketplaceOnboardingState"],
/** Открытый черновик проекта списания (если есть). Один на кооператив. */
marketplaceOpenWriteoffDraft?:ResolverInputTypes["MarketplaceWriteoffProposal"],
/** Статус видимости оферты Стола заказов в core registration-flow (платформенный AgreementRegistry) */
marketplaceRegistrationOfferStatus?:ResolverInputTypes["MarketplaceRegistrationOfferStatus"],
marketplaceRequiredAttributes?: [{ data: ResolverInputTypes["GetRequiredAttributesInput"]},ResolverInputTypes["MarketplaceAttribute"]],
@@ -19163,6 +19373,8 @@ marketplaceSearchRequests?: [{ data: ResolverInputTypes["SearchRequestsInput"]},
marketplaceValidateAttributeValues?: [{ input: ResolverInputTypes["ValidateAttributeValuesInput"]},ResolverInputTypes["MarketplaceAttributeValidation"]],
/** Контекст пайщика для Стола заказов: core_roles + marketplace_roles */
marketplaceWhoAmI?:ResolverInputTypes["MarketplaceCurrentMember"],
marketplaceWriteoffProposal?: [{ id: string},ResolverInputTypes["MarketplaceWriteoffProposal"]],
marketplaceWriteoffStatementSignablePayload?: [{ data: ResolverInputTypes["MarketplaceWriteoffStatementSignablePayloadInput"]},ResolverInputTypes["GeneratedDocument"]],
onecoopGetDocuments?: [{ data: ResolverInputTypes["GetOneCoopDocumentsInput"]},ResolverInputTypes["OneCoopDocumentsResponse"]],
process?: [{ coopname: string, hash: string},ResolverInputTypes["ProcessView"]],
processes?: [{ filter: ResolverInputTypes["ProcessesFilter"], pagination: ResolverInputTypes["PaginationInput"]},ResolverInputTypes["ProcessSummaryPaginationResult"]],
@@ -25809,6 +26021,11 @@ export type ModelTypes = {
["MarketplaceCreateShipmentResult"]: {
/** Созданные партии — по одной на каждый КУ заявки. */
shipments: Array<ModelTypes["MarketplaceShipment"]>
};
["MarketplaceCreateWriteoffDraftInput"]: {
/** Начало расчётного цикла, если отличается от текущего момента. */
cycle_started_at?: string | undefined | null,
items: Array<ModelTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceCurrentMember"]: {
core_roles: Array<string>,
@@ -26109,6 +26326,9 @@ export type ModelTypes = {
cycle_id?: ModelTypes["ID"] | undefined | null,
/** Фильтр по статусам партий. */
statuses?: Array<ModelTypes["MarketplaceShipmentStatus"]> | undefined | null
};
["MarketplaceListWriteoffProposalsInput"]: {
statuses?: Array<ModelTypes["MarketplaceWriteoffProposalStatus"]> | undefined | null
};
["MarketplaceMemberWallet"]: {
coopname: string,
@@ -26774,6 +26994,11 @@ export type ModelTypes = {
apl_reception_id: ModelTypes["ID"],
/** Подписанные клиентом акты приёмки — один документ на каждый Order группы. Backend верифицирует подпись и отправляет on-chain signsupp/signchair с этим документом. */
signed_documents: Array<ModelTypes["MarketplaceAplReceptionSignedDocumentInput"]>
};
["MarketplaceSubmitWriteoffDraftInput"]: {
draft_id: string,
/** Подписанное председателем Заявление о списании скоропорта (registry_id=1106). */
signed_statement: ModelTypes["SignedDigitalDocumentInput"]
};
/** Результат индивидуального приёма или отклонения заказа поставщиком. */
["MarketplaceSupplierOrderActionResult"]: {
@@ -26803,6 +27028,10 @@ export type ModelTypes = {
unit_of_measure?: string | undefined | null,
unlimited_flag?: boolean | undefined | null,
warranty_days?: number | undefined | null
};
["MarketplaceUpdateWriteoffDraftInput"]: {
id: string,
items: Array<ModelTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceVitrine"]: {
/** eosio::name кооператива-владельца витрины */
@@ -26847,6 +27076,68 @@ export type ModelTypes = {
};
["MarketplaceWithdrawOfferInput"]: {
id: string
};
["MarketplaceWriteoffDecisionEntry"]: {
action: string,
actor: string,
at: string
};
["MarketplaceWriteoffItemInput"]: {
/** Сумма списания в формате числа с 4 знаками после запятой. */
amount: string,
asset_title: string,
braname: string,
inventory_id?: string | undefined | null,
quantity: string,
reason: string
};
["MarketplaceWriteoffProposal"]: {
authorized_at?: string | undefined | null,
coopname: string,
created_at: string,
cycle_started_at: string,
/** Аккаунт, принявший финальное решение. */
decided_by_account?: string | undefined | null,
decision_id?: number | undefined | null,
decision_log: Array<ModelTypes["MarketplaceWriteoffDecisionEntry"]>,
executed_at?: string | undefined | null,
/** Идентификатор проекта в системе кооператива. */
id: string,
items: Array<ModelTypes["MarketplaceWriteoffProposalItem"]>,
/** Канонический хеш проекта, используется как process_hash on-chain (wroffprops, soviet.decisions). */
proposal_hash: string,
/** Аккаунт инициатора проекта (председатель / админ). */
proposed_by_account?: string | undefined | null,
/** Причина отказа совета (если REJECTED). */
reject_reason?: string | undefined | null,
rejected_at?: string | undefined | null,
status: ModelTypes["MarketplaceWriteoffProposalStatus"],
submitted_at?: string | undefined | null,
/** Σ сумм всех позиций (форматированный asset, 4 знака). */
total_amount: string,
trigger: ModelTypes["MarketplaceWriteoffProposalTrigger"],
updated_at: string
};
["MarketplaceWriteoffProposalItem"]: {
/** Сумма списания (4 знака после запятой, валюта кооператива). */
amount: string,
/** Наименование позиции или артикул из карточки имущества. */
asset_title: string,
/** Кооперативный участок (склад) — источник позиции к списанию. */
braname: string,
/** Признак того, что позиция уже исполнена через execwroff. */
executed: boolean,
/** Идентификатор инвентарной позиции, если известна. */
inventory_id?: string | undefined | null,
/** Количество единиц к списанию. */
quantity: string,
/** Причина списания (срок годности, повреждение и т.п.). */
reason: string
};
["MarketplaceWriteoffProposalStatus"]:MarketplaceWriteoffProposalStatus;
["MarketplaceWriteoffProposalTrigger"]:MarketplaceWriteoffProposalTrigger;
["MarketplaceWriteoffStatementSignablePayloadInput"]: {
draft_id: string
};
["MatrixAccountStatusResponseDTO"]: {
hasAccount: boolean,
@@ -27604,6 +27895,8 @@ export type ModelTypes = {
marketplaceApproveReturnVisit: ModelTypes["MarketplaceReturnClaimResult"],
/** Отменить свой заказ до его приёма поставщиком; средства разблокируются. */
marketplaceCancelOrder: ModelTypes["MarketplaceCancelOrderResult"],
/** Удалить черновик. Доступно только пока проект в статусе DRAFT. */
marketplaceCancelWriteoffDraft: boolean,
/** Очистить все доступные категории (сделать доступными все)
Требуемые роли: chairman. */
@@ -27622,6 +27915,8 @@ export type ModelTypes = {
marketplaceCreateReturnClaim: ModelTypes["MarketplaceReturnClaimResult"],
/** Сформировать партии поставки из акцептованной заявки: одна группа на каждый КУ-получатель. */
marketplaceCreateShipment: ModelTypes["MarketplaceCreateShipmentResult"],
/** Создаёт ручной черновик проекта списания. На кооператив может быть только один открытый черновик и один проект, отправленный в совет. */
marketplaceCreateWriteoffDraft: ModelTypes["MarketplaceWriteoffProposal"],
/** Поставщик отклоняет сводную заявку — все заказы пакета отменяются, средства разблокируются. */
marketplaceDeclineConsolidatedRequest: ModelTypes["MarketplaceConsolidatedRequestActionResult"],
/** Поставщик отказывается от одного индивидуального заказа; средства разблокируются. */
@@ -27670,10 +27965,14 @@ export type ModelTypes = {
marketplaceSignAplReceptionAsChairman: ModelTypes["MarketplaceAplReceptionResult"],
/** Поставщик ставит первую подпись на акте приёмки (лично — Вариант А; асинхронно через push — Вариант Б). */
marketplaceSignAplReceptionAsSupplier: ModelTypes["MarketplaceAplReceptionResult"],
/** Отправить черновик в совет. Принимает подписанное председателем Заявление 1106. После успешного приёма выполняются propwroff и soviet::createagenda(mktwroff). */
marketplaceSubmitWriteoffDraft: ModelTypes["MarketplaceWriteoffProposal"],
/** Поставщик запускает поставку по предложению с открытой подпиской: формируется сводная заявка, заказы в её пуле принимаются. */
marketplaceTriggerOpenSubscription: ModelTypes["MarketplaceConsolidatedRequest"],
/** Поставщик правит свой Offer — статус сбрасывается в PENDING_MODERATION */
marketplaceUpdateOffer: ModelTypes["MarketplaceOffer"],
/** Изменить состав черновика — добавить, удалить или поправить позиции. */
marketplaceUpdateWriteoffDraft: ModelTypes["MarketplaceWriteoffProposal"],
/** Поставщик снимает свой Offer (статус → WITHDRAWN) */
marketplaceWithdrawOffer: ModelTypes["MarketplaceOffer"],
/** Уведомление о проведении общего собрания пайщиков
@@ -28126,6 +28425,16 @@ export type ModelTypes = {
totalCount: number,
/** Общее количество страниц */
totalPages: number
};
["PaginatedMarketplaceWriteoffProposals"]: {
/** Текущая страница */
currentPage: number,
/** Элементы текущей страницы */
items: Array<ModelTypes["MarketplaceWriteoffProposal"]>,
/** Общее количество элементов */
totalCount: number,
/** Общее количество страниц */
totalPages: number
};
["PaginationInput"]: {
/** Количество элементов на странице */
@@ -29249,10 +29558,14 @@ export type ModelTypes = {
marketplaceListSupplierOrders: ModelTypes["MarketplaceOrderPaginationResult"],
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
marketplaceListWhitelist: Array<ModelTypes["MarketplaceWhitelistEntry"]>,
/** Лента всех проектов списания кооператива с фильтром по статусу. */
marketplaceListWriteoffProposals: ModelTypes["PaginatedMarketplaceWriteoffProposals"],
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
marketplaceMemberWallet: ModelTypes["MarketplaceMemberWallet"],
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
marketplaceOnboardingState: ModelTypes["MarketplaceOnboardingState"],
/** Открытый черновик проекта списания (если есть). Один на кооператив. */
marketplaceOpenWriteoffDraft?: ModelTypes["MarketplaceWriteoffProposal"] | undefined | null,
/** Статус видимости оферты Стола заказов в core registration-flow (платформенный AgreementRegistry) */
marketplaceRegistrationOfferStatus: ModelTypes["MarketplaceRegistrationOfferStatus"],
/** Получить обязательные атрибуты для категории и типа товара marketplace */
@@ -29271,6 +29584,10 @@ export type ModelTypes = {
marketplaceValidateAttributeValues: ModelTypes["MarketplaceAttributeValidation"],
/** Контекст пайщика для Стола заказов: core_roles + marketplace_roles */
marketplaceWhoAmI: ModelTypes["MarketplaceCurrentMember"],
/** Детали одного проекта списания: items, decision_log, протокол. */
marketplaceWriteoffProposal: ModelTypes["MarketplaceWriteoffProposal"],
/** Превью Заявления о списании скоропорта (registry 1106) для подписания председателем. */
marketplaceWriteoffStatementSignablePayload: ModelTypes["GeneratedDocument"],
/** Получение документов кооператива для синхронизации с 1С. Требует секретный ключ в заголовке x-onecoop-secret-key. */
onecoopGetDocuments: ModelTypes["OneCoopDocumentsResponse"],
/** Получить полную картину процесса ledger2 по process_hash
@@ -36186,6 +36503,11 @@ export type GraphQLTypes = {
/** Созданные партии — по одной на каждый КУ заявки. */
shipments: Array<GraphQLTypes["MarketplaceShipment"]>,
['...on MarketplaceCreateShipmentResult']: Omit<GraphQLTypes["MarketplaceCreateShipmentResult"], "...on MarketplaceCreateShipmentResult">
};
["MarketplaceCreateWriteoffDraftInput"]: {
/** Начало расчётного цикла, если отличается от текущего момента. */
cycle_started_at?: string | undefined | null,
items: Array<GraphQLTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceCurrentMember"]: {
__typename: "MarketplaceCurrentMember",
@@ -36501,6 +36823,9 @@ export type GraphQLTypes = {
cycle_id?: GraphQLTypes["ID"] | undefined | null,
/** Фильтр по статусам партий. */
statuses?: Array<GraphQLTypes["MarketplaceShipmentStatus"]> | undefined | null
};
["MarketplaceListWriteoffProposalsInput"]: {
statuses?: Array<GraphQLTypes["MarketplaceWriteoffProposalStatus"]> | undefined | null
};
["MarketplaceMemberWallet"]: {
__typename: "MarketplaceMemberWallet",
@@ -37223,6 +37548,11 @@ export type GraphQLTypes = {
apl_reception_id: GraphQLTypes["ID"],
/** Подписанные клиентом акты приёмки — один документ на каждый Order группы. Backend верифицирует подпись и отправляет on-chain signsupp/signchair с этим документом. */
signed_documents: Array<GraphQLTypes["MarketplaceAplReceptionSignedDocumentInput"]>
};
["MarketplaceSubmitWriteoffDraftInput"]: {
draft_id: string,
/** Подписанное председателем Заявление о списании скоропорта (registry_id=1106). */
signed_statement: GraphQLTypes["SignedDigitalDocumentInput"]
};
/** Результат индивидуального приёма или отклонения заказа поставщиком. */
["MarketplaceSupplierOrderActionResult"]: {
@@ -37254,6 +37584,10 @@ export type GraphQLTypes = {
unit_of_measure?: string | undefined | null,
unlimited_flag?: boolean | undefined | null,
warranty_days?: number | undefined | null
};
["MarketplaceUpdateWriteoffDraftInput"]: {
id: string,
items: Array<GraphQLTypes["MarketplaceWriteoffItemInput"]>
};
["MarketplaceVitrine"]: {
__typename: "MarketplaceVitrine",
@@ -37304,6 +37638,76 @@ export type GraphQLTypes = {
};
["MarketplaceWithdrawOfferInput"]: {
id: string
};
["MarketplaceWriteoffDecisionEntry"]: {
__typename: "MarketplaceWriteoffDecisionEntry",
action: string,
actor: string,
at: string,
['...on MarketplaceWriteoffDecisionEntry']: Omit<GraphQLTypes["MarketplaceWriteoffDecisionEntry"], "...on MarketplaceWriteoffDecisionEntry">
};
["MarketplaceWriteoffItemInput"]: {
/** Сумма списания в формате числа с 4 знаками после запятой. */
amount: string,
asset_title: string,
braname: string,
inventory_id?: string | undefined | null,
quantity: string,
reason: string
};
["MarketplaceWriteoffProposal"]: {
__typename: "MarketplaceWriteoffProposal",
authorized_at?: string | undefined | null,
coopname: string,
created_at: string,
cycle_started_at: string,
/** Аккаунт, принявший финальное решение. */
decided_by_account?: string | undefined | null,
decision_id?: number | undefined | null,
decision_log: Array<GraphQLTypes["MarketplaceWriteoffDecisionEntry"]>,
executed_at?: string | undefined | null,
/** Идентификатор проекта в системе кооператива. */
id: string,
items: Array<GraphQLTypes["MarketplaceWriteoffProposalItem"]>,
/** Канонический хеш проекта, используется как process_hash on-chain (wroffprops, soviet.decisions). */
proposal_hash: string,
/** Аккаунт инициатора проекта (председатель / админ). */
proposed_by_account?: string | undefined | null,
/** Причина отказа совета (если REJECTED). */
reject_reason?: string | undefined | null,
rejected_at?: string | undefined | null,
status: GraphQLTypes["MarketplaceWriteoffProposalStatus"],
submitted_at?: string | undefined | null,
/** Σ сумм всех позиций (форматированный asset, 4 знака). */
total_amount: string,
trigger: GraphQLTypes["MarketplaceWriteoffProposalTrigger"],
updated_at: string,
['...on MarketplaceWriteoffProposal']: Omit<GraphQLTypes["MarketplaceWriteoffProposal"], "...on MarketplaceWriteoffProposal">
};
["MarketplaceWriteoffProposalItem"]: {
__typename: "MarketplaceWriteoffProposalItem",
/** Сумма списания (4 знака после запятой, валюта кооператива). */
amount: string,
/** Наименование позиции или артикул из карточки имущества. */
asset_title: string,
/** Кооперативный участок (склад) — источник позиции к списанию. */
braname: string,
/** Признак того, что позиция уже исполнена через execwroff. */
executed: boolean,
/** Идентификатор инвентарной позиции, если известна. */
inventory_id?: string | undefined | null,
/** Количество единиц к списанию. */
quantity: string,
/** Причина списания (срок годности, повреждение и т.п.). */
reason: string,
['...on MarketplaceWriteoffProposalItem']: Omit<GraphQLTypes["MarketplaceWriteoffProposalItem"], "...on MarketplaceWriteoffProposalItem">
};
/** Состояние проекта решения совета о списании скоропорта на пути от черновика до итогового списания. */
["MarketplaceWriteoffProposalStatus"]: MarketplaceWriteoffProposalStatus;
/** Источник проекта списания: автоматический ежемесячный крон или ручное создание. */
["MarketplaceWriteoffProposalTrigger"]: MarketplaceWriteoffProposalTrigger;
["MarketplaceWriteoffStatementSignablePayloadInput"]: {
draft_id: string
};
["MatrixAccountStatusResponseDTO"]: {
__typename: "MatrixAccountStatusResponseDTO",
@@ -38080,6 +38484,8 @@ export type GraphQLTypes = {
marketplaceApproveReturnVisit: GraphQLTypes["MarketplaceReturnClaimResult"],
/** Отменить свой заказ до его приёма поставщиком; средства разблокируются. */
marketplaceCancelOrder: GraphQLTypes["MarketplaceCancelOrderResult"],
/** Удалить черновик. Доступно только пока проект в статусе DRAFT. */
marketplaceCancelWriteoffDraft: boolean,
/** Очистить все доступные категории (сделать доступными все)
Требуемые роли: chairman. */
@@ -38098,6 +38504,8 @@ export type GraphQLTypes = {
marketplaceCreateReturnClaim: GraphQLTypes["MarketplaceReturnClaimResult"],
/** Сформировать партии поставки из акцептованной заявки: одна группа на каждый КУ-получатель. */
marketplaceCreateShipment: GraphQLTypes["MarketplaceCreateShipmentResult"],
/** Создаёт ручной черновик проекта списания. На кооператив может быть только один открытый черновик и один проект, отправленный в совет. */
marketplaceCreateWriteoffDraft: GraphQLTypes["MarketplaceWriteoffProposal"],
/** Поставщик отклоняет сводную заявку — все заказы пакета отменяются, средства разблокируются. */
marketplaceDeclineConsolidatedRequest: GraphQLTypes["MarketplaceConsolidatedRequestActionResult"],
/** Поставщик отказывается от одного индивидуального заказа; средства разблокируются. */
@@ -38146,10 +38554,14 @@ export type GraphQLTypes = {
marketplaceSignAplReceptionAsChairman: GraphQLTypes["MarketplaceAplReceptionResult"],
/** Поставщик ставит первую подпись на акте приёмки (лично — Вариант А; асинхронно через push — Вариант Б). */
marketplaceSignAplReceptionAsSupplier: GraphQLTypes["MarketplaceAplReceptionResult"],
/** Отправить черновик в совет. Принимает подписанное председателем Заявление 1106. После успешного приёма выполняются propwroff и soviet::createagenda(mktwroff). */
marketplaceSubmitWriteoffDraft: GraphQLTypes["MarketplaceWriteoffProposal"],
/** Поставщик запускает поставку по предложению с открытой подпиской: формируется сводная заявка, заказы в её пуле принимаются. */
marketplaceTriggerOpenSubscription: GraphQLTypes["MarketplaceConsolidatedRequest"],
/** Поставщик правит свой Offer — статус сбрасывается в PENDING_MODERATION */
marketplaceUpdateOffer: GraphQLTypes["MarketplaceOffer"],
/** Изменить состав черновика — добавить, удалить или поправить позиции. */
marketplaceUpdateWriteoffDraft: GraphQLTypes["MarketplaceWriteoffProposal"],
/** Поставщик снимает свой Offer (статус → WITHDRAWN) */
marketplaceWithdrawOffer: GraphQLTypes["MarketplaceOffer"],
/** Уведомление о проведении общего собрания пайщиков
@@ -38662,6 +39074,18 @@ export type GraphQLTypes = {
/** Общее количество страниц */
totalPages: number,
['...on PaginatedGatewayPaymentsPaginationResult']: Omit<GraphQLTypes["PaginatedGatewayPaymentsPaginationResult"], "...on PaginatedGatewayPaymentsPaginationResult">
};
["PaginatedMarketplaceWriteoffProposals"]: {
__typename: "PaginatedMarketplaceWriteoffProposals",
/** Текущая страница */
currentPage: number,
/** Элементы текущей страницы */
items: Array<GraphQLTypes["MarketplaceWriteoffProposal"]>,
/** Общее количество элементов */
totalCount: number,
/** Общее количество страниц */
totalPages: number,
['...on PaginatedMarketplaceWriteoffProposals']: Omit<GraphQLTypes["PaginatedMarketplaceWriteoffProposals"], "...on PaginatedMarketplaceWriteoffProposals">
};
["PaginationInput"]: {
/** Количество элементов на странице */
@@ -39857,10 +40281,14 @@ export type GraphQLTypes = {
marketplaceListSupplierOrders: GraphQLTypes["MarketplaceOrderPaginationResult"],
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
marketplaceListWhitelist: Array<GraphQLTypes["MarketplaceWhitelistEntry"]>,
/** Лента всех проектов списания кооператива с фильтром по статусу. */
marketplaceListWriteoffProposals: GraphQLTypes["PaginatedMarketplaceWriteoffProposals"],
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
marketplaceMemberWallet: GraphQLTypes["MarketplaceMemberWallet"],
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
marketplaceOnboardingState: GraphQLTypes["MarketplaceOnboardingState"],
/** Открытый черновик проекта списания (если есть). Один на кооператив. */
marketplaceOpenWriteoffDraft?: GraphQLTypes["MarketplaceWriteoffProposal"] | undefined | null,
/** Статус видимости оферты Стола заказов в core registration-flow (платформенный AgreementRegistry) */
marketplaceRegistrationOfferStatus: GraphQLTypes["MarketplaceRegistrationOfferStatus"],
/** Получить обязательные атрибуты для категории и типа товара marketplace */
@@ -39879,6 +40307,10 @@ export type GraphQLTypes = {
marketplaceValidateAttributeValues: GraphQLTypes["MarketplaceAttributeValidation"],
/** Контекст пайщика для Стола заказов: core_roles + marketplace_roles */
marketplaceWhoAmI: GraphQLTypes["MarketplaceCurrentMember"],
/** Детали одного проекта списания: items, decision_log, протокол. */
marketplaceWriteoffProposal: GraphQLTypes["MarketplaceWriteoffProposal"],
/** Превью Заявления о списании скоропорта (registry 1106) для подписания председателем. */
marketplaceWriteoffStatementSignablePayload: GraphQLTypes["GeneratedDocument"],
/** Получение документов кооператива для синхронизации с 1С. Требует секретный ключ в заголовке x-onecoop-secret-key. */
onecoopGetDocuments: GraphQLTypes["OneCoopDocumentsResponse"],
/** Получить полную картину процесса ledger2 по process_hash
@@ -41822,6 +42254,20 @@ export enum MarketplaceShipmentStatus {
RECEPTION_IN_PROGRESS = "RECEPTION_IN_PROGRESS",
SUPPLY_PREPARED = "SUPPLY_PREPARED"
}
/** Состояние проекта решения совета о списании скоропорта на пути от черновика до итогового списания. */
export enum MarketplaceWriteoffProposalStatus {
AUTHORIZED = "AUTHORIZED",
DRAFT = "DRAFT",
EXECUTED = "EXECUTED",
EXECUTING = "EXECUTING",
ON_AGENDA = "ON_AGENDA",
REJECTED = "REJECTED"
}
/** Источник проекта списания: автоматический ежемесячный крон или ручное создание. */
export enum MarketplaceWriteoffProposalTrigger {
CRON = "CRON",
MANUAL = "MANUAL"
}
/** Тип юридического лица */
export enum OrganizationType {
AO = "AO",
@@ -42263,6 +42709,7 @@ type ZEUS_VARIABLES = {
["MarketplaceCreateOrderInput"]: ValueTypes["MarketplaceCreateOrderInput"];
["MarketplaceCreateReturnClaimInput"]: ValueTypes["MarketplaceCreateReturnClaimInput"];
["MarketplaceCreateShipmentInput"]: ValueTypes["MarketplaceCreateShipmentInput"];
["MarketplaceCreateWriteoffDraftInput"]: ValueTypes["MarketplaceCreateWriteoffDraftInput"];
["MarketplaceDeclineConsolidatedRequestInput"]: ValueTypes["MarketplaceDeclineConsolidatedRequestInput"];
["MarketplaceDeclineIndividualOrderInput"]: ValueTypes["MarketplaceDeclineIndividualOrderInput"];
["MarketplaceDeclineOrderFromOpenPoolInput"]: ValueTypes["MarketplaceDeclineOrderFromOpenPoolInput"];
@@ -42285,6 +42732,7 @@ type ZEUS_VARIABLES = {
["MarketplaceListPendingOffersInput"]: ValueTypes["MarketplaceListPendingOffersInput"];
["MarketplaceListReturnClaimsByBranameInput"]: ValueTypes["MarketplaceListReturnClaimsByBranameInput"];
["MarketplaceListShipmentsInput"]: ValueTypes["MarketplaceListShipmentsInput"];
["MarketplaceListWriteoffProposalsInput"]: ValueTypes["MarketplaceListWriteoffProposalsInput"];
["MarketplaceOpenIssuanceInput"]: ValueTypes["MarketplaceOpenIssuanceInput"];
["MarketplaceOrderCycleType"]: ValueTypes["MarketplaceOrderCycleType"];
["MarketplaceOrderIssuanceFactDiffState"]: ValueTypes["MarketplaceOrderIssuanceFactDiffState"];
@@ -42307,9 +42755,15 @@ type ZEUS_VARIABLES = {
["MarketplaceShipmentStatus"]: ValueTypes["MarketplaceShipmentStatus"];
["MarketplaceShipmentTTNDataInput"]: ValueTypes["MarketplaceShipmentTTNDataInput"];
["MarketplaceSignAplReceptionInput"]: ValueTypes["MarketplaceSignAplReceptionInput"];
["MarketplaceSubmitWriteoffDraftInput"]: ValueTypes["MarketplaceSubmitWriteoffDraftInput"];
["MarketplaceTriggerOpenSubscriptionInput"]: ValueTypes["MarketplaceTriggerOpenSubscriptionInput"];
["MarketplaceUpdateOfferInput"]: ValueTypes["MarketplaceUpdateOfferInput"];
["MarketplaceUpdateWriteoffDraftInput"]: ValueTypes["MarketplaceUpdateWriteoffDraftInput"];
["MarketplaceWithdrawOfferInput"]: ValueTypes["MarketplaceWithdrawOfferInput"];
["MarketplaceWriteoffItemInput"]: ValueTypes["MarketplaceWriteoffItemInput"];
["MarketplaceWriteoffProposalStatus"]: ValueTypes["MarketplaceWriteoffProposalStatus"];
["MarketplaceWriteoffProposalTrigger"]: ValueTypes["MarketplaceWriteoffProposalTrigger"];
["MarketplaceWriteoffStatementSignablePayloadInput"]: ValueTypes["MarketplaceWriteoffStatementSignablePayloadInput"];
["MoveCapitalIssueToComponentInput"]: ValueTypes["MoveCapitalIssueToComponentInput"];
["NotificationWorkflowRecipientInput"]: ValueTypes["NotificationWorkflowRecipientInput"];
["NotifyOnAnnualGeneralMeetInput"]: ValueTypes["NotifyOnAnnualGeneralMeetInput"];