fix stantards
This commit is contained in:
@@ -18,8 +18,8 @@
|
||||
# «кошелёк вне системы» для ISSUE/REVOKE/ACCOUNT_ONLY.
|
||||
#
|
||||
# Возврат поставщику и работа с поставщиком по претензиям — out of MVP;
|
||||
# вернувшееся имущество остаётся на складе КУ как материальный остаток
|
||||
# до отдельной процедуры по регламенту кооператива.
|
||||
# вернувшееся имущество остаётся на складе КУ как материальный остаток,
|
||||
# его дальнейшая судьба вне этого процесса.
|
||||
#
|
||||
# В процессе участвуют 2 ledger2-операции (compensating-forward пара, зеркало
|
||||
# выдачи на supply — через транзит счёта 91):
|
||||
@@ -28,7 +28,7 @@
|
||||
# (восстановление «прочих» за счёт ЦФ)
|
||||
# • o.mkt.return2 — часть 2: NONE Дт 10 / Кт 91 (имущество назад на склад
|
||||
# через закрытие транзита). Атомарно с o.mkt.return
|
||||
# в той же транзакции decretvisit.
|
||||
# в той же транзакции accretrn.
|
||||
#
|
||||
# Канон формата:
|
||||
# coopenomics-docs/docs/standards/_spec/canon.md
|
||||
@@ -53,14 +53,23 @@ slug: return
|
||||
status: proposed
|
||||
contract: marketplace
|
||||
purpose: >
|
||||
Гарантийная защита пайщика по сделкам «Стола заказов». Если после
|
||||
получения товара пайщик обнаружил дефект или истечение срока годности
|
||||
в пределах гарантии, заданной поставщиком, он подаёт заявление на
|
||||
возврат — председатель кооперативного участка рассматривает его по фото
|
||||
и при необходимости приглашает пайщика на КУ для очной проверки.
|
||||
Используется как штатный способ компенсировать пайщику членский взнос
|
||||
при некондиционном товаре. Возврат имущества поставщику и претензионная
|
||||
работа выходят за рамки этого процесса.
|
||||
Гарантийная защита заказчика по сделкам «Стола заказов». Если после
|
||||
получения товара заказчик обнаружил дефект, недокомплект или
|
||||
истечение срока годности в пределах гарантии, заданной поставщиком,
|
||||
он подаёт заявление на гарантийный возврат. Председатель участка
|
||||
сначала рассматривает заявление удалённо — по фото и описанию — и
|
||||
принимает одно из двух решений: одобрить очный визит или отказать
|
||||
удалённо. Если визит одобрен, заказчик приходит с продукцией на
|
||||
участок, председатель очно осматривает товар и выносит финальное
|
||||
решение — принять возврат или отказать на месте. При принятии
|
||||
возврата товар остаётся на складе участка, а сумма заказа
|
||||
возвращается заказчику на программный членский кошелёк Стола
|
||||
заказов: он может направить её на следующий заказ программы либо
|
||||
вывести в универсальный членский кошелёк отдельным действием.
|
||||
При отказе — на этом гарантийный возврат завершён, движений по
|
||||
имуществу и средствам не происходит. Дальнейшая судьба возвращённого
|
||||
имущества (возврат поставщику, перепоставка, списание) — вне этого
|
||||
процесса.
|
||||
roles:
|
||||
- orderer # пайщик-заказчик, инициатор возврата
|
||||
- chairman # председатель кооперативного участка (КУ)
|
||||
@@ -70,35 +79,53 @@ roles:
|
||||
# реализация в .cpp предстоит после согласования стандарта.
|
||||
actions:
|
||||
- name: marketplace::submretrn
|
||||
human: Подать заявление
|
||||
human: Подать заявление на гарантийный возврат
|
||||
actor: orderer
|
||||
role: opener
|
||||
purpose: >
|
||||
Пайщик в архиве заказа подаёт заявление на гарантийный возврат:
|
||||
выбирает причину (некондиция / истёк срок / иное) и прикладывает
|
||||
фото товара. Заявление возможно только пока не истёк гарантийный
|
||||
срок, указанный поставщиком — после истечения кнопка скрывается.
|
||||
Заказчик подаёт заявление на гарантийный возврат имущества:
|
||||
указывает причину обращения (некондиция, истёк срок годности,
|
||||
иное) и прикладывает фотографии товара. Подать заявление можно
|
||||
только пока не истёк гарантийный срок, заданный поставщиком.
|
||||
|
||||
- name: marketplace::decretremot
|
||||
human: Решить удалённо
|
||||
- name: marketplace::aprretrem
|
||||
human: Одобрить очный визит
|
||||
actor: chairman
|
||||
role: progress
|
||||
purpose: >
|
||||
Председатель участка удалённо рассматривает заявление и принимает
|
||||
одно из двух решений: одобрить визит для очной проверки (пайщику
|
||||
уходит уведомление прийти с продукцией) либо отказать удалённо
|
||||
(спор уходит в отдельную процедуру по регламенту кооператива).
|
||||
Председатель участка по результатам удалённого рассмотрения
|
||||
решает, что для разбора обращения нужен очный осмотр товара, и
|
||||
приглашает заказчика прийти на участок с продукцией.
|
||||
|
||||
- name: marketplace::decretvisit
|
||||
human: Решить очно
|
||||
- name: marketplace::rejretrem
|
||||
human: Отказать удалённо
|
||||
actor: chairman
|
||||
role: reject
|
||||
purpose: >
|
||||
Председатель участка по результатам удалённого рассмотрения
|
||||
решает отказать в гарантийном возврате с указанием причины — без
|
||||
приглашения на очный осмотр. Решение финальное, движений по
|
||||
имуществу и средствам не происходит.
|
||||
|
||||
- name: marketplace::accretrn
|
||||
human: Принять возврат
|
||||
actor: chairman
|
||||
role: closer
|
||||
purpose: >
|
||||
Председатель очно осматривает товар, принесённый пайщиком, и
|
||||
выносит финальное решение: принять возврат (товар остаётся на
|
||||
складе участка, сумма возвращается пайщику в программу — он может
|
||||
потратить её на следующий заказ) либо отказать на месте (пайщик
|
||||
забирает товар обратно, спор — отдельной процедурой).
|
||||
Председатель по результатам очного осмотра принимает гарантийный
|
||||
возврат: товар остаётся на складе участка, сумма заказа
|
||||
возвращается заказчику на программный членский кошелёк Стола
|
||||
заказов.
|
||||
|
||||
- name: marketplace::rejretrn
|
||||
human: Отказать на месте
|
||||
actor: chairman
|
||||
role: reject
|
||||
purpose: >
|
||||
Председатель по результатам очного осмотра отказывает в
|
||||
гарантийном возврате с указанием причины. Заказчик забирает
|
||||
товар обратно. Решение финальное, движений по имуществу и
|
||||
средствам не происходит.
|
||||
|
||||
# ── Секция 3. Граф состояний ────────────────────────────────────────────────
|
||||
# Сущность: marketplace::return_request (таблица return_requests, scope=coopname).
|
||||
@@ -108,44 +135,44 @@ entity_source: cpp/marketplace/src/return/
|
||||
|
||||
states:
|
||||
- name: pending_review
|
||||
human: На рассмотрении
|
||||
human: Заявление на рассмотрении
|
||||
description: >
|
||||
Заявление подано пайщиком, председатель участка получил уведомление
|
||||
и должен принять решение — одобрить визит или отказать по фото.
|
||||
Заявление подано заказчиком и ждёт решения председателя участка.
|
||||
kind: normal
|
||||
|
||||
- name: approved_for_visit
|
||||
human: Одобрен визит
|
||||
human: Очный визит одобрен
|
||||
description: >
|
||||
Председатель одобрил очное рассмотрение. Пайщик получил уведомление
|
||||
прийти на участок с продукцией; ждём визита и очного осмотра.
|
||||
Председатель одобрил очное рассмотрение. Заказчику предстоит
|
||||
прийти на участок с продукцией для очного осмотра.
|
||||
kind: normal
|
||||
|
||||
- name: return_accepted
|
||||
human: Возврат принят
|
||||
description: >
|
||||
Возврат принят кооперативом. Сумма заказа возвращена пайщику в
|
||||
программу — он может потратить её на следующий заказ либо вывести
|
||||
в общий членский кошелёк отдельным действием. Дальнейшая судьба
|
||||
возвращённого товара (возврат поставщику, перепоставка, списание)
|
||||
решается отдельно по регламенту кооператива; в этом процессе товар
|
||||
Возврат принят кооперативом. Сумма заказа возвращена заказчику на
|
||||
программный членский кошелёк Стола заказов — он может направить её
|
||||
на следующий заказ программы либо вывести в универсальный членский
|
||||
кошелёк отдельным действием. Дальнейшая судьба возвращённого
|
||||
имущества (возврат поставщику, перепоставка, списание) — отдельная
|
||||
процедура по регламенту кооператива; в рамках этого процесса товар
|
||||
остаётся на складе участка.
|
||||
kind: final
|
||||
|
||||
- name: rejected_remote
|
||||
human: Отказано удалённо
|
||||
human: Отказ удалённо
|
||||
description: >
|
||||
Председатель отказал по фото без визита. Пайщику отправлено
|
||||
уведомление с причиной; спор — отдельной процедурой по регламенту
|
||||
кооператива. Имущество и средства не двигаются.
|
||||
Председатель отказал по результатам удалённого рассмотрения.
|
||||
Гарантийный возврат завершён, движений по имуществу и средствам
|
||||
не происходит.
|
||||
kind: final
|
||||
|
||||
- name: rejected_at_ku
|
||||
human: Отказано на месте
|
||||
human: Отказ на месте
|
||||
description: >
|
||||
Председатель отказал после очного осмотра. Пайщик забирает товар
|
||||
обратно; спор — отдельной процедурой. Имущество и средства не
|
||||
двигаются.
|
||||
Председатель отказал по результатам очного осмотра. Заказчик
|
||||
забирает товар обратно. Гарантийный возврат завершён, движений
|
||||
по имуществу и средствам не происходит.
|
||||
kind: final
|
||||
|
||||
transitions:
|
||||
@@ -154,43 +181,43 @@ transitions:
|
||||
action: marketplace::submretrn
|
||||
actor: orderer
|
||||
guards:
|
||||
- Заявитель — заказчик-пайщик исходного Order'а (статус received).
|
||||
- Гарантийный срок, заданный в Offer'е поставщика, ещё не истёк.
|
||||
- Прикреплены фотографии товара и указана причина возврата.
|
||||
- Заявитель — заказчик-пайщик исходного заказа, по которому имущество уже выдано.
|
||||
- Гарантийный срок, заданный поставщиком в предложении, ещё не истёк.
|
||||
- К заявлению приложены фотографии товара и указана причина возврата.
|
||||
|
||||
- from: pending_review
|
||||
to: approved_for_visit
|
||||
action: marketplace::decretremot
|
||||
action: marketplace::aprretrem
|
||||
actor: chairman
|
||||
guards:
|
||||
- Председатель КУ (КУ-получателя) принял решение «Одобрить визит» по фото.
|
||||
- Председатель решил пригласить заказчика на очный осмотр.
|
||||
|
||||
- from: pending_review
|
||||
to: rejected_remote
|
||||
action: marketplace::decretremot
|
||||
action: marketplace::rejretrem
|
||||
actor: chairman
|
||||
guards:
|
||||
- Председатель КУ принял решение «Отказать удалённо» с указанием причины.
|
||||
- Председатель решил отказать в гарантийном возврате удалённо с указанием причины.
|
||||
|
||||
- from: approved_for_visit
|
||||
to: return_accepted
|
||||
action: marketplace::decretvisit
|
||||
action: marketplace::accretrn
|
||||
actor: chairman
|
||||
ledger_code: p.mkt.return
|
||||
operations:
|
||||
- o.mkt.return
|
||||
- o.mkt.return2
|
||||
guards:
|
||||
- Пайщик прибыл на КУ с продукцией.
|
||||
- Председатель очно осмотрел имущество и принял решение «Принять возврат».
|
||||
- Гарантийный срок ещё не истёк (повторная валидация на стороне контракта).
|
||||
- Заказчик прибыл на участок с продукцией.
|
||||
- Председатель очно осмотрел имущество и решил принять гарантийный возврат.
|
||||
- Гарантийный срок ещё не истёк.
|
||||
|
||||
- from: approved_for_visit
|
||||
to: rejected_at_ku
|
||||
action: marketplace::decretvisit
|
||||
action: marketplace::rejretrn
|
||||
actor: chairman
|
||||
guards:
|
||||
- Председатель очно осмотрел имущество и принял решение «Отказать на месте» с указанием причины.
|
||||
- Председатель очно осмотрел имущество и решил отказать в гарантийном возврате с указанием причины.
|
||||
|
||||
# ── Секция 4. Сценарий ──────────────────────────────────────────────────────
|
||||
scenario:
|
||||
@@ -200,80 +227,77 @@ scenario:
|
||||
actor: orderer
|
||||
action: marketplace::submretrn
|
||||
description: >
|
||||
Пайщик в архиве заказа открывает экран «Гарантийный возврат»
|
||||
(доступен, пока не истёк гарантийный срок поставщика). Указывает
|
||||
причину, прикладывает фотографии товара, ссылается на акт выдачи,
|
||||
по которому получал. Председатель участка получает уведомление
|
||||
о новом заявлении.
|
||||
Заказчик подаёт заявление на гарантийный возврат имущества:
|
||||
указывает причину обращения, прикладывает фотографии товара,
|
||||
ссылается на акт приёма-передачи, по которому получал имущество.
|
||||
Подать заявление
|
||||
можно только пока не истёк гарантийный срок, заданный
|
||||
поставщиком.
|
||||
pre:
|
||||
- Заказ закрыт (имущество выдано пайщику).
|
||||
- Заказ закрыт, имущество выдано заказчику.
|
||||
- Гарантийный срок ещё не истёк.
|
||||
- Приложены фото и указана причина.
|
||||
- Приложены фотографии товара и указана причина обращения.
|
||||
post:
|
||||
- Заявление зарегистрировано на рассмотрении.
|
||||
- Председатель уведомлён.
|
||||
- Заявление зарегистрировано и направлено председателю на рассмотрение.
|
||||
|
||||
- step: 2
|
||||
title: Удалённое рассмотрение
|
||||
title: Удалённое рассмотрение — приглашение на очный визит
|
||||
actor: chairman
|
||||
action: marketplace::decretremot
|
||||
action: marketplace::aprretrem
|
||||
description: >
|
||||
Председатель открывает заявление в столе админа участка, видит
|
||||
фото и описание. Решает: одобрить визит (пайщику уходит
|
||||
уведомление прийти с продукцией) или отказать удалённо (пайщик
|
||||
получает уведомление с причиной).
|
||||
Председатель участка изучает заявление и приложенные материалы
|
||||
и решает, что для разбора обращения нужен очный осмотр товара.
|
||||
Заказчику предстоит прийти на участок с продукцией.
|
||||
pre:
|
||||
- Заявление на рассмотрении.
|
||||
- Председатель авторизован.
|
||||
post:
|
||||
- Заявление одобрено к визиту либо отказано удалённо.
|
||||
- Пайщик уведомлён.
|
||||
- Очный визит одобрен.
|
||||
|
||||
- step: 3
|
||||
title: Очный осмотр и финальное решение
|
||||
title: Очный осмотр — принятие возврата
|
||||
actor: chairman
|
||||
action: marketplace::decretvisit
|
||||
action: marketplace::accretrn
|
||||
description: >
|
||||
Пайщик приходит на участок с продукцией. Председатель осматривает
|
||||
товар и выносит финальное решение: принять возврат (товар
|
||||
остаётся на складе, сумма возвращается пайщику в программу — он
|
||||
может потратить её на следующий заказ либо вывести в общий
|
||||
членский кошелёк отдельным действием) или отказать на месте
|
||||
(пайщик забирает товар обратно).
|
||||
Заказчик приходит на участок с продукцией. Председатель очно
|
||||
осматривает товар и принимает гарантийный возврат: товар
|
||||
остаётся на складе участка, сумма заказа возвращается
|
||||
заказчику на программный членский кошелёк Стола заказов.
|
||||
pre:
|
||||
- Визит одобрен.
|
||||
- Пайщик прибыл с продукцией.
|
||||
- Очный визит одобрен.
|
||||
- Заказчик прибыл на участок с продукцией.
|
||||
post:
|
||||
- При принятии — товар на складе участка, сумма возвращена пайщику в программу.
|
||||
- При отказе — пайщик забрал товар, ничего не двигалось.
|
||||
- Товар остаётся на складе участка.
|
||||
- Сумма заказа возвращена заказчику на программный членский кошелёк.
|
||||
|
||||
alternatives:
|
||||
- branch: Истечение гарантийного срока
|
||||
- branch: Гарантийный срок истёк
|
||||
at_step: 1
|
||||
action: null
|
||||
actor: orderer
|
||||
description: >
|
||||
Если гарантийный срок поставщика истёк, кнопка «Гарантийный
|
||||
возврат» в архиве заказа недоступна. Альтернатива — отдельная
|
||||
претензионная процедура по регламенту кооператива.
|
||||
Если гарантийный срок поставщика истёк, заявление на гарантийный
|
||||
возврат подать нельзя.
|
||||
|
||||
- branch: Отказ удалённо
|
||||
- branch: Удалённое рассмотрение — отказ
|
||||
at_step: 2
|
||||
action: marketplace::decretremot
|
||||
action: marketplace::rejretrem
|
||||
actor: chairman
|
||||
description: >
|
||||
Председатель отказал по фото без визита (например, товар
|
||||
очевидно не подпадает под гарантию). Пайщик получает уведомление
|
||||
с причиной. Спор — отдельной процедурой.
|
||||
Председатель отказывает в гарантийном возврате удалённо с
|
||||
указанием причины — например, обращение очевидно не подпадает
|
||||
под гарантию. Решение финальное, движений по имуществу и
|
||||
средствам не происходит.
|
||||
|
||||
- branch: Отказ на месте
|
||||
- branch: Очный осмотр — отказ
|
||||
at_step: 3
|
||||
action: marketplace::decretvisit
|
||||
action: marketplace::rejretrn
|
||||
actor: chairman
|
||||
description: >
|
||||
Председатель отказал после очного осмотра (например, повреждение
|
||||
не гарантийного характера). Пайщик забирает товар обратно. Спор —
|
||||
отдельной процедурой.
|
||||
Председатель отказывает в гарантийном возврате по результатам
|
||||
очного осмотра с указанием причины — например, характер
|
||||
повреждений не покрывается гарантией. Заказчик забирает товар
|
||||
обратно. Решение финальное, движений по имуществу и средствам
|
||||
не происходит.
|
||||
|
||||
# ── Секция 5. Документы и подписи ───────────────────────────────────────────
|
||||
# В процессе подписывается заявление пайщика на возврат с приложениями
|
||||
@@ -290,7 +314,7 @@ documents:
|
||||
stored_in: return_requests.statement
|
||||
note: "Используется существующий шаблон 800.ReturnByAssetStatement из cooptypes/cooperative/registry/. Оригинально создан под клиринговую модель donor'а («Заявление на возврат паевого взноса имуществом»); форма заявления пайщика на возврат структурно подходит и для членской модели гарантийного возврата. При необходимости методолог может создать специализированный шаблон в новой серии (1100+) — тогда registry_id обновится."
|
||||
|
||||
- action: marketplace::decretvisit
|
||||
- action: marketplace::accretrn
|
||||
title: Решение председателя КУ о принятии гарантийного возврата
|
||||
registry_id: 0
|
||||
signed_by: [chairman]
|
||||
@@ -310,7 +334,7 @@ operations:
|
||||
# выдачи): Дт 91 / Кт 86 — восстановление «прочих» за счёт ЦФ.
|
||||
# Закрытие транзита выполняется отдельной операцией o.mkt.return2
|
||||
# (Дт 10 / Кт 91), атомарно с o.mkt.return в той же транзакции
|
||||
# decretvisit. Согласовано с Ангелиной 2026-05-11.
|
||||
# accretrn. Согласовано с Ангелиной 2026-05-11.
|
||||
debit: 91 # Прочие доходы и расходы (NEW)
|
||||
credit: 86 # Целевое финансирование
|
||||
# L2 — восстановление средств в программе
|
||||
@@ -322,21 +346,21 @@ operations:
|
||||
available_delta: +order.fact_cost
|
||||
blocked_delta: null
|
||||
amount_ref: order.fact_cost
|
||||
triggered_by: marketplace::decretvisit
|
||||
triggered_by: marketplace::accretrn
|
||||
description: >
|
||||
Compensating forward к выдаче имущества (o.mkt.consum), часть 1
|
||||
композитной бухгалтерской проводки через транзит счёта 91. ISSUE на
|
||||
пайщикском w.mkt.member — .available +fact_cost (восстановление ранее
|
||||
списанной суммы); проводка Дт 91 / Кт 86 — восстановление «прочих»
|
||||
за счёт ЦФ (зеркало 91-стороны от o.mkt.consum). Сразу после этой
|
||||
операции в той же транзакции decretvisit контракт вызывает
|
||||
операции в той же транзакции accretrn контракт вызывает
|
||||
o.mkt.return2 (Дт 10 / Кт 91, NONE) — имущество назад на склад через
|
||||
закрытие транзита. Транзит через 91 симметричен выбытию на выдаче —
|
||||
согласовано с Ангелиной 2026-05-11. Журнал содержит payload
|
||||
original_consume_op_id (ссылка на исходный o.mkt.consum для
|
||||
трассировки) — это **прикладное поле**, не часть инфраструктуры
|
||||
revert. Дальнейшая судьба возвращённого имущества — определяется
|
||||
регламентом кооператива через отдельную процедуру вне Стола заказов.
|
||||
revert. Дальнейшая судьба возвращённого имущества — вне этого
|
||||
процесса.
|
||||
Пайщик может потратить возвращённую сумму на следующий заказ в Столе
|
||||
заказов либо вывести в общий членский кошелёк (w.wal.member) через
|
||||
отдельную операцию o.mkt.recall — там средства универсальны между
|
||||
@@ -357,12 +381,12 @@ operations:
|
||||
available_delta: null
|
||||
blocked_delta: null
|
||||
amount_ref: order.fact_cost
|
||||
triggered_by: marketplace::decretvisit
|
||||
triggered_by: marketplace::accretrn
|
||||
description: >
|
||||
Закрытие транзита счёта 91 после восстановления членского взноса
|
||||
пайщика. NONE — только бухпроводка Дт 10 / Кт 91, кошельки не
|
||||
двигаются. Срабатывает атомарно с o.mkt.return в той же транзакции
|
||||
decretvisit. По итогу пары operations нетто-эффект — Дт 10 / Кт 86
|
||||
accretrn. По итогу пары operations нетто-эффект — Дт 10 / Кт 86
|
||||
(имущество возвращается на склад + восстановление обязательства
|
||||
по целевой программе), 91 проходит нулевым транзитом.
|
||||
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
#
|
||||
# Это базовый процесс контракта Marketplace в режиме членских взносов
|
||||
# (закупка имущества кооперативом + потребление пайщиком). Содержит
|
||||
# атомарную серию операций по программному кошельку при создании Order'а,
|
||||
# цикл консолидации заявок Backend'ом, двухвариантную модель приёмки
|
||||
# (А — самовывоз / Б — экспедитор + бумажная ТТН + дистанционная ЭЦП),
|
||||
# двойные подписи на АПП приёмки и АПП выдачи.
|
||||
# атомарную серию операций по программному кошельку при создании заказа,
|
||||
# цикл отсечки заявок поставщика, двухвариантную модель передачи партии
|
||||
# на участок (самовывоз или через экспедитора), двойные подписи на двух
|
||||
# актах приёма-передачи — приёмки кооперативом от поставщика и выдачи
|
||||
# заказчику от кооператива.
|
||||
#
|
||||
# **Модель кошельков (refinement 2026-05-04, трёхуровневая серия):**
|
||||
# Членский взнос пайщика проходит через два кошелька:
|
||||
@@ -87,9 +88,45 @@ slug: supply
|
||||
status: proposed
|
||||
contract: marketplace
|
||||
purpose: >
|
||||
Базовый процесс «Стола заказов»: пайщик-заказчик находит у пайщика-
|
||||
поставщика нужный товар, оплачивает его членским взносом, кооператив
|
||||
принимает товар на склад и затем выдаёт заказчику.
|
||||
Базовый процесс «Стола заказов»: пайщик-заказчик выбирает у пайщика-
|
||||
поставщика имущество, направляет на этот заказ свой членский взнос,
|
||||
кооператив принимает имущество на склад участка и затем выдаёт его
|
||||
заказчику. Процесс описывает весь путь — от размещения заказа до
|
||||
передачи имущества на руки заказчику.
|
||||
|
||||
Как это устроено по шагам.
|
||||
|
||||
Поставщик-пайщик публикует предложение поставить имущество — в нём
|
||||
он указывает товар, цену, минимальное количество, при котором ему
|
||||
выгодно собрать партию, и срок, до которого собирает заказы. Это
|
||||
предложение и есть исходная точка процесса.
|
||||
|
||||
Пока предложение открыто, заказчики-пайщики добавляют к нему свои
|
||||
заказы. Этот период называется циклом отсечки заявок — окно, в
|
||||
течение которого кооператив принимает заказы под одно предложение
|
||||
поставщика. При создании заказа кооператив резервирует средства
|
||||
заказчика на программном членском кошельке Стола заказов — до конца
|
||||
цикла они не могут быть использованы.
|
||||
|
||||
Когда цикл завершается, кооператив смотрит, набрался ли минимальный
|
||||
порог поставки — заданное поставщиком количество заказов, при
|
||||
котором партию имеет смысл везти. Если порог набрался — все заказы
|
||||
цикла объединяются в одну консолидированную заявку, и она уходит
|
||||
поставщику на акцепт. Если не набрался — все заказы цикла
|
||||
отменяются, резерв со средств заказчиков снимается.
|
||||
|
||||
Поставщик соглашается выполнить консолидированную заявку, готовит
|
||||
партию и передаёт её на кооперативный участок. Приёмка оформляется
|
||||
актом приёма-передачи с двойной подписью: первой — поставщик
|
||||
подтверждает передачу, второй — председатель участка подтверждает
|
||||
приёмку. С этого момента кооператив юридически принял имущество,
|
||||
поставщику уходит оплата.
|
||||
|
||||
Дальше председатель открывает выдачу, заказчик приходит на пункт
|
||||
выдачи участка. Выдача оформляется отдельным актом приёма-передачи
|
||||
также с двойной подписью: первой — председатель подтверждает
|
||||
передачу имущества заказчику, финальной — заказчик подтверждает
|
||||
приёмку. Заказ закрыт, начинается гарантийное окно.
|
||||
roles:
|
||||
- orderer # пайщик-заказчик
|
||||
- offerer # пайщик-поставщик
|
||||
@@ -108,7 +145,7 @@ actions:
|
||||
Заказчик размещает заказ на товар из каталога: указывает количество
|
||||
и кооперативный участок, на котором заберёт товар. Кооператив
|
||||
резервирует средства заказчика под этот заказ — до окончания цикла
|
||||
поставки они не расходуются на другое. Заказ становится частью
|
||||
поставки они не могут быть использованы. Заказ становится частью
|
||||
консолидированной заявки поставщику.
|
||||
|
||||
- name: marketplace::cancelorder
|
||||
@@ -116,87 +153,93 @@ actions:
|
||||
actor: orderer
|
||||
role: progress
|
||||
purpose: >
|
||||
Заказчик передумал и отменяет заказ до того, как поставщик его
|
||||
принял в работу. Кооператив снимает резерв со средств — заказчик
|
||||
снова свободно ими распоряжается в рамках программы.
|
||||
Заказчик отменяет заказ до того, как поставщик принял
|
||||
консолидированную заявку в работу. Кооператив снимает резерв со
|
||||
средств — заказчик снова свободно ими распоряжается в рамках
|
||||
программы.
|
||||
|
||||
- name: marketplace::expirecycle
|
||||
human: Закрыть по истечении цикла
|
||||
human: Закрыть цикл отсечки заявок
|
||||
actor: backend
|
||||
role: progress
|
||||
purpose: >
|
||||
Окно сбора заявок поставщика закрывается. Если набралось достаточно
|
||||
заказов — поставщику уходит консолидированная заявка, и его дальше
|
||||
ждёт акцепт. Если не набралось достаточно заявок — все заказы цикла отменяются,
|
||||
резерв средств снимается, заказчики получают уведомление.
|
||||
Цикл отсечки заявок поставщика завершается. Кооператив сверяет
|
||||
количество заказов с минимальным порогом поставки, заданным
|
||||
поставщиком. Если порог набрался — заказы объединяются в
|
||||
консолидированную заявку и направляются поставщику для акцепта.
|
||||
Если порог не набрался — все заказы цикла отменяются, резерв со
|
||||
средств заказчиков снимается.
|
||||
|
||||
- name: marketplace::acceptbatch
|
||||
human: Акцептовать партию
|
||||
human: Акцептовать консолидированную заявку
|
||||
actor: offerer
|
||||
role: progress
|
||||
purpose: >
|
||||
Поставщик соглашается выполнить консолидированную заявку. Заказы переходят
|
||||
из статуса ожидания в подготовку отгрузки.
|
||||
Поставщик соглашается выполнить консолидированную заявку и берёт
|
||||
на себя обязательство собрать и передать партию кооперативу.
|
||||
Заказы переходят от ожидания к подготовке отгрузки.
|
||||
|
||||
- name: marketplace::declinebatch
|
||||
human: Отказаться от партии
|
||||
human: Отказаться от консолидированной заявки
|
||||
actor: offerer
|
||||
role: reject
|
||||
purpose: >
|
||||
Поставщик отказывается от заявки до того, как обязался её выполнить.
|
||||
Все заказы партии отменяются, резерв со средств заказчиков снимается.
|
||||
Договорные санкции — вне зоны контракта, по регламенту кооператива.
|
||||
Поставщик отказывается выполнить консолидированную заявку. Все
|
||||
заказы партии отменяются, резерв со средств заказчиков снимается.
|
||||
Договорные санкции при отказе — вне этого процесса, по регламенту
|
||||
кооператива.
|
||||
|
||||
- name: marketplace::prepship
|
||||
human: Подготовить отгрузку
|
||||
human: Собрать партию к отгрузке
|
||||
actor: offerer
|
||||
role: progress
|
||||
purpose: >
|
||||
Поставщик готовит партию к отправке: разбивает заказы по
|
||||
кооперативным участкам и выбирает, как везёт — сам или через
|
||||
экспедитора с бумажной накладной. В режиме с экспедитором печатает
|
||||
ТТН и подписывает её. Заменять номенклатуру нельзя — везёт ровно то,
|
||||
что акцептовал.
|
||||
Поставщик собирает партию: распределяет заказы по кооперативным
|
||||
участкам и выбирает способ доставки — везёт сам или передаёт через
|
||||
экспедитора. Состав партии должен в точности соответствовать тому,
|
||||
что поставщик акцептовал: заменять или подменять позиции запрещено
|
||||
(жёсткий акцепт).
|
||||
|
||||
- name: marketplace::signsupp
|
||||
human: Поставщик подписал приёмку
|
||||
human: Поставщик передал партию
|
||||
actor: offerer
|
||||
role: progress
|
||||
purpose: >
|
||||
Поставщик первой подписью подтверждает, что передал партию
|
||||
кооперативу. Имущество физически на складе участка, но юридически
|
||||
ещё не оприходовано — выдача пайщикам пока заблокирована до второй
|
||||
подписи председателя.
|
||||
Поставщик первой подписью на акте приёма-передачи подтверждает,
|
||||
что передал партию кооперативу. Имущество физически на складе
|
||||
участка, но юридически ещё не оприходовано — выдача заказчикам
|
||||
открывается только после второй подписи председателя.
|
||||
|
||||
- name: marketplace::signchair
|
||||
human: Председатель закрыл приёмку
|
||||
human: Председатель принял поставку
|
||||
actor: chairman
|
||||
role: progress
|
||||
purpose: >
|
||||
Председатель участка ставит вторую — закрывающую — подпись на
|
||||
приёмке. С этого момента партия юридически принята кооперативом,
|
||||
поставщик получает оплату, а имущество разблокировано к выдаче
|
||||
пайщикам.
|
||||
Председатель участка ставит вторую — завершающую — подпись на
|
||||
акте приёма-передачи. С этого момента партия юридически принята
|
||||
кооперативом, поставщику уходит оплата, имущество приходуется на
|
||||
склад участка и становится доступным к выдаче заказчикам.
|
||||
|
||||
- name: marketplace::signiss1
|
||||
human: Председатель открыл выдачу
|
||||
actor: chairman
|
||||
role: progress
|
||||
purpose: >
|
||||
Председатель открывает выдачу: маркирует имущество и подтверждает,
|
||||
что готов передать его заказчику. Заказчик получает уведомление,
|
||||
что заказ ждёт его на пункте выдачи.
|
||||
Председатель открывает выдачу: подтверждает, что готов передать
|
||||
имущество заказчику. Заказ становится готов к получению на пункте
|
||||
выдачи участка.
|
||||
|
||||
- name: marketplace::signiss2
|
||||
human: Заказчик закрыл выдачу
|
||||
human: Заказчик получил имущество
|
||||
actor: orderer
|
||||
role: closer
|
||||
purpose: >
|
||||
Заказчик пришёл на пункт выдачи и финальной подписью забрал свой
|
||||
заказ. Если фактически выданное расходится с заказом — сумма
|
||||
заранее корректируется до фактического (меньше — остаток вернётся
|
||||
на программный кошелёк, больше — доберётся с паевого). Заказ
|
||||
закрыт, открывается гарантийное окно.
|
||||
Заказчик пришёл на пункт выдачи и финальной подписью на акте
|
||||
выдачи забрал свой заказ. Если фактически выданное расходится с
|
||||
заказом — сумма заранее корректируется до фактического: при
|
||||
меньшем количестве остаток возвращается на программный членский
|
||||
кошелёк, при большем — недостающая сумма берётся с паевого
|
||||
заказчика. Заказ закрыт, открывается гарантийное окно.
|
||||
|
||||
# ── Секция 3. Граф состояний ────────────────────────────────────────────────
|
||||
# Сущность: marketplace::order (таблица orders, scope=coopname).
|
||||
@@ -208,65 +251,69 @@ entity_source: cpp/marketplace/src/
|
||||
|
||||
states:
|
||||
- name: active
|
||||
human: Заявка размещена
|
||||
human: Заказ размещён
|
||||
description: >
|
||||
Заказ создан и ждёт окончания цикла отсечки + согласия поставщика.
|
||||
Средства заказчика зарезервированы под этот заказ.
|
||||
Заказ создан и ждёт завершения цикла отсечки заявок и акцепта
|
||||
поставщика. Средства заказчика зарезервированы под этот заказ на
|
||||
программном членском кошельке Стола заказов.
|
||||
kind: normal
|
||||
|
||||
- name: cancelled
|
||||
human: Отменено
|
||||
human: Заказ отменён
|
||||
description: >
|
||||
Заказ аннулирован — заказчиком до акцепта, либо системой по
|
||||
истечении цикла без достижения порога, либо поставщиком при отказе
|
||||
от партии. Резерв со средств снят, заказчик снова свободно ими
|
||||
распоряжается в рамках программы.
|
||||
Заказ отменён по одному из трёх оснований: заказчиком до акцепта,
|
||||
кооперативом по итогам закрытия цикла без достижения минимального
|
||||
порога поставки, поставщиком при отказе от консолидированной
|
||||
заявки. Во всех трёх случаях резерв со средств заказчика снимается,
|
||||
и заказчик снова свободно ими распоряжается в рамках программы.
|
||||
kind: final
|
||||
|
||||
- name: accepted
|
||||
human: Поставщик акцептовал
|
||||
human: Заявка акцептована
|
||||
description: >
|
||||
Поставщик согласился выполнить консолидированную заявку. Средства
|
||||
заказчика по-прежнему зарезервированы; имущество ещё не передано —
|
||||
поставщик готовит отгрузку.
|
||||
заказчика по-прежнему зарезервированы; поставщик готовит партию к
|
||||
отгрузке.
|
||||
kind: normal
|
||||
|
||||
- name: ship_ready
|
||||
human: Отгрузка собрана
|
||||
human: Партия собрана к отгрузке
|
||||
description: >
|
||||
Поставщик собрал партию по составу акцепта и выбрал способ доставки
|
||||
(сам или через экспедитора с накладной). Готов к передаче на участок,
|
||||
но имущество ещё не оприходовано кооперативом.
|
||||
Поставщик собрал партию точно по составу акцептованной заявки и
|
||||
выбрал способ доставки на участок — самовывоз или через
|
||||
экспедитора. Имущество ещё не передано кооперативу.
|
||||
kind: normal
|
||||
|
||||
- name: supply_prepared
|
||||
human: Поставщик подписал
|
||||
human: Имущество поставлено
|
||||
description: >
|
||||
Поставщик подписал приёмку первым. Имущество физически на участке,
|
||||
но юридически ещё не оприходовано — выдача пайщикам заблокирована
|
||||
до второй подписи председателя.
|
||||
Поставщик передал партию на участок и подтвердил это первой
|
||||
подписью на акте приёма-передачи. Имущество физически на складе
|
||||
участка, но юридически ещё не оприходовано — выдача заказчикам
|
||||
откроется только после второй подписи председателя.
|
||||
kind: normal
|
||||
|
||||
- name: accepted_to_coop
|
||||
human: Принято кооперативом
|
||||
human: Поставка принята кооперативом
|
||||
description: >
|
||||
Кооператив юридически принял партию. Имущество на складе участка,
|
||||
поставщик получил оплату. Ждём готовности к выдаче.
|
||||
Председатель участка завершил приёмку второй подписью. Партия
|
||||
юридически принята кооперативом, поставщику ушла оплата, имущество
|
||||
числится на складе участка и ждёт открытия выдачи.
|
||||
kind: normal
|
||||
|
||||
- name: ready_to_receive
|
||||
human: Готово к выдаче
|
||||
human: Заказ готов к выдаче
|
||||
description: >
|
||||
Имущество промаркировано и готово к передаче заказчику. Заказчику
|
||||
отправлено уведомление, что заказ ждёт его на пункте выдачи.
|
||||
Председатель открыл выдачу. Имущество готово к передаче заказчику
|
||||
на пункте выдачи участка.
|
||||
kind: normal
|
||||
|
||||
- name: received
|
||||
human: Имущество выдано
|
||||
description: >
|
||||
Заказчик получил имущество, заказ закрыт. Открывается гарантийное
|
||||
окно — в его пределах можно подать заявление на возврат, если товар
|
||||
окажется некондиционным.
|
||||
Заказчик получил имущество, заказ закрыт. Открыто гарантийное
|
||||
окно — в его пределах заказчик может подать заявление на возврат,
|
||||
если товар окажется некондиционным.
|
||||
kind: final
|
||||
|
||||
transitions:
|
||||
@@ -281,10 +328,10 @@ transitions:
|
||||
- o.mkt.block
|
||||
guards:
|
||||
- Заказчик — активный пайщик кооператива.
|
||||
- Заказчик подписал Соглашение ЦПП «Стол заказов» (программный кошелёк w.mkt.member открыт).
|
||||
- Стоимость корзины не превышает 100 000 ₽ (валидируется Backend'ом до вызова контракта).
|
||||
- Совокупных средств заказчика по цепочке w.wal.share → w.wal.member → w.mkt.member достаточно для полной стоимости заказа (частичная конвертация на каждом шаге — берётся ровно недостача).
|
||||
- Указанный КУ принадлежит этому же кооперативу.
|
||||
- Заказчик подписал Соглашение ЦПП «Стол заказов».
|
||||
- Стоимость заказа не превышает упрощённый порог приёма имущества (100 000 ₽).
|
||||
- Совокупных средств заказчика — на паевом и членских кошельках — достаточно для полной стоимости заказа.
|
||||
- Указанный пункт выдачи принадлежит тому же кооперативу.
|
||||
|
||||
- from: active
|
||||
to: cancelled
|
||||
@@ -294,7 +341,7 @@ transitions:
|
||||
operations:
|
||||
- o.mkt.unblk
|
||||
guards:
|
||||
- Order ещё не акцептован поставщиком.
|
||||
- Заказ ещё не вошёл в акцептованную поставщиком консолидированную заявку.
|
||||
|
||||
- from: active
|
||||
to: cancelled
|
||||
@@ -304,16 +351,16 @@ transitions:
|
||||
operations:
|
||||
- o.mkt.unblk
|
||||
guards:
|
||||
- Окно цикла отсечки Offer'а истекло.
|
||||
- Минимальный порог поставки не достигнут.
|
||||
- Цикл отсечки заявок поставщика завершился.
|
||||
- Минимальный порог поставки по количеству заказов не достигнут.
|
||||
|
||||
- from: active
|
||||
to: accepted
|
||||
action: marketplace::acceptbatch
|
||||
actor: offerer
|
||||
guards:
|
||||
- Минимальный порог достигнут к концу цикла.
|
||||
- Поставщик владеет связанным Offer'ом.
|
||||
- Минимальный порог поставки достигнут к концу цикла отсечки.
|
||||
- Действие выполняет тот поставщик, чьё предложение лежит в основе консолидированной заявки.
|
||||
|
||||
- from: active
|
||||
to: cancelled
|
||||
@@ -323,24 +370,24 @@ transitions:
|
||||
operations:
|
||||
- o.mkt.unblk
|
||||
guards:
|
||||
- Поставщик отказывается от консолидированной партии до её публикации on-chain.
|
||||
- Поставщик ещё не акцептовал консолидированную заявку.
|
||||
|
||||
- from: accepted
|
||||
to: ship_ready
|
||||
action: marketplace::prepship
|
||||
actor: offerer
|
||||
guards:
|
||||
- Состав Shipment'а равен составу акцептованной партии (жёсткий акцепт; замены номенклатуры запрещены).
|
||||
- Поставщик выбрал режим: A (самовывоз) или B (экспедитор + ТТН).
|
||||
- Состав отгрузки в точности равен составу акцептованной заявки (жёсткий акцепт; замены номенклатуры запрещены).
|
||||
- Поставщик выбрал способ доставки на участок — самовывоз или через экспедитора.
|
||||
|
||||
- from: ship_ready
|
||||
to: supply_prepared
|
||||
action: marketplace::signsupp
|
||||
actor: offerer
|
||||
guards:
|
||||
- Состав АПП соответствует составу акцептованной партии.
|
||||
- В модели A — председатель отсканировал штрих-код поставщика, скорректировал quantity/price (если нужно), нажал «Подтверждаю»; поставщик получил push-takeover и нажал «Передал».
|
||||
- В модели B — председатель и экспедитор сверили груз очно и подписали бумажную ТТН с печатью КУ; председатель сделал фотофиксацию скорректированной ТТН; поставщик получил push-takeover (дистанционно) и подписал в течение 8 часов с момента ухода экспедитора.
|
||||
- На участок передана партия точно в составе акцептованной заявки — самовывозом поставщика или через экспедитора.
|
||||
- При самовывозе поставщик ставит первую подпись на акте приёма-передачи лично на участке.
|
||||
- При доставке через экспедитора председатель и экспедитор очно сверяют партию, и поставщик ставит первую подпись дистанционно в установленный кооперативом срок.
|
||||
|
||||
- from: supply_prepared
|
||||
to: accepted_to_coop
|
||||
@@ -351,15 +398,15 @@ transitions:
|
||||
- o.mkt.purch
|
||||
- o.mkt.payout
|
||||
guards:
|
||||
- АПП приёмки имеет первую подпись поставщика.
|
||||
- Председатель имеет роль оператора КУ-получателя.
|
||||
- На акте приёма-передачи имеется первая подпись поставщика.
|
||||
- Действие выполняет председатель того участка, который принимает поставку.
|
||||
|
||||
- from: accepted_to_coop
|
||||
to: ready_to_receive
|
||||
action: marketplace::signiss1
|
||||
actor: chairman
|
||||
guards:
|
||||
- Имущество промаркировано штрих-кодом / QR на складе КУ.
|
||||
- Партия принята кооперативом и числится на складе участка.
|
||||
|
||||
- from: ready_to_receive
|
||||
to: received
|
||||
@@ -370,8 +417,9 @@ transitions:
|
||||
- o.mkt.consum
|
||||
- o.mkt.consum2
|
||||
guards:
|
||||
- Заказчик присутствует на КУ; оператор сверил факт vs заказ.
|
||||
- При расхождении факт vs заказ сначала выполнены корректирующие операции (o.mkt.unblk на остаток если факт меньше; o.wal.conv + o.mkt.assign + o.mkt.block на разницу если факт больше — первые две conditional; в пределах допустимого отрицательного баланса паевого ≤5%).
|
||||
- Заказчик лично присутствует на пункте выдачи участка.
|
||||
- Председатель сверил фактически выдаваемое имущество с составом заказа.
|
||||
- При расхождении факта с заказом сумма заказа предварительно скорректирована до фактической в пределах допустимого регламентом отклонения.
|
||||
|
||||
# ── Секция 4. Сценарий ──────────────────────────────────────────────────────
|
||||
scenario:
|
||||
@@ -381,206 +429,190 @@ scenario:
|
||||
actor: orderer
|
||||
action: marketplace::createorder
|
||||
description: >
|
||||
Заказчик в столе заказчика выбирает позицию из каталога своего
|
||||
кооператива, указывает количество и кооперативный участок,
|
||||
на котором заберёт товар. Кооператив проверяет, что стоимость
|
||||
корзины не превышает упрощённый налоговый порог ТМЦ (100 000 ₽),
|
||||
и резервирует средства заказчика под этот заказ. Заказ появляется
|
||||
у заказчика как «активный» и присоединяется к текущему циклу
|
||||
отсечки.
|
||||
Заказчик выбирает позицию из каталога своего кооператива,
|
||||
указывает количество и пункт выдачи на участке, на котором
|
||||
заберёт товар. Кооператив проверяет, что стоимость заказа не
|
||||
превышает упрощённый порог приёма имущества, и резервирует под
|
||||
этот заказ необходимую сумму со средств заказчика. Заказ
|
||||
присоединяется к текущему циклу отсечки заявок поставщика.
|
||||
pre:
|
||||
- Пайщик имеет статус active.
|
||||
- Подписано Соглашение ЦПП «Стол заказов».
|
||||
- Совокупных средств заказчика на паевом + членском хватает.
|
||||
- Стоимость корзины ≤ 100 000 ₽.
|
||||
- Заказчик — активный пайщик кооператива.
|
||||
- Заказчик подписал Соглашение ЦПП «Стол заказов».
|
||||
- Совокупных средств заказчика — на паевом и членских кошельках — достаточно.
|
||||
- Стоимость заказа не превышает упрощённый порог приёма имущества.
|
||||
post:
|
||||
- Заказ создан и активен.
|
||||
- Заказ размещён и активен.
|
||||
- Средства заказчика зарезервированы под заказ.
|
||||
|
||||
- step: 2
|
||||
title: Закрытие цикла отсечки
|
||||
title: Закрытие цикла отсечки заявок
|
||||
actor: backend
|
||||
action: marketplace::expirecycle
|
||||
description: >
|
||||
Окно сбора заявок закрывается. Кооператив смотрит, набрался ли
|
||||
минимальный порог поставки. Если набрался — поставщику уходит
|
||||
консолидированная заявка, заказы остаются активными до акцепта.
|
||||
Если не набрался — все заказы цикла отменяются, резерв средств
|
||||
снимается, заказчики получают уведомление об отмене.
|
||||
Цикл отсечки заявок завершается. Кооператив сверяет количество
|
||||
собранных заказов с минимальным порогом поставки, заданным
|
||||
поставщиком. Если порог набрался — заказы объединяются в
|
||||
консолидированную заявку и направляются поставщику для акцепта.
|
||||
Если порог не набрался — все заказы цикла отменяются, резерв со
|
||||
средств заказчиков снимается.
|
||||
pre:
|
||||
- Окно цикла отсечки истекло.
|
||||
- Цикл отсечки заявок поставщика завершился.
|
||||
post:
|
||||
- Если порог достигнут — заказы активны, поставщику отправлена консолидированная заявка.
|
||||
- Если порог не достигнут — заказы отменены, резерв со средств снят.
|
||||
- При достижении порога — заказы активны, поставщику направлена консолидированная заявка.
|
||||
- При недостижении порога — заказы отменены, резерв со средств снят.
|
||||
|
||||
- step: 3
|
||||
title: Акцепт поставщика
|
||||
title: Акцепт консолидированной заявки
|
||||
actor: offerer
|
||||
action: marketplace::acceptbatch
|
||||
description: >
|
||||
Поставщик в своём кабинете видит консолидированную заявку
|
||||
и нажимает «Акцептовать». С этого момента он юридически обязан
|
||||
выполнить поставку — заказы переходят к подготовке отгрузки.
|
||||
Поставщик видит консолидированную заявку и подтверждает её к
|
||||
исполнению. С этого момента он принимает на себя обязательство
|
||||
собрать и передать партию кооперативу.
|
||||
pre:
|
||||
- Минимальный порог достигнут.
|
||||
- Поставщик владеет Offer'ом, на основе которого сформирована партия.
|
||||
- Минимальный порог поставки достигнут.
|
||||
- Действие выполняет тот поставщик, чьё предложение лежит в основе консолидированной заявки.
|
||||
post:
|
||||
- Заказы партии перешли к подготовке отгрузки.
|
||||
|
||||
- step: 4
|
||||
title: Подготовка отгрузки
|
||||
title: Подготовка партии к отгрузке
|
||||
actor: offerer
|
||||
action: marketplace::prepship
|
||||
description: >
|
||||
Поставщик в кабинете на вкладке «К отгрузке» видит акцептованные
|
||||
заказы, сгруппированные по участкам. Выбирает способ доставки:
|
||||
сам везёт на участок или отправляет через экспедитора с бумажной
|
||||
накладной. В режиме с экспедитором печатает ТТН и подписывает её.
|
||||
Замена номенклатуры запрещена — везёт ровно то, что акцептовал.
|
||||
Поставщик собирает партию по составу акцептованной заявки —
|
||||
точно в той же номенклатуре, без замен — и выбирает способ
|
||||
доставки на участок: самовывоз или через экспедитора.
|
||||
pre:
|
||||
- Заказы в статусе «акцептованы».
|
||||
- Состав отгрузки соответствует акцепту.
|
||||
- Заявка акцептована поставщиком.
|
||||
- Состав партии в точности соответствует составу акцепта.
|
||||
post:
|
||||
- Отгрузка собрана и готова к передаче на участок.
|
||||
- В режиме с экспедитором — ТТН распечатана и подписана.
|
||||
- Партия собрана к отгрузке.
|
||||
- Способ доставки выбран.
|
||||
|
||||
- step: 5
|
||||
title: Передача и приёмка — самовывозом
|
||||
actor: chairman
|
||||
title: Передача партии на участок
|
||||
actor: offerer
|
||||
action: marketplace::signsupp
|
||||
description: >
|
||||
Поставщик прибыл на участок. Председатель сканирует штрих-код
|
||||
поставщика — открывается карточка с ожидаемыми параметрами; при
|
||||
необходимости председатель правит количество или цену и нажимает
|
||||
«Подтверждаю». Поставщику приходит push-окно во весь экран — он
|
||||
нажимает «Передал», это его первая подпись приёмки. Имущество
|
||||
физически на участке, но выдача пайщикам ещё заблокирована.
|
||||
Поставщик передаёт партию кооперативу. При самовывозе он лично
|
||||
сдаёт партию председателю и очно ставит первую подпись на акте
|
||||
приёмки-передачи. При доставке через экспедитора председатель и
|
||||
экспедитор очно сверяют груз с составом партии, и по итогам этой
|
||||
сверки поставщик ставит первую подпись дистанционно в
|
||||
установленный кооперативом срок. В обоих случаях имущество уже
|
||||
физически на складе участка, но юридически ещё не оприходовано —
|
||||
выдача заказчикам пока не открыта.
|
||||
pre:
|
||||
- Отгрузке соответствует акцептованный заказ.
|
||||
- Поставщик и председатель физически на участке.
|
||||
- Партия собрана к отгрузке.
|
||||
- Состав акта приёма-передачи в точности соответствует составу акцептованной заявки.
|
||||
post:
|
||||
- Поставщик подписал приёмку первым.
|
||||
- Выдача пайщикам ЗАБЛОКИРОВАНА до второй подписи председателя.
|
||||
- Имущество поставлено, первая подпись на акте приёма-передачи поставлена.
|
||||
- Выдача заказчикам не открыта до второй подписи председателя.
|
||||
|
||||
- step: 6
|
||||
title: Закрытие приёмки председателем
|
||||
title: Приёмка поставки председателем
|
||||
actor: chairman
|
||||
action: marketplace::signchair
|
||||
description: >
|
||||
Председатель ставит вторую — закрывающую — подпись на приёмке.
|
||||
Партия юридически принята кооперативом, поставщику уходит оплата,
|
||||
выдача пайщикам разблокирована. Заказчик пока не уведомлён —
|
||||
ждёт открытия выдачи отдельным шагом.
|
||||
Председатель участка ставит вторую — завершающую — подпись на
|
||||
акте приёма-передачи. С этого момента партия юридически принята
|
||||
кооперативом, поставщику уходит оплата, имущество приходуется на
|
||||
склад участка.
|
||||
pre:
|
||||
- Поставщик подписал приёмку первым.
|
||||
- Председатель имеет роль оператора участка-получателя.
|
||||
- На акте приёма-передачи имеется первая подпись поставщика.
|
||||
- Действие выполняет председатель того участка, который принимает поставку.
|
||||
post:
|
||||
- Партия принята кооперативом.
|
||||
- Поставщик получил оплату.
|
||||
- Поставка принята кооперативом.
|
||||
- Поставщику направлена оплата.
|
||||
|
||||
- step: 7
|
||||
title: Маркировка имущества и открытие выдачи
|
||||
title: Открытие выдачи
|
||||
actor: chairman
|
||||
action: marketplace::signiss1
|
||||
description: >
|
||||
Оператор маркирует принятое имущество внутренним кодом для
|
||||
учёта на складе участка (печатает на принтере участка) и
|
||||
открывает выдачу: ставит первую подпись акта выдачи. Заказчику
|
||||
уходит уведомление, что заказ готов на пункте выдачи.
|
||||
Председатель открывает выдачу первой подписью на акте
|
||||
приёма-передачи. Заказ становится готов к получению на пункте
|
||||
выдачи участка.
|
||||
pre:
|
||||
- Партия принята кооперативом.
|
||||
- Имущество физически на складе участка.
|
||||
- Поставка принята кооперативом.
|
||||
- Имущество числится на складе участка.
|
||||
post:
|
||||
- Имущество промаркировано.
|
||||
- Заказчик уведомлён о готовности.
|
||||
- Заказ готов к выдаче.
|
||||
|
||||
- step: 8
|
||||
title: Выдача и финальная подпись заказчика
|
||||
title: Выдача заказа
|
||||
actor: orderer
|
||||
action: marketplace::signiss2
|
||||
description: >
|
||||
Заказчик пришёл на участок и показывает QR-код заявки оператору.
|
||||
Оператор сверяет факт vs заказ. Если совпадает — без корректировок.
|
||||
Если фактически меньше (например, развесной товар: 90 г вместо
|
||||
100 г) — кооператив снимает резерв с разницы, остаток вернётся
|
||||
заказчику в программу. Если фактически больше — недостающую сумму
|
||||
кооператив резервирует с паевого; при пустом паевом допускается
|
||||
небольшой отрицательный баланс или донос наличными через кассира.
|
||||
Заказчик подписывает выдачу на устройстве оператора — это
|
||||
финальная подпись, заказ закрыт.
|
||||
Заказчик приходит на пункт выдачи участка. Председатель сверяет
|
||||
фактически выдаваемое имущество с составом заказа. Если факт
|
||||
совпадает с заказом — выдача проходит без корректировок. При
|
||||
расхождении (например, развесной товар: фактический вес меньше
|
||||
заказанного) сумма заказа предварительно корректируется до
|
||||
фактической: при меньшем количестве остаток возвращается на
|
||||
программный членский кошелёк заказчика, при большем — недостающая
|
||||
сумма берётся с паевого заказчика. Заказчик ставит финальную
|
||||
подпись на акте приёма-передачи и забирает заказ.
|
||||
pre:
|
||||
- Заказ готов к выдаче.
|
||||
- Заказчик присутствует на участке.
|
||||
- Заказчик лично присутствует на пункте выдачи.
|
||||
post:
|
||||
- Имущество выдано пайщику.
|
||||
- Имущество выдано заказчику.
|
||||
- Заказ закрыт.
|
||||
- Гарантийное окно открыто — пайщик может подать заявление на возврат до его истечения.
|
||||
- Гарантийное окно открыто — в его пределах заказчик может подать заявление на возврат.
|
||||
|
||||
alternatives:
|
||||
- branch: Передача и приёмка — через экспедитора с накладной
|
||||
at_step: 5
|
||||
action: marketplace::signsupp
|
||||
actor: chairman
|
||||
description: >
|
||||
Бумажная ступень: председатель и экспедитор очно сверяют груз
|
||||
по ТТН. При расхождении вычёркивают позиции прямо в накладной
|
||||
ручкой, экспедитор расписывается под корректировкой, председатель
|
||||
ставит подпись + дату + печать участка. Экспедитор забирает свой
|
||||
экземпляр накладной с забракованным и уезжает. Цифровая ступень
|
||||
(дистанционно с поставщиком): председатель в приложении
|
||||
фотофиксирует исправленную ТТН — формируется скорректированный
|
||||
акт приёмки — поставщик в своём приложении получает push-окно
|
||||
во весь экран и подписывает. На дистанционную подпись поставщика
|
||||
отводится не более 8 часов с момента ухода экспедитора. Если
|
||||
не успел — выдача пайщикам остаётся заблокированной, дальнейшее
|
||||
решение — по регламенту кооператива.
|
||||
pre:
|
||||
- Партия отправлена через экспедитора с бумажной накладной.
|
||||
- Накладная подписана председателем + экспедитором + печатью участка.
|
||||
post:
|
||||
- Поставщик подписал приёмку первым (по фотофиксации ТТН).
|
||||
- Выдача пайщикам ЗАБЛОКИРОВАНА до второй подписи председателя.
|
||||
- Дальнейшие шаги — те же, что при самовывозе.
|
||||
|
||||
- branch: Поставщик отказался от корректировки (через экспедитора)
|
||||
at_step: 5
|
||||
action: null
|
||||
actor: offerer
|
||||
description: >
|
||||
Поставщик дистанционно отказался подписать скорректированный
|
||||
по накладной акт. Формируется претензионная запись на сверку
|
||||
изначального акцепта против скорректированного. Дальнейшее
|
||||
решение — ручная договорная процедура по регламенту кооператива
|
||||
(санкции, возврат, перепоставка). Системные формы санкций в MVP
|
||||
не реализуются. Выдача пайщикам не разблокирована.
|
||||
|
||||
- branch: Отмена заказчиком до акцепта
|
||||
at_step: 2
|
||||
action: marketplace::cancelorder
|
||||
actor: orderer
|
||||
description: >
|
||||
Заказчик отменяет заказ до того, как поставщик его принял в работу.
|
||||
Кооператив снимает резерв со средств — заказчик снова свободно
|
||||
ими распоряжается в рамках программы. Если хочет вывести в общий
|
||||
членский кошелёк — отдельным явным действием.
|
||||
Заказчик отменяет заказ до того, как поставщик принял
|
||||
консолидированную заявку. Кооператив снимает резерв со средств,
|
||||
и заказчик снова свободно ими распоряжается в рамках программы.
|
||||
|
||||
- branch: Отказ поставщика от партии
|
||||
at_step: 3
|
||||
action: marketplace::declinebatch
|
||||
actor: offerer
|
||||
description: >
|
||||
Поставщик отказывается от консолидированной заявки до того,
|
||||
как обязался её выполнить. Все заказы партии отменяются, резерв
|
||||
со средств заказчиков снимается. Заказчики получают уведомление.
|
||||
|
||||
- branch: Цикл истёк без достижения порога
|
||||
- branch: Цикл закрыт без достижения порога
|
||||
at_step: 2
|
||||
action: marketplace::expirecycle
|
||||
actor: backend
|
||||
description: >
|
||||
Окно сбора заявок истекло, минимальный порог поставки не набрался.
|
||||
Все заказы цикла отменяются, резерв со средств снимается,
|
||||
заказчики получают уведомление об отмене.
|
||||
Цикл отсечки заявок завершился, но минимальный порог поставки
|
||||
по количеству заказов не достигнут. Все заказы цикла отменяются,
|
||||
резерв со средств заказчиков снимается.
|
||||
|
||||
- branch: Отказ поставщика от консолидированной заявки
|
||||
at_step: 3
|
||||
action: marketplace::declinebatch
|
||||
actor: offerer
|
||||
description: >
|
||||
Поставщик отказывается выполнить консолидированную заявку до её
|
||||
акцепта. Все заказы партии отменяются, резерв со средств
|
||||
заказчиков снимается. Договорные санкции при отказе — вне этого
|
||||
процесса, по регламенту кооператива.
|
||||
|
||||
- branch: Передача партии через экспедитора
|
||||
at_step: 5
|
||||
action: marketplace::signsupp
|
||||
actor: offerer
|
||||
description: >
|
||||
Партия доставлена на участок через экспедитора. Председатель и
|
||||
экспедитор очно сверяют груз с составом партии. При расхождении
|
||||
председатель фиксирует фактический состав, экспедитор
|
||||
подтверждает это своей подписью на сопроводительных документах.
|
||||
По итогам очной сверки поставщик дистанционно ставит первую
|
||||
подпись на акте приёма-передачи в установленный кооперативом
|
||||
срок. Дальнейшие шаги — как при самовывозе.
|
||||
|
||||
- branch: Поставщик не подписал акт приёма-передачи в срок
|
||||
at_step: 5
|
||||
action: null
|
||||
actor: offerer
|
||||
description: >
|
||||
Поставщик не поставил дистанционную первую подпись на акте
|
||||
приёмки-передачи в установленный срок. Выдача заказчикам не
|
||||
открывается; дальнейшее решение — по регламенту кооператива
|
||||
(досверка, перепоставка, претензия).
|
||||
|
||||
# ── Секция 5. Документы и подписи ───────────────────────────────────────────
|
||||
# В процессе подписываются два юридически значимых документа: АПП приёмки
|
||||
@@ -620,11 +652,11 @@ documents:
|
||||
note: "Тот же шаблон что у signiss1 (registry_id 802)."
|
||||
|
||||
- action: marketplace::prepship
|
||||
title: Товарно-транспортная накладная (модель B, бумажная)
|
||||
title: Товарно-транспортная накладная (при доставке через экспедитора)
|
||||
registry_id: 0
|
||||
signed_by: [offerer, chairman, expediter]
|
||||
stored_in: shipments.ttn_pdf
|
||||
note: "TODO: создать шаблон ТТН в registry. В модели A не используется. Подписи проставляются вне блокчейна (бумажно), фотофиксация председателя сохраняется для дистанционной ЭЦП поставщика."
|
||||
note: "TODO: создать шаблон ТТН в registry. При самовывозе не используется. Подписи проставляются вне блокчейна (на бумажном носителе); фотофиксация председателя по результатам очной сверки сохраняется как основание для дистанционной подписи поставщика."
|
||||
|
||||
# ── Секция 6. Операции (Ledger2) ────────────────────────────────────────────
|
||||
# Восемь ledger2-операций для процесса прямой поставки-приобретения. Имена
|
||||
|
||||
@@ -49,12 +49,21 @@ status: proposed
|
||||
contract: marketplace
|
||||
purpose: >
|
||||
Штатный путь корректно отразить в учёте имущество, которое физически
|
||||
пропало или стало непригодным к выдаче. Используется, когда товар на
|
||||
складе кооперативного участка просрочился, испортился или иначе не
|
||||
может быть передан пайщику-заказчику. Без этого процесса такие позиции
|
||||
висели бы бесконечно на складе — здесь же кооператив честно фиксирует
|
||||
свои потери через решение совета. По умолчанию запускается ежемесячно;
|
||||
точную дату согласовывает бухгалтер.
|
||||
пропало или стало непригодным к выдаче. Применяется, когда товар на
|
||||
складе участка просрочился, испортился или иначе не может быть
|
||||
передан заказчику. Без этого процесса такие позиции висели бы на
|
||||
складе бесконечно — здесь кооператив честно фиксирует свои потери
|
||||
через решение совета.
|
||||
|
||||
Процесс состоит из двух шагов. На первом шаге кооператив по расписанию
|
||||
(по умолчанию раз в месяц; точную дату согласовывает бухгалтер)
|
||||
собирает со складов участков позиции, удовлетворяющие критериям
|
||||
списания, формирует проект решения и выносит его на повестку совета.
|
||||
На втором шаге совет рассматривает проект и принимает решение:
|
||||
при положительном решении позиции списываются со складов как
|
||||
безвозвратные потери; при отрицательном — проект отклоняется или
|
||||
откладывается, а позиции остаются на складах. По кошелькам заказчиков
|
||||
движений не происходит — это чисто кооперативный учётный расход.
|
||||
roles:
|
||||
- backend # Backend Marketplace (крон-триггер, формирование проекта)
|
||||
- chairman # председатель кооператива (вносит проект на повестку совета)
|
||||
@@ -64,14 +73,14 @@ roles:
|
||||
# Имена actions ≤12 символов eosio::name.
|
||||
actions:
|
||||
- name: marketplace::propwroff
|
||||
human: Подать проект списания
|
||||
human: Внести проект списания
|
||||
actor: backend
|
||||
role: opener
|
||||
purpose: >
|
||||
Кооператив по расписанию (по умолчанию раз в месяц) собирает на
|
||||
складах участков товары, которые невозможно выдать пайщику —
|
||||
просроченные и не востребованные, повреждённые, малооценка — и
|
||||
формирует проект решения о списании. Проект уходит на повестку
|
||||
складах участков позиции, которые невозможно выдать заказчику —
|
||||
просроченные и не востребованные, повреждённые, малооценные — и
|
||||
формирует проект решения о списании. Проект выносится на повестку
|
||||
совета.
|
||||
|
||||
- name: marketplace::execwroff
|
||||
@@ -79,18 +88,18 @@ actions:
|
||||
actor: council
|
||||
role: closer
|
||||
purpose: >
|
||||
Совет принял положительное решение по проекту. Кооператив списывает
|
||||
позиции со складов — товар уходит из учёта как безвозвратные потери,
|
||||
по кошелькам пайщиков ничего не двигается. Проект закрыт.
|
||||
Совет принял положительное решение по проекту. Кооператив
|
||||
списывает позиции со складов участков — имущество уходит из учёта
|
||||
как безвозвратные потери. По кошелькам заказчиков движений нет.
|
||||
|
||||
- name: marketplace::declwroff
|
||||
human: Отклонить проект списания
|
||||
actor: council
|
||||
role: reject
|
||||
purpose: >
|
||||
Совет отклонил проект — либо отложил рассмотрение. Позиции остаются
|
||||
на складах и попадут в следующий цикл утилизации, либо уйдут на
|
||||
переуступку по сниженной цене (вне MVP).
|
||||
Совет отклонил проект списания либо отложил его рассмотрение.
|
||||
Позиции остаются на складах участков и попадут в следующий цикл
|
||||
списания.
|
||||
|
||||
# ── Секция 3. Граф состояний ────────────────────────────────────────────────
|
||||
# Сущность: marketplace::writeoff_proposal (таблица writeoff_proposals,
|
||||
@@ -104,24 +113,24 @@ states:
|
||||
- name: draft
|
||||
human: Проект сформирован
|
||||
description: >
|
||||
Кооператив сформировал список позиций к утилизации и поставил проект
|
||||
решения на повестку совета. Ждёт рассмотрения по протоколу.
|
||||
Кооператив сформировал список позиций к списанию и вынес проект
|
||||
решения на повестку совета. Ждёт рассмотрения советом.
|
||||
kind: normal
|
||||
|
||||
- name: executed
|
||||
human: Списание исполнено
|
||||
description: >
|
||||
Совет принял положительное решение, кооператив списал позиции со
|
||||
складов. Имущество ушло из учёта как безвозвратные потери; по
|
||||
кошелькам пайщиков движений не было.
|
||||
складов участков. Имущество ушло из учёта как безвозвратные
|
||||
потери. По кошелькам заказчиков движений не было.
|
||||
kind: final
|
||||
|
||||
- name: rejected
|
||||
human: Отклонено советом
|
||||
human: Проект отклонён
|
||||
description: >
|
||||
Совет отклонил проект либо отложил рассмотрение. Позиции остаются
|
||||
на складах и либо попадут в следующий цикл утилизации, либо уйдут
|
||||
на переуступку по сниженной цене (вне MVP).
|
||||
Совет отклонил проект списания либо отложил его рассмотрение.
|
||||
Позиции остаются на складах участков и попадут в следующий цикл
|
||||
списания.
|
||||
kind: final
|
||||
|
||||
transitions:
|
||||
@@ -130,8 +139,8 @@ transitions:
|
||||
action: marketplace::propwroff
|
||||
actor: backend
|
||||
guards:
|
||||
- Сработал крон утилизации (по умолчанию раз в месяц).
|
||||
- Найдены позиции, удовлетворяющие критериям списания (просроченные, не выданные первичному заказчику, малооценка).
|
||||
- Наступил регламентный срок очередного цикла списания.
|
||||
- На складах участков найдены позиции, удовлетворяющие критериям списания (просроченные, не выданные первичному заказчику, повреждённые, малооценные).
|
||||
|
||||
- from: draft
|
||||
to: executed
|
||||
@@ -142,15 +151,14 @@ transitions:
|
||||
- o.mkt.wroff
|
||||
- o.mkt.wroff2
|
||||
guards:
|
||||
- Совет принял положительное решение по протоколу (sov.decision).
|
||||
- Решение содержит подписанный документ authorization.
|
||||
- Совет принял положительное решение по проекту и оформил его протоколом.
|
||||
|
||||
- from: draft
|
||||
to: rejected
|
||||
action: marketplace::declwroff
|
||||
actor: council
|
||||
guards:
|
||||
- Совет принял отрицательное решение либо вышел регламентный срок рассмотрения без принятия решения.
|
||||
- Совет принял отрицательное решение по проекту либо не принял решение в установленный регламентом срок.
|
||||
|
||||
# ── Секция 4. Сценарий ──────────────────────────────────────────────────────
|
||||
scenario:
|
||||
@@ -162,29 +170,31 @@ scenario:
|
||||
description: >
|
||||
Кооператив по расписанию (по умолчанию раз в месяц, точная дата
|
||||
согласовывается с бухгалтером) опрашивает склады участков и
|
||||
собирает товары, которые невозможно выдать пайщику: просроченные
|
||||
и не востребованные, повреждённые, малооценка. Сформированный
|
||||
список становится проектом решения и идёт на повестку совета.
|
||||
собирает позиции, которые невозможно выдать заказчику:
|
||||
просроченные и не востребованные, повреждённые, малооценные.
|
||||
Сформированный список становится проектом решения и выносится
|
||||
на повестку совета.
|
||||
pre:
|
||||
- Сработал крон утилизации.
|
||||
- Найден непустой список позиций к списанию.
|
||||
- Наступил регламентный срок очередного цикла списания.
|
||||
- На складах участков найдены позиции, удовлетворяющие критериям списания.
|
||||
post:
|
||||
- Проект списания создан.
|
||||
- Пункт повестки опубликован в совете.
|
||||
- Проект списания сформирован.
|
||||
- Проект вынесен на повестку совета.
|
||||
|
||||
- step: 2
|
||||
title: Рассмотрение и принятие решения советом
|
||||
title: Рассмотрение проекта советом
|
||||
actor: council
|
||||
action: marketplace::execwroff
|
||||
description: >
|
||||
Председатель или член совета вносит проект на ближайшее заседание
|
||||
(или заочное голосование). Совет рассматривает список позиций
|
||||
и принимает протокол. При положительном решении кооператив
|
||||
списывает все позиции со складов — товар уходит из учёта как
|
||||
безвозвратные потери. По кошелькам пайщиков движений не было.
|
||||
Совет рассматривает проект — на очном заседании или в форме
|
||||
заочного голосования — и принимает решение, оформленное
|
||||
протоколом. При положительном решении кооператив списывает
|
||||
перечисленные в проекте позиции со складов участков. Имущество
|
||||
уходит из учёта как безвозвратные потери. По кошелькам
|
||||
заказчиков движений не происходит.
|
||||
pre:
|
||||
- Проект на рассмотрении.
|
||||
- Совет принял положительное решение по протоколу.
|
||||
- Проект внесён на рассмотрение совета.
|
||||
- Совет принял положительное решение по проекту и оформил его протоколом.
|
||||
post:
|
||||
- Списание исполнено.
|
||||
- Списанные позиции ушли со складов участков.
|
||||
@@ -195,20 +205,21 @@ scenario:
|
||||
action: marketplace::declwroff
|
||||
actor: council
|
||||
description: >
|
||||
Совет отклонил проект (например, требует дополнительной
|
||||
экспертизы) либо отложил рассмотрение. Позиции остаются на
|
||||
складах и либо попадут в следующий цикл утилизации, либо уйдут
|
||||
на альтернативный путь переуступки по сниженной цене.
|
||||
Совет отклонил проект списания (например, требуется
|
||||
дополнительная экспертиза) либо отложил его рассмотрение.
|
||||
Позиции остаются на складах участков и попадут в следующий цикл
|
||||
списания.
|
||||
|
||||
- branch: Альтернатива — переуступка по сниженной цене (вне MVP)
|
||||
- branch: Альтернатива — переуступка имущества по сниженной цене
|
||||
at_step: 1
|
||||
action: null
|
||||
actor: backend
|
||||
description: >
|
||||
Альтернативный путь: вместо списания кооператив сам выступает
|
||||
поставщиком в новом предложении по сниженной цене (товар ещё
|
||||
пригоден, например, накануне истечения срока). В MVP только
|
||||
помечен; реализуется отдельным процессом в Phase 2.
|
||||
Альтернативный путь для имущества, ещё пригодного к выдаче
|
||||
(например, накануне истечения срока годности): кооператив сам
|
||||
выступает поставщиком в новом предложении по сниженной цене и
|
||||
ставит имущество на следующий цикл отсечки заявок. В MVP только
|
||||
помечен; реализуется отдельным процессом в более поздней фазе.
|
||||
|
||||
# ── Секция 5. Документы и подписи ───────────────────────────────────────────
|
||||
# В процессе подписывается протокол решения совета (authorization), который
|
||||
|
||||
Reference in New Issue
Block a user