# ─────────────────────────────────────────────────────────────────────────────
# Стандарт «Приём результата интеллектуальной деятельности» — оформление РИД
# участника проекта программы «Благорост» как имущественного паевого взноса
# с финальной конвертацией сегмента между ЦК и программой.
#
# Многоэтапный процесс. Пять ledger2-операций:
#   • o.cap.commit — коммит РИД при одобрении (Дт 8 / Кт 80, ISSUE w.cap.gen)
#   • o.cap.accept — приём РИД в НМА по акту-2 (Дт 4 / Кт 8, NONE — без движения кошелька)
#   • o.cap.repay  — опционально, если у участника есть заём (см. p.cap.debt)
#   • o.cap.cnvshr — конвертация сегмента в ЦК (TRANSFER w.cap.gen → w.wal.share, без проводки)
#   • o.cap.cnvbl  — конвертация сегмента в Благорост (TRANSFER w.cap.gen → w.cap.blago, без проводки)
#
# Анкер процесса — result_hash (живёт от pushrslt до convertsegm).
#
# Источники правды в коде:
#   • cpp/capital/capital.hpp                                            — actions
#   • cpp/capital/app/generation/create_commit/{createcmmt,approvecmmt,declinecmmt}.cpp — коммит
#   • cpp/capital/app/result_submission/push_result/{pushrslt,approverslt,authrslt,declrslt,signact1,signact2,convertsegm}.cpp — приём + конвертация
#   • cpp/lib/core/ledger2/operations.hpp                                 — o.cap.commit/accept/repay/cnvshr/cnvbl
# ─────────────────────────────────────────────────────────────────────────────

# ── Секция 1. Паспорт ───────────────────────────────────────────────────────
process_type: p.cap.rid
id: public_capital_rid_process
title: Приём результата интеллектуальной деятельности
slug: rid
status: proposed
contract: capital
summary: >
  Участник программы «Благорост» оформляет результат интеллектуальной
  деятельности (РИД) как имущественный паевой взнос: коммит → одобрение
  мастера → заявление о результате → одобрение председателем → авторизация
  советом → акт приёма-передачи (две подписи) → распределение паевого
  взноса между Цифровым Кошельком и программой «Благорост».
purpose: >
  «Приём результата интеллектуальной деятельности» — участник проекта
  программы «Благорост» оформляет результат своей работы (РИД) как
  имущественный паевой взнос. Сначала фиксируется коммит работы по
  проекту, по завершении проекта — заявление участника, одобрение
  председателя, авторизация совета и акт приёма-передачи в двух
  подписях. Если у участника был беспроцентный заём проекта, он
  закрывается в момент приёма РИД — без отдельной заявки.
  Завершающее действие — распределение полученного паевого взноса:
  часть участник может забрать в Цифровой Кошелёк, часть оставить
  в программе «Благорост».

roles:
  - contributor       # Участник проекта (исполнитель РИД)
  - master            # Мастер проекта — одобряет коммит
  - chairman          # Председатель — одобряет результат и подписывает акт-2
  - soviet            # Совет — авторизует приём РИД

# ── Секция 2. Действия контракта ────────────────────────────────────────────
actions:
  - name: capital::createcmmt
    human: Создать коммит РИД
    actor: Участник
    role: opener
    purpose: >
      Участник проекта подаёт коммит результата интеллектуальной деятельности.
      Контракт создаёт запись коммита, рассчитывает delta-распределение
      по формуле проекта.

  - name: capital::approvecmmt
    human: Одобрить коммит
    actor: Мастер
    role: progress
    purpose: >
      Мастер проекта одобряет коммит. На этом этапе применяется ledger2-
      операция o.cap.commit — РИД зачисляется на единый кошелёк ЦПП
      «Генератор» у пайщика (w.cap.gen) с проводкой Дт 8 / Кт 80.

  - name: capital::declinecmmt
    human: Отклонить коммит
    actor: Мастер
    role: reject
    purpose: >
      Мастер отказывает в одобрении коммита. Запись удаляется, операция
      o.cap.commit не создаётся.

  - name: capital::pushrslt
    human: Подать заявление
    actor: Участник
    role: progress
    purpose: >
      После завершения проекта участник подаёт заявление о результате —
      указывает сумму взноса и сумму долга к погашению. Контракт создаёт
      запись результата (status `created`) и направляет заявление председателю
      на одобрение.

  - name: capital::approverslt
    human: Одобрить результат
    actor: Председатель
    role: progress
    purpose: >
      Председатель одобряет заявление участника о результате. Прикладывается
      одобренное заявление, статус результата → `approved`. Заявление
      направляется в совет на авторизацию.

  - name: capital::authrslt
    human: Авторизовать советом
    actor: Совет
    role: progress
    purpose: >
      Совет авторизует приём результата (через sov.authpkg). Прикладывается
      протокол решения совета (registry_id=1041), статус результата →
      `authorized`. Открывается возможность подписания акта приёма-передачи.

  - name: capital::declrslt
    human: Отклонить результат
    actor: Совет
    role: reject
    purpose: >
      Совет отклоняет результат на любой стадии (created/approved/authorized).
      Запись результата удаляется, статус сегмента возвращается в `ready` —
      участник может повторно подать заявление.

  - name: capital::signact1
    human: Подписать акт (исполнитель)
    actor: Участник
    role: progress
    purpose: >
      Участник ставит первую подпись на акте приёма-передачи РИД —
      подтверждение передачи РИД от исполнителя.

  - name: capital::signact2
    human: Принять РИД в паевой фонд
    actor: Председатель
    role: progress
    purpose: >
      Председатель ставит вторую подпись на акте приёма-передачи. Применяются
      две ledger2-операции: o.cap.accept (Дт 4 / Кт 8 — РИД зачислен в НМА,
      кошелёк остаётся на ЦПП «Генератор» до конвертации) и опционально
      o.cap.repay (если у участника был заём проекта — закрытие займа).
      Объект результата сохраняется со статусом ACT2 как анкер процесса
      до финальной конвертации.

  - name: capital::convertsegm
    human: Распределить паевой взнос
    actor: Участник
    role: closer
    purpose: >
      Участник распределяет накопленный паевой взнос между Цифровым
      Кошельком и программой «Благорост». Применяются две ledger2-операции
      без бухпроводок (бухзапись была сделана в signact2): o.cap.cnvshr
      (часть в Цифровой Кошелёк) и o.cap.cnvbl (часть в программу «Благорост»).
      После конвертации сегмент и объект результата удаляются — процесс
      завершён.

# ── Секция 3. Граф состояний ────────────────────────────────────────────────
entity: "capital::commit → capital::result"
entity_human: "Коммит РИД → принятый РИД"
entity_source: "cpp/capital/app/generation/create_commit/, cpp/capital/app/result_submission/push_result/"

states:
  - name: commit_created
    human: Коммит подан
    description: >
      Участник зафиксировал коммит РИД в проекте, рассчитаны delta-распределения
      по формуле. Ожидается одобрение мастера.
    kind: normal

  - name: commit_approved
    human: Коммит одобрен
    description: >
      Мастер одобрил коммит. РИД зачислен на единый кошелёк ЦПП «Генератор»
      у пайщика (w.cap.gen) с проводкой Дт 8 / Кт 80. Ожидается завершение
      проекта и подача заявления о результате.
    kind: normal

  - name: pushed
    human: Заявление подано
    description: >
      Участник подал заявление о результате (после завершения проекта).
      Запись результата в статусе `created`, заявление направлено
      председателю на одобрение.
    kind: normal

  - name: result_approved
    human: Председатель одобрил
    description: >
      Председатель одобрил заявление участника. Заявление приложено
      к результату, направлено в совет для авторизации.
    kind: normal

  - name: result_authorized
    human: Совет авторизовал
    description: >
      Совет авторизовал приём РИД. Протокол решения совета приложен.
      Открывается этап подписания акта приёма-передачи.
    kind: normal

  - name: act1_signed
    human: Первая подпись на акте
    description: >
      Участник поставил первую подпись на акте приёма-передачи РИД.
      Ожидается вторая подпись от председателя.
    kind: normal

  - name: accepted
    human: РИД принят в паевой фонд
    description: >
      Председатель поставил вторую подпись на акте приёма-передачи: РИД
      зачислен в нематериальные активы кооператива (Дт 4 / Кт 8 без
      движения по кошелькам — кошелёк остаётся на ЦПП «Генератор»
      у пайщика до конвертации). Если у участника был заём проекта — он
      закрылся (o.cap.repay). Объект результата хранится в статусе ACT2
      как анкер процесса до конвертации сегмента.
    kind: normal

  - name: converted
    human: Паевой взнос распределён
    description: >
      Участник распределил полученный паевой взнос между Цифровым Кошельком
      (w.wal.share) и программой «Благорост» (w.cap.blago). Кошелёк ЦПП
      «Генератор» (w.cap.gen) у пайщика по этому сегменту закрыт. Сегмент
      и объект результата удалены — процесс РИД завершён.
    kind: final

  - name: removed
    human: Отклонено
    description: >
      Коммит отклонён мастером, либо результат отклонён советом. Запись
      удалена, ledger2-операции по этому пути не создавались (o.cap.commit
      сохраняется, если он уже сработал на этапе approvecmmt — учитывается
      на w.cap.gen до момента признания).
    kind: virtual
    virtual: true

transitions:
  - from: "∅"
    to: commit_created
    action: capital::createcmmt
    actor: Участник
    guards:
      - Проект и пайщик активны.
      - commit_hash уникален, creator_hours > 0.
      - Подписано приложение к проекту.

  - from: commit_created
    to: commit_approved
    action: capital::approvecmmt
    actor: Мастер
    ledger_code: o.cap.commit
    operations:
      - o.cap.commit
    guards:
      - Мастер проекта валиден.

  - from: commit_created
    to: removed
    action: capital::declinecmmt
    actor: Мастер
    guards:
      - Мастер отказал в одобрении коммита.

  - from: commit_approved
    to: pushed
    action: capital::pushrslt
    actor: Участник
    guards:
      - Заявление о результате подписано ЭЦП участника (registry_id=1040).
      - Сегмент в статусе READY, проект завершён (RESULT).
      - Сумма взноса соответствует intellectual_cost сегмента.

  - from: pushed
    to: result_approved
    action: capital::approverslt
    actor: Председатель
    guards:
      - Одобренное заявление подписано председателем.
      - Результат в статусе CREATED, сегмент в STATEMENT.

  - from: result_approved
    to: result_authorized
    action: capital::authrslt
    actor: Совет
    guards:
      - Документ-протокол решения совета подписан (registry_id=1041).
      - Результат в статусе APPROVED, сегмент в APPROVED.

  - from: result_authorized
    to: act1_signed
    action: capital::signact1
    actor: Участник
    guards:
      - Акт-1 подписан исполнителем (registry_id=1042).
      - Результат в статусе AUTHORIZED.

  - from: act1_signed
    to: accepted
    action: capital::signact2
    actor: Председатель
    ledger_code: o.cap.accept
    operations:
      - o.cap.accept
      - o.cap.repay
    guards:
      - Акт-2 подписан председателем (registry_id=1042).

  - from: accepted
    to: converted
    action: capital::convertsegm
    actor: Участник
    ledger_code: o.cap.cnvshr
    operations:
      - o.cap.cnvshr
      - o.cap.cnvbl
    guards:
      - Заявление о конвертации подписано участником.
      - Сегмент актуален (rfrshsegment до вызова).
      - Сумма wallet_amount + capital_amount равна доступной части паевого взноса.

  - from: pushed
    to: removed
    action: capital::declrslt
    actor: Совет
    guards:
      - Совет отклоняет результат.

  - from: result_approved
    to: removed
    action: capital::declrslt
    actor: Совет
    guards:
      - Совет отклоняет результат.

  - from: result_authorized
    to: removed
    action: capital::declrslt
    actor: Совет
    guards:
      - Совет отклоняет результат после авторизации.

# ── Секция 4. Сценарий ──────────────────────────────────────────────────────
scenario:
  steps:
    - step: 1
      title: Создание коммита РИД
      actor: Участник
      action: capital::createcmmt
      description: >
        Участник проекта оформляет коммит результата интеллектуальной
        деятельности: контракт создаёт запись со статусом `commit_created`,
        рассчитывает delta-распределение по формуле проекта.
      pre:
        - Пайщик подписал приложение к проекту.
      post:
        - Запись commits в статусе `created`.

    - step: 2
      title: Одобрение коммита мастером
      actor: Мастер
      action: capital::approvecmmt
      description: >
        Мастер проекта одобряет коммит. Применяется ledger2-операция
        o.cap.commit — РИД зачисляется на единый кошелёк ЦПП «Генератор»
        у пайщика (w.cap.gen), Дт 8 / Кт 80.
      pre:
        - Коммит в статусе `created`.
      post:
        - Коммит в статусе `approved`.
        - В ledger2 применена o.cap.commit.

    - step: 3
      title: Заявление о результате
      actor: Участник
      action: capital::pushrslt
      description: >
        После завершения проекта участник подаёт заявление о результате
        (registry_id=1040), указывая сумму взноса и сумму долга к погашению.
      pre:
        - Проект в статусе RESULT, сегмент в READY.
      post:
        - Создана запись results в статусе CREATED.

    - step: 4
      title: Одобрение результата председателем
      actor: Председатель
      action: capital::approverslt
      description: >
        Председатель одобряет заявление участника, прикладывает одобренное
        заявление, направляет результат в совет для авторизации.
      pre:
        - Результат в статусе CREATED.
      post:
        - Результат в статусе APPROVED.

    - step: 5
      title: Авторизация советом
      actor: Совет
      action: capital::authrslt
      description: >
        Совет (через sov.authpkg) принимает решение об авторизации приёма
        РИД, прикладывает протокол (registry_id=1041).
      pre:
        - Результат в статусе APPROVED.
      post:
        - Результат в статусе AUTHORIZED.

    - step: 6
      title: Первая подпись на акте приёма-передачи
      actor: Участник
      action: capital::signact1
      description: >
        Участник ставит первую подпись на акте приёма-передачи —
        подтверждение передачи РИД исполнителем.
      pre:
        - Результат в статусе AUTHORIZED.
      post:
        - Результат в статусе ACT1.

    - step: 7
      title: Приём РИД в паевой фонд (вторая подпись)
      actor: Председатель
      action: capital::signact2
      description: >
        Председатель ставит вторую подпись на акте приёма-передачи.
        Применяются две ledger2-операции:
        (1) o.cap.accept — РИД зачислен в нематериальные активы кооператива
            (Дт 4 / Кт 8, без движения кошелька — РИД остаётся на едином
            кошельке ЦПП «Генератор» у пайщика до конвертации);
        (2) опционально o.cap.repay — если у участника был заём проекта,
            заём закрывается (w.cap.loan → w.wal.share, Дт 80 / Кт 58).
      pre:
        - Результат в статусе ACT1.
      post:
        - Результат в статусе ACT2 (анкер процесса до конвертации).
        - В ledger2 применены o.cap.accept (+ опц. o.cap.repay).
        - Сегмент в статусе CONTRIBUTED.

    - step: 8
      title: Распределение паевого взноса (конвертация сегмента)
      actor: Участник
      action: capital::convertsegm
      description: >
        Участник распределяет полученный паевой взнос между Цифровым
        Кошельком и программой «Благорост». Применяются две ledger2-операции
        без бухпроводок (бухзапись была сделана в signact2):
        (1) o.cap.cnvshr — часть переводится с единого кошелька ЦПП
            «Генератор» у пайщика (w.cap.gen) в Цифровой Кошелёк
            (w.wal.share);
        (2) o.cap.cnvbl  — часть переводится с w.cap.gen на единый кошелёк
            ЦПП «Благорост» у пайщика (w.cap.blago).
        После применения сегмент и объект результата удаляются — процесс
        завершён.
      pre:
        - Результат в статусе ACT2, сегмент в CONTRIBUTED.
      post:
        - Кошелёк w.cap.gen у пайщика по этому сегменту закрыт.
        - Сегмент удалён, объект результата удалён.
        - В ledger2 применены o.cap.cnvshr и o.cap.cnvbl (любая из сумм может быть нулевой).

  alternatives:
    - branch: Отказ мастера на коммите
      at_step: 2
      action: capital::declinecmmt
      actor: Мастер
      description: >
        Мастер не одобрил коммит. Запись удаляется, операции в ledger2
        не создавались.

    - branch: Отказ совета на результате
      at_step: 5
      action: capital::declrslt
      actor: Совет
      description: >
        Совет отклоняет результат на любой стадии (created/approved/authorized).
        Запись результата удаляется, сегмент возвращается в `ready`,
        возможна повторная подача заявления.

# ── Секция 5. Документы и подписи ───────────────────────────────────────────
documents:
  - action: capital::pushrslt
    title: Заявление о взносе результата интеллектуальной деятельности
    registry_id: 1040
    signed_by: [ Участник ]
    stored_in: results.statement

  - action: capital::approverslt
    title: Заявление о взносе результата интеллектуальной деятельности (вторая подпись председателя)
    registry_id: 1040
    signed_by: [ Участник, Председатель ]
    stored_in: results.approved_statement

  - action: capital::authrslt
    title: Протокол решения совета о приеме паевого взноса РИД
    registry_id: 1041
    signed_by: [ Совет ]
    stored_in: results.authorization

  - action: capital::signact1
    title: Акт приема-передачи результата интеллектуальной деятельности (первая подпись участника)
    registry_id: 1042
    signed_by: [ Участник ]
    stored_in: results.act1

  - action: capital::signact2
    title: Акт приема-передачи результата интеллектуальной деятельности (вторая подпись председателя)
    registry_id: 1042
    signed_by: [ Участник, Председатель ]
    stored_in: results.act2

  - action: capital::convertsegm
    title: Заявление о распределении паевого взноса по результату
    registry_id: TBD-Standardization
    signed_by: [ Участник ]
    stored_in: action_payload.convert_statement

# ── Секция 6. Операции ──────────────────────────────────────────────────────
operations:
  - ledger_code: o.cap.commit
    human_name: Коммит РИД по программе «Благорост»
    wallet_op: ISSUE
    wallet_from: ''
    wallet_to: w.cap.gen           # ЦПП «Генератор» — единый кошелёк программы у пайщика
    debit: 8                   # Вложения во внеоборотные активы
    credit: 80                 # Паевой фонд (складочный капитал)
    amount_ref: commit.delta_amount
    triggered_by: capital::approvecmmt
    description: >
      Зачисление РИД-коммита на единый кошелёк ЦПП «Генератор» у пайщика (w.cap.gen)
      при одобрении мастером. Двойная запись Дт 8 / Кт 80 — РИД учитывается
      как вложение во внеоборотные активы и формирует паевой фонд.

  - ledger_code: o.cap.accept
    human_name: Приём РИД в паевой фонд
    wallet_op: NONE
    wallet_from: ''                # без перемещения по кошелькам — кошелёк остаётся на w.cap.gen
    wallet_to: ''
    debit: 4                   # Нематериальные активы
    credit: 8                  # Вложения во внеоборотные активы
    amount_ref: segment.available_for_program
    triggered_by: capital::signact2
    description: >
      Бухгалтерская запись приёма РИД в нематериальные активы кооператива:
      закрывает Кт 8 (вложения во внеоборотные активы) и записывает Дт 4
      (нематериальные активы) на полную сумму available_for_program
      сегмента. Перемещение по кошелькам не выполняется — РИД остаётся
      на едином кошельке ЦПП «Генератор» у пайщика (w.cap.gen) до
      финальной конвертации сегмента.

  - ledger_code: o.cap.repay
    human_name: Возврат беспроцентного займа пайщика по акту-2
    wallet_op: TRANSFER
    wallet_from: w.cap.loan          # Выданные пайщикам беспроцентные займы
    wallet_to: w.wal.share            # ЦК — паевой взнос пайщика
    debit: 80                  # Паевой фонд (складочный капитал)
    credit: 58                 # Финансовые вложения
    amount_ref: debt.amount
    triggered_by: capital::signact2
    description: >
      Опциональная операция при наличии у участника беспроцентного займа
      проекта (см. p.cap.debt). На акте-2 закрытый РИД зачитывает заём:
      финансовое вложение списывается (Кт 58), паевой фонд закрывает
      обязательство (Дт 80), сумма становится доступной на паевом
      взносе пайщика.

  - ledger_code: o.cap.cnvshr
    human_name: 'Конвертация сегмента: РИД → главный кошелёк'
    wallet_op: TRANSFER
    wallet_from: w.cap.gen         # ЦПП «Генератор» — единый кошелёк программы у пайщика
    wallet_to: w.wal.share         # ЦК — паевой взнос пайщика
    debit: ''                  # без бухпроводки — Дт 4 / Кт 8 уже сделана в o.cap.accept
    credit: ''
    amount_ref: convertsegm.wallet_amount
    triggered_by: capital::convertsegm
    description: >
      Часть паевого взноса по результату направляется в Цифровой Кошелёк
      пайщика. Бухгалтерская запись была сделана ранее в o.cap.accept
      на полную сумму сегмента — здесь только перемещение по кошелькам.

  - ledger_code: o.cap.cnvbl
    human_name: 'Конвертация сегмента: РИД → ЦПП «Благорост»'
    wallet_op: TRANSFER
    wallet_from: w.cap.gen         # ЦПП «Генератор» — единый кошелёк программы у пайщика
    wallet_to: w.cap.blago         # ЦПП «Благорост» — единый кошелёк программы у пайщика
    debit: ''                  # без бухпроводки — Дт 4 / Кт 8 уже сделана в o.cap.accept
    credit: ''
    amount_ref: convertsegm.capital_amount
    triggered_by: capital::convertsegm
    description: >
      Часть паевого взноса по результату остаётся в программе «Благорост»
      пайщика. Бухгалтерская запись была сделана ранее в o.cap.accept
      на полную сумму сегмента — здесь только перемещение по кошелькам.

# ── Секция 7. Связи ─────────────────────────────────────────────────────────
related:
  - process_type: p.cap.invest
    id: public_capital_invest_process
    relation: provides
    note: >
      Чтобы коммитить РИД в проект, участник должен быть инвестором
      «Благорост» — это устанавливает p.cap.invest.

  - process_type: sov.authpkg
    relation: triggers
    note: >
      Авторизация результата советом (`authrslt`) выполняется через
      универсальный процесс автоматизированного принятия решений.

  - process_type: p.cap.debt
    id: public_capital_debt_process
    relation: triggers
    note: >
      Если у участника был беспроцентный заём проекта, на акте-2
      срабатывает дополнительная операция o.cap.repay — заём закрывается
      из паевого фонда.

  - process_type: p.cap.prop
    id: public_capital_property_process
    relation: affects
    note: >
      Альтернативный имущественный путь — приём имущественного паевого
      взноса (p.cap.prop), отдельный от РИД.
