# ─────────────────────────────────────────────────────────────────────────────
# Стандарт «Присоединение к платформе кооперативной экономики».
# Объединяет два действия:
#   • registrator::regcoop  — кооператив-член платформы подписывает
#     пользовательское соглашение (оферту) о присоединении (registry_id=50);
#   • soviet::converttoaxn  — конвертация части паевого взноса
#     в членский взнос платформы (AXON) — оплата ресурсов платформы
#     (registry_id=51, проверяется в .cpp).
#
# Источники в коде:
#   • cpp/registrator/src/coop/regcoop.cpp
#   • cpp/soviet/src/system/converttoaxn.cpp
# ─────────────────────────────────────────────────────────────────────────────

process_type: reg.coop
id: public_registrator_coop_process
title: Присоединение к платформе кооперативной экономики
slug: coop
status: proposed
contract: registrator
summary: >
  Подключение кооператива к платформе «Кооперативная Экономика»: подписание
  соглашения о присоединении и конвертация части паевого взноса в членский
  взнос платформы (AXON) для оплаты ресурсов.
purpose: >
  «Присоединение к платформе» — кооператив подключается к цифровой
  платформе «Кооперативная Экономика». Председатель подписывает
  соглашение о присоединении, часть паевого взноса конвертируется
  в членский взнос платформы (AXON) для оплаты её ресурсов:
  документооборота, операций, хранения.

roles:
  - chairman          # Председатель/регистратор кооператива (подписант)
  - soviet            # Совет провайдера платформы — авторизация присоединения

# ── Секция 2. Действия контракта ────────────────────────────────────────────
actions:
  - name: registrator::regcoop
    human: Подписать соглашение
    actor: Председатель
    role: opener
    purpose: >
      Председатель кооператива (или регистратор) подписывает пользовательское
      соглашение о присоединении к платформе и фиксирует в реестре платформы
      параметры кооператива (взносы, описание). Запись кооператива переходит
      в статус «pending» и ожидает авторизации советом провайдера.

  - name: soviet::converttoaxn
    human: Конвертировать в AXON
    actor: Совет
    role: closer
    purpose: >
      Совет провайдера выполняет конвертацию указанной суммы из паевого
      фонда кооператива в членский взнос платформы (AXON). Двойная запись
      проводится через ledger2 как TRANSFER из кошелька паевого фонда
      в кошелёк делегатских взносов (Дт 80 / Кт 86). После конвертации
      кооператив получает AXON-токены и считается активным членом платформы.
    links:
      - process_type: sov.authpkg
        label: Автоматизированное принятие решения

# ── Секция 3. Граф состояний ────────────────────────────────────────────────
entity: registrator::cooperative
entity_human: Кооператив на платформе
entity_source: cpp/registrator/src/coop/

states:
  - name: pending
    human: Соглашение подписано
    description: >
      Кооператив подписал пользовательское соглашение о присоединении
      и зарегистрирован в реестре платформы. Ожидает авторизации советом
      провайдера для активации членства и получения AXON-ресурсов.
    kind: normal

  - name: active
    human: Кооператив активен
    description: >
      Совет провайдера утвердил присоединение, выполнена конвертация паевого
      взноса в AXON. Кооператив — активный член платформы, может пользоваться
      её ресурсами (документооборот, операции, хранение).
    kind: final

transitions:
  - from: "∅"
    to: pending
    action: registrator::regcoop
    actor: Председатель
    guards:
      - Аккаунт уже зарегистрирован как пользователь (через reguser).
      - Тип аккаунта = organization, is_cooperative = true.
      - Все четыре взноса (initial/minimum/org_initial/org_minimum) положительные и в RUB.
      - Соглашение о присоединении подписано ЭЦП председателя.

  - from: pending
    to: active
    action: soviet::converttoaxn
    actor: Совет
    guards:
      - Заявление о конвертации валидно (registry_id=51).
      - Сумма конвертации положительная и в RUB.
      - На кошельке программы провайдера достаточно средств для списания.

# ── Секция 4. Сценарий ──────────────────────────────────────────────────────
scenario:
  steps:
    - step: 1
      title: Подписание соглашения
      actor: Председатель
      action: registrator::regcoop
      description: >
        Председатель кооператива подписывает пользовательское соглашение
        о присоединении к платформе и направляет его в контракт регистратора.
        Контракт создаёт/обновляет запись кооператива в реестре, фиксирует
        параметры взносов и кладёт документ соглашения в картотеку.
      pre:
        - Кооператив существует как организация в registrator-картотеке (после reguser).
        - Соглашение подписано ЭЦП.
      post:
        - В таблице cooperatives2 запись кооператива в статусе `pending`.
        - Документ соглашения зафиксирован в реестре через make_complete_document.

    - step: 2
      title: Конвертация в AXON
      actor: Совет
      action: soviet::converttoaxn
      description: >
        Совет провайдера выполняет конвертацию указанной суммы из паевого
        взноса кооператива в членский взнос платформы (AXON) по курсу 10:1.
        В ledger2 проводится TRANSFER из кошелька паевого фонда в кошелёк
        делегатских взносов. Контракт system эмитирует AXON-токены на счёт
        кооператива; заявление о конвертации фиксируется в реестре.
      pre:
        - Кооператив в статусе `pending`.
        - Заявление о конвертации валидно (registry_id=51) и подписано ЭЦП.
      post:
        - Кооператив активен на платформе (получил AXON-токены).
        - В ledger2 проведена операция переноса средств в фонд делегатских взносов.
        - Заявление о конвертации зафиксировано в реестре.

# ── Секция 5. Документы и подписи ───────────────────────────────────────────
documents:
  - action: registrator::regcoop
    title: Пользовательское соглашение (оферта) о присоединении к платформе «Кооперативная Экономика»
    registry_id: 50
    signed_by: [ Председатель ]
    stored_in: cooperatives2.document

  - action: soviet::converttoaxn
    title: Заявление о конвертации паевого взноса в членский взнос
    registry_id: 51
    signed_by: [ Председатель ]
    stored_in: documents-registry (по statement.hash)

# ── Секция 6. Операции (Ledger2) ────────────────────────────────────────────
# Операция конвертации поднимается из ledger2 при срабатывании converttoaxn.
# Ledger_code и параметры — по фактической записи в operations.hpp.
operations:
  - ledger_code: o.sov.axncnv
    human_name: Конвертация паевого взноса в членский взнос
    wallet_op: TRANSFER
    wallet_from: w.wal.share  # ЦПП «Цифровой Кошелёк» — паевые взносы деньгами
    wallet_to: w.sov.delgte    # Делегатские членские взносы
    debit: 80                 # Паевой фонд
    credit: 86                # Целевое финансирование
    amount_ref: amount
    triggered_by: soviet::converttoaxn
    description: >
      Перенос средств из паевого фонда кооператива в фонд делегатских
      (членских) взносов. Двойная запись Дт 80 / Кт 86 — паевой капитал
      превращается в целевые поступления провайдера платформы.

# ── Секция 7. Связи ─────────────────────────────────────────────────────────
related:
  - process_type: sov.authpkg
    relation: triggers
    note: >
      Авторизация присоединения советом провайдера выполняется через
      универсальный процесс автоматизированного принятия решений (sov.authpkg).
