Перейти к содержанию

Повестка совета

Типы решений

Страница "Повестка совета" отображает все вопросы, вынесенные на рассмотрение, по которым совету предстоит принять решения. Решения бывают: стандартизированными и произвольными.

повестка совета

Стандартизированные решения ведут к автоматизированному их исполнению согласно стандартам смарт-контрактов и обычно являются частью какого-либо бизнес-процесса. Например, при решении о приёме пайщика в кооператив - пайщик автоматически добавляется в реестр и ему открывается главный кошелек, а при решении о приеме имущественного паевого взноса, пайщик и председатель кооперативного участка получают возможность подписать акт приема-передачи. Стандартизированные решения обычно являются промежуточными в цепочке действий бизнес-процесса, которая продолжит свое исполнение, как только решение совета по вопросу будет принято.

Произвольные решения не исполняются автоматически, т.к. у них для этого нет правил стандартов. Произвольные решения позволяют членам совета предлагать вопросы на повестку и проекты решений по ним. Система автоматически сформирует документ предложения повестки и предложит совету проголосовать. При утверждении решения председателем совета, система сформирует протокол решения и сохранит его в реестре документов. Контроль исполнения принятого произвольного решения ложится на членов совета.

Если решение не принято?

Если решение по вопросу не принято, то председатель не получит возможность утвердить протокол и следовательно он не попадет в реестр документов. Так, в реестр документов попадают только принятые и утвержденные решения совета. Что же касается стандартизированного бизнес-процесса, который прерывается, то у него на случай отказа в принятии решения всегда есть сценарий отмены, по ходу которого пайщик получает оповещение, и обратное движение средств по кошелькам.

Для того, чтобы принять решение по любому вопросу необходимо выполнить условие достижения простого большинства голосов всех членов совета, и после чего, утвердить решение электронной подписью председателя совета.

flowchart TD
    A[Вопрос на повестке] --> B[Голосование членов совета]
    B --> C{Есть простое большинство?}
    C -- Нет --> D[Решение не принято]
    C -- Да --> E[Председатель утверждает]
    E --> F[Решение утверждено]
    F --> H{Решение стандартизированное?}
    H -- Да --> I[Автоисполнение]
    H -- Нет --> J[Контроль исполнения советом]
    I --> G[Решение исполнено]
    J --> G[Решение исполнено]

Форма собрания и кворум

Форма проведения собрания - заочная, на основе технологических средств цифровой подписи членов совета. Все члены совета всегда считаются присутствующими на заседании. При отсутствии голосов ЗА или ПРОТИВ по пункту повестки, мы считаем, что член совета присутствовал на собрании, но ВОЗДЕРЖАЛСЯ от голосования.

Голосование по решению

Голосование по решению, как мы ранее рассматривали в разделе Прием пайщика, осуществляется с помощью модуля голосований. Он содержит в себе кнопки-индикаторы голосов, а также индикатор статуса решения.

модуль голосования

Каждый член совета может однократно проголосовать по каждому вопросу. Отозвать голос, после того, как он был отдан - невозможно. Как только количество голосов ЗА превысит 50% от общего количества членов совета, система изменит статус индикатора принятого решения.

модуль голосования

На заметку

Действие подачи голоса по вопросу фиксируется цифровой подписью члена совета, которую он оставляет на идентификаторе протокола решения. Таким образом, все голоса по всем решениям могут быть криптографически проверены.

Утверждение и исполнение решения

После того, как решение принято, председатель может утвердить его, нажатием на соответствующую кнопку напротив пункта повестки. Действие утверждения сформирует протокол собрания собрания совета и наполнит его данными в соответствии с содержанием стандартизированного или произвольного пункта повестки.

Если утверждается стандартизированное решение, то оно автоматически в этот же момент и исполняется на уровне стандартов смарт-контрактов. Произвольные решения, как было отмечено ранее, автоматически не исполняются, а только фиксируются в реестре документов.

Предложить пункт повестки

Для предложения произвольного пункта повестки на голосование совета, необходимо нажать на кнопку "ПРЕДЛОЖИТЬ". Будет показана форма для ввода вопроса на повестке и проекта решения по нему:

модуль голосования

На основании которых, будет сформирован документ предложения повестки и протокол решения совета:

модуль голосования

модуль голосования

Разработчикам

Канонические имена полей и типов — в файле components/controller/schema.gql монорепозитория; интерактивно — в документации GraphQL-API.

Повестка совета

🛠️ SDK: Queries.Agenda.GetAgenda | Query.getAgenda

Получить список вопросов совета кооператива для голосования Требуемые роли: chairman, member.

import { Queries } from '@coopenomics/sdk';

const variables: Queries.Agenda.GetAgenda.IInput = {
};

const { [Queries.Agenda.GetAgenda.name]: result } = await client.Query(
  Queries.Agenda.GetAgenda.query,
  { variables }
);

Результат:

interface IOutput {
  getAgenda: <{
      action: {
        account: <string>;
        account_ram_deltas: <{
            account: <string>;
            delta: <number>;
          }[]>;
        action_ordinal: <number>;
        authorization: <{
            actor: <string>;
            permission: <string>;
          }[]>;
        block_id: <string>;
        block_num: <number>;
        chain_id: <string>;
        console: <string>;
        context_free: <boolean>;
        creator_action_ordinal: <number>;
        data: <unknown>; // Данные действия в формате JSON
        elapsed: <number>;
        global_sequence: <string>;
        name: <string>;
        receipt: {
          abi_sequence: <number>;
          act_digest: <string>;
          auth_sequence: <{
              account: <string>;
              sequence: <string>;
            }[]>;
          code_sequence: <number>;
          global_sequence: <string>;
          receiver: <string>;
          recv_sequence: <string>;
        };
        receiver: <string>;
        transaction_id: <string>;
      };
      documents: {
        acts: <{
            action?: {
              account: <string>;
              account_ram_deltas: <{
                  account: <string>;
                  delta: <number>;
                }[]>;
              action_ordinal: <number>;
              actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
              authorization: <{
                  actor: <string>;
                  permission: <string>;
                }[]>;
              block_id: <string>;
              block_num: <number>;
              chain_id: <string>;
              console: <string>;
              context_free: <boolean>;
              creator_action_ordinal: <number>;
              data: <unknown>; // Данные действия в формате JSON
              elapsed: <number>;
              global_sequence: <string>;
              name: <string>;
              receipt: {
                abi_sequence: <number>;
                act_digest: <string>;
                auth_sequence: <{
                    account: <string>;
                    sequence: <string>;
                  }[]>;
                code_sequence: <number>;
                global_sequence: <string>;
                receiver: <string>;
                recv_sequence: <string>;
              };
              receiver: <string>;
              transaction_id: <string>;
            };
            documentAggregate?: {
              document: {
                doc_hash: <string>;
                hash: <string>;
                meta: <unknown>;
                meta_hash: <string>;
                signatures: <{
                    id: <number>;
                    is_valid?: <... | ... | ... | ...>;
                    meta: <unknown>;
                    public_key: <string>;
                    signature: <string>;
                    signed_at: <string>;
                    signed_hash: <string>;
                    signer: <string>;
                    signer_certificate?: <... | ...>; // Сертификат подписанта (сокращенная информация)
                  }[]>;
                version: <string>;
              };
              hash: <string>;
              rawDocument?: {
                binary: <string>; // Бинарное содержимое документа (base64)
                full_title: <string>; // Полное название документа
                hash: <string>; // Хэш документа
                html: <string>; // HTML содержимое документа
                meta: <unknown>; // Метаданные документа
              };
            };
          }[]>; // Массив объект(ов) актов с агрегатами, относящихся к заявлению
        decision?: {
          action: {
            account: <string>;
            account_ram_deltas: <{
                account: <string>;
                delta: <number>;
              }[]>;
            action_ordinal: <number>;
            actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
            authorization: <{
                actor: <string>;
                permission: <string>;
              }[]>;
            block_id: <string>;
            block_num: <number>;
            chain_id: <string>;
            console: <string>;
            context_free: <boolean>;
            creator_action_ordinal: <number>;
            data: <unknown>; // Данные действия в формате JSON
            elapsed: <number>;
            global_sequence: <string>;
            name: <string>;
            receipt: {
              abi_sequence: <number>;
              act_digest: <string>;
              auth_sequence: <{
                  account: <string>;
                  sequence: <string>;
                }[]>;
              code_sequence: <number>;
              global_sequence: <string>;
              receiver: <string>;
              recv_sequence: <string>;
            };
            receiver: <string>;
            transaction_id: <string>;
          };
          documentAggregate: {
            document: {
              doc_hash: <string>;
              hash: <string>;
              meta: <unknown>;
              meta_hash: <string>;
              signatures: <{
                  id: <number>;
                  is_valid?: <null | boolean>;
                  meta: <unknown>;
                  public_key: <string>;
                  signature: <string>;
                  signed_at: <string>;
                  signed_hash: <string>;
                  signer: <string>;
                  signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
                }[]>;
              version: <string>;
            };
            hash: <string>;
            rawDocument?: {
              binary: <string>; // Бинарное содержимое документа (base64)
              full_title: <string>; // Полное название документа
              hash: <string>; // Хэш документа
              html: <string>; // HTML содержимое документа
              meta: <unknown>; // Метаданные документа
            };
          };
          votes_against: <{
              account: <string>;
              account_ram_deltas: <{
                  account: <string>;
                  delta: <number>;
                }[]>;
              action_ordinal: <number>;
              actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
              authorization: <{
                  actor: <string>;
                  permission: <string>;
                }[]>;
              block_id: <string>;
              block_num: <number>;
              chain_id: <string>;
              console: <string>;
              context_free: <boolean>;
              creator_action_ordinal: <number>;
              data: <unknown>; // Данные действия в формате JSON
              elapsed: <number>;
              global_sequence: <string>;
              name: <string>;
              receipt: {
                abi_sequence: <number>;
                act_digest: <string>;
                auth_sequence: <{
                    account: <string>;
                    sequence: <string>;
                  }[]>;
                code_sequence: <number>;
                global_sequence: <string>;
                receiver: <string>;
                recv_sequence: <string>;
              };
              receiver: <string>;
              transaction_id: <string>;
            }[]>;
          votes_for: <{
              account: <string>;
              account_ram_deltas: <{
                  account: <string>;
                  delta: <number>;
                }[]>;
              action_ordinal: <number>;
              actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
              authorization: <{
                  actor: <string>;
                  permission: <string>;
                }[]>;
              block_id: <string>;
              block_num: <number>;
              chain_id: <string>;
              console: <string>;
              context_free: <boolean>;
              creator_action_ordinal: <number>;
              data: <unknown>; // Данные действия в формате JSON
              elapsed: <number>;
              global_sequence: <string>;
              name: <string>;
              receipt: {
                abi_sequence: <number>;
                act_digest: <string>;
                auth_sequence: <{
                    account: <string>;
                    sequence: <string>;
                  }[]>;
                code_sequence: <number>;
                global_sequence: <string>;
                receiver: <string>;
                recv_sequence: <string>;
              };
              receiver: <string>;
              transaction_id: <string>;
            }[]>;
        };
        links: <{
            document: {
              doc_hash: <string>;
              hash: <string>;
              meta: <unknown>;
              meta_hash: <string>;
              signatures: <{
                  id: <number>;
                  is_valid?: <null | boolean>;
                  meta: <unknown>;
                  public_key: <string>;
                  signature: <string>;
                  signed_at: <string>;
                  signed_hash: <string>;
                  signer: <string>;
                  signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
                }[]>;
              version: <string>;
            };
            hash: <string>;
            rawDocument?: {
              binary: <string>; // Бинарное содержимое документа (base64)
              full_title: <string>; // Полное название документа
              hash: <string>; // Хэш документа
              html: <string>; // HTML содержимое документа
              meta: <unknown>; // Метаданные документа
            };
          }[]>; // Массив связанных документов с агрегатами, извлечённых из мета-данных
        statement?: {
          action: {
            account: <string>;
            account_ram_deltas: <{
                account: <string>;
                delta: <number>;
              }[]>;
            action_ordinal: <number>;
            actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
            authorization: <{
                actor: <string>;
                permission: <string>;
              }[]>;
            block_id: <string>;
            block_num: <number>;
            chain_id: <string>;
            console: <string>;
            context_free: <boolean>;
            creator_action_ordinal: <number>;
            data: <unknown>; // Данные действия в формате JSON
            elapsed: <number>;
            global_sequence: <string>;
            name: <string>;
            receipt: {
              abi_sequence: <number>;
              act_digest: <string>;
              auth_sequence: <{
                  account: <string>;
                  sequence: <string>;
                }[]>;
              code_sequence: <number>;
              global_sequence: <string>;
              receiver: <string>;
              recv_sequence: <string>;
            };
            receiver: <string>;
            transaction_id: <string>;
          };
          documentAggregate: {
            document: {
              doc_hash: <string>;
              hash: <string>;
              meta: <unknown>;
              meta_hash: <string>;
              signatures: <{
                  id: <number>;
                  is_valid?: <null | boolean>;
                  meta: <unknown>;
                  public_key: <string>;
                  signature: <string>;
                  signed_at: <string>;
                  signed_hash: <string>;
                  signer: <string>;
                  signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
                }[]>;
              version: <string>;
            };
            hash: <string>;
            rawDocument?: {
              binary: <string>; // Бинарное содержимое документа (base64)
              full_title: <string>; // Полное название документа
              hash: <string>; // Хэш документа
              html: <string>; // HTML содержимое документа
              meta: <unknown>; // Метаданные документа
            };
          };
        };
      };
      table: {
        approved: <boolean>;
        authorization: {
          doc_hash: <string>; // Хэш содержимого документа
          hash: <string>; // Общий хэш (doc_hash + meta_hash)
          meta: <string>; // Метаинформация документа (в формате JSON-строки)
          meta_hash: <string>; // Хэш мета-данных
          signatures: <{
              id: <number>;
              is_valid?: <null | boolean>;
              meta: <unknown>;
              public_key: <string>;
              signature: <string>;
              signed_at: <string>;
              signed_hash: <string>;
              signer: <string>;
              signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
            }[]>; // Вектор подписей
          version: <string>; // Версия стандарта документа
        };
        authorized: <boolean>;
        authorized_by: <string>;
        batch_id: <number>;
        callback_contract?: <null | string>;
        confirm_callback?: <null | string>;
        coopname: <string>;
        created_at: <string>;
        decline_callback?: <null | string>;
        expired_at: <string>;
        hash?: <null | string>;
        id: <number>;
        meta: <string>;
        statement: {
          doc_hash: <string>; // Хэш содержимого документа
          hash: <string>; // Общий хэш (doc_hash + meta_hash)
          meta: <string>; // Метаинформация документа (в формате JSON-строки)
          meta_hash: <string>; // Хэш мета-данных
          signatures: <{
              id: <number>;
              is_valid?: <null | boolean>;
              meta: <unknown>;
              public_key: <string>;
              signature: <string>;
              signed_at: <string>;
              signed_hash: <string>;
              signer: <string>;
              signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
            }[]>; // Вектор подписей
          version: <string>; // Версия стандарта документа
        };
        type: <string>;
        username: <string>;
        username_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя, создавшего решение
        validated: <boolean>;
        votes_against: <string[]>;
        votes_against_certificates: <unknown[]>; // Сертификаты пользователей, голосовавших "против"
        votes_for: <string[]>;
        votes_for_certificates: <unknown[]>; // Сертификаты пользователей, голосовавших "за"
      };
    }[]>; // Получить список вопросов совета кооператива для голосования

Требуемые роли: chairman, member.
}

Документы (контекст вопросов)

🛠️ SDK: Queries.Documents.GetDocuments | Query.getDocuments

import { Queries } from '@coopenomics/sdk';

const variables: Queries.Documents.GetDocuments.IInput = {
  data: {
    actions?: <null | DocumentAction[]>;
    after_block?: <null | number>;
    before_block?: <null | number>;
    filter: <any>;
    limit?: <null | number>;
    page?: <null | number>;
    type?: <null | string>;
    username: <string>;
  };
};

const { [Queries.Documents.GetDocuments.name]: result } = await client.Query(
  Queries.Documents.GetDocuments.query,
  { variables }
);

Результат:

interface IOutput {
  getDocuments: {
    currentPage: <number>; // Текущая страница
    items: <{
        acts: <{
            action?: {
              account: <string>;
              account_ram_deltas: <{
                  account: <string>;
                  delta: <number>;
                }[]>;
              action_ordinal: <number>;
              actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
              authorization: <{
                  actor: <string>;
                  permission: <string>;
                }[]>;
              block_id: <string>;
              block_num: <number>;
              chain_id: <string>;
              console: <string>;
              context_free: <boolean>;
              creator_action_ordinal: <number>;
              data: <unknown>; // Данные действия в формате JSON
              elapsed: <number>;
              global_sequence: <string>;
              name: <string>;
              receipt: {
                abi_sequence: <number>;
                act_digest: <string>;
                auth_sequence: <{
                    account: <string>;
                    sequence: <string>;
                  }[]>;
                code_sequence: <number>;
                global_sequence: <string>;
                receiver: <string>;
                recv_sequence: <string>;
              };
              receiver: <string>;
              transaction_id: <string>;
            };
            documentAggregate?: {
              document: {
                doc_hash: <string>;
                hash: <string>;
                meta: <unknown>;
                meta_hash: <string>;
                signatures: <{
                    id: <number>;
                    is_valid?: <... | ... | ... | ...>;
                    meta: <unknown>;
                    public_key: <string>;
                    signature: <string>;
                    signed_at: <string>;
                    signed_hash: <string>;
                    signer: <string>;
                    signer_certificate?: <... | ...>; // Сертификат подписанта (сокращенная информация)
                  }[]>;
                version: <string>;
              };
              hash: <string>;
              rawDocument?: {
                binary: <string>; // Бинарное содержимое документа (base64)
                full_title: <string>; // Полное название документа
                hash: <string>; // Хэш документа
                html: <string>; // HTML содержимое документа
                meta: <unknown>; // Метаданные документа
              };
            };
          }[]>; // Массив объект(ов) актов с агрегатами, относящихся к заявлению
        decision?: {
          action: {
            account: <string>;
            account_ram_deltas: <{
                account: <string>;
                delta: <number>;
              }[]>;
            action_ordinal: <number>;
            actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
            authorization: <{
                actor: <string>;
                permission: <string>;
              }[]>;
            block_id: <string>;
            block_num: <number>;
            chain_id: <string>;
            console: <string>;
            context_free: <boolean>;
            creator_action_ordinal: <number>;
            data: <unknown>; // Данные действия в формате JSON
            elapsed: <number>;
            global_sequence: <string>;
            name: <string>;
            receipt: {
              abi_sequence: <number>;
              act_digest: <string>;
              auth_sequence: <{
                  account: <string>;
                  sequence: <string>;
                }[]>;
              code_sequence: <number>;
              global_sequence: <string>;
              receiver: <string>;
              recv_sequence: <string>;
            };
            receiver: <string>;
            transaction_id: <string>;
          };
          documentAggregate: {
            document: {
              doc_hash: <string>;
              hash: <string>;
              meta: <unknown>;
              meta_hash: <string>;
              signatures: <{
                  id: <number>;
                  is_valid?: <null | boolean>;
                  meta: <unknown>;
                  public_key: <string>;
                  signature: <string>;
                  signed_at: <string>;
                  signed_hash: <string>;
                  signer: <string>;
                  signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
                }[]>;
              version: <string>;
            };
            hash: <string>;
            rawDocument?: {
              binary: <string>; // Бинарное содержимое документа (base64)
              full_title: <string>; // Полное название документа
              hash: <string>; // Хэш документа
              html: <string>; // HTML содержимое документа
              meta: <unknown>; // Метаданные документа
            };
          };
          votes_against: <{
              account: <string>;
              account_ram_deltas: <{
                  account: <string>;
                  delta: <number>;
                }[]>;
              action_ordinal: <number>;
              actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
              authorization: <{
                  actor: <string>;
                  permission: <string>;
                }[]>;
              block_id: <string>;
              block_num: <number>;
              chain_id: <string>;
              console: <string>;
              context_free: <boolean>;
              creator_action_ordinal: <number>;
              data: <unknown>; // Данные действия в формате JSON
              elapsed: <number>;
              global_sequence: <string>;
              name: <string>;
              receipt: {
                abi_sequence: <number>;
                act_digest: <string>;
                auth_sequence: <{
                    account: <string>;
                    sequence: <string>;
                  }[]>;
                code_sequence: <number>;
                global_sequence: <string>;
                receiver: <string>;
                recv_sequence: <string>;
              };
              receiver: <string>;
              transaction_id: <string>;
            }[]>;
          votes_for: <{
              account: <string>;
              account_ram_deltas: <{
                  account: <string>;
                  delta: <number>;
                }[]>;
              action_ordinal: <number>;
              actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
              authorization: <{
                  actor: <string>;
                  permission: <string>;
                }[]>;
              block_id: <string>;
              block_num: <number>;
              chain_id: <string>;
              console: <string>;
              context_free: <boolean>;
              creator_action_ordinal: <number>;
              data: <unknown>; // Данные действия в формате JSON
              elapsed: <number>;
              global_sequence: <string>;
              name: <string>;
              receipt: {
                abi_sequence: <number>;
                act_digest: <string>;
                auth_sequence: <{
                    account: <string>;
                    sequence: <string>;
                  }[]>;
                code_sequence: <number>;
                global_sequence: <string>;
                receiver: <string>;
                recv_sequence: <string>;
              };
              receiver: <string>;
              transaction_id: <string>;
            }[]>;
        };
        links: <{
            document: {
              doc_hash: <string>;
              hash: <string>;
              meta: <unknown>;
              meta_hash: <string>;
              signatures: <{
                  id: <number>;
                  is_valid?: <null | boolean>;
                  meta: <unknown>;
                  public_key: <string>;
                  signature: <string>;
                  signed_at: <string>;
                  signed_hash: <string>;
                  signer: <string>;
                  signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
                }[]>;
              version: <string>;
            };
            hash: <string>;
            rawDocument?: {
              binary: <string>; // Бинарное содержимое документа (base64)
              full_title: <string>; // Полное название документа
              hash: <string>; // Хэш документа
              html: <string>; // HTML содержимое документа
              meta: <unknown>; // Метаданные документа
            };
          }[]>; // Массив связанных документов с агрегатами, извлечённых из мета-данных
        statement?: {
          action: {
            account: <string>;
            account_ram_deltas: <{
                account: <string>;
                delta: <number>;
              }[]>;
            action_ordinal: <number>;
            actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
            authorization: <{
                actor: <string>;
                permission: <string>;
              }[]>;
            block_id: <string>;
            block_num: <number>;
            chain_id: <string>;
            console: <string>;
            context_free: <boolean>;
            creator_action_ordinal: <number>;
            data: <unknown>; // Данные действия в формате JSON
            elapsed: <number>;
            global_sequence: <string>;
            name: <string>;
            receipt: {
              abi_sequence: <number>;
              act_digest: <string>;
              auth_sequence: <{
                  account: <string>;
                  sequence: <string>;
                }[]>;
              code_sequence: <number>;
              global_sequence: <string>;
              receiver: <string>;
              recv_sequence: <string>;
            };
            receiver: <string>;
            transaction_id: <string>;
          };
          documentAggregate: {
            document: {
              doc_hash: <string>;
              hash: <string>;
              meta: <unknown>;
              meta_hash: <string>;
              signatures: <{
                  id: <number>;
                  is_valid?: <null | boolean>;
                  meta: <unknown>;
                  public_key: <string>;
                  signature: <string>;
                  signed_at: <string>;
                  signed_hash: <string>;
                  signer: <string>;
                  signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
                }[]>;
              version: <string>;
            };
            hash: <string>;
            rawDocument?: {
              binary: <string>; // Бинарное содержимое документа (base64)
              full_title: <string>; // Полное название документа
              hash: <string>; // Хэш документа
              html: <string>; // HTML содержимое документа
              meta: <unknown>; // Метаданные документа
            };
          };
        };
      }[]>; // Элементы текущей страницы
    totalCount: <number>; // Общее количество элементов
    totalPages: <number>; // Общее количество страниц
  };
}

Свободное решение: создать проект

🛠️ SDK: Mutations.FreeDecisions.CreateProjectOfFreeDecision | Mutation.createProjectOfFreeDecision

Создать повестку дня и проект решения, и сохранить в хранилище для дальнейшей генерации документа и его публикации Требуемые роли: chairman, member.

import { Mutations } from '@coopenomics/sdk';

const variables: Mutations.FreeDecisions.CreateProjectOfFreeDecision.IInput = {
  data: {
    decision: <string>; // Проект решения, которое предлагается принять
    question: <string>; // Вопрос, который выносится на повестку
    title?: <null | string>; // Пользовательский заголовок документа
  };
};

const { [Mutations.FreeDecisions.CreateProjectOfFreeDecision.name]: result } = await client.Mutation(
  Mutations.FreeDecisions.CreateProjectOfFreeDecision.mutation,
  { variables }
);

Результат:

interface IOutput {
  createProjectOfFreeDecision: {
    decision: <string>; // Проект решения, которое предлагается принять
    id: <string>; // Идентификатор проекта свободного решения
    question: <string>; // Вопрос, который выносится на повестку
    title?: <null | string>; // Пользовательский заголовок документа
  };
}

Свободное решение: сгенерировать документ

🛠️ SDK: Mutations.FreeDecisions.GenerateFreeDecision | Mutation.generateFreeDecision

Сгенерировать протокол решения по предложенной повестке Требуемые роли: chairman, member.

import { Mutations } from '@coopenomics/sdk';

const variables: Mutations.FreeDecisions.GenerateFreeDecision.IInput = {
  data: {
    block_num?: <null | number>; // Номер блока, на котором был создан документ
    coopname: <string>; // Название кооператива, связанное с документом
    created_at?: <null | string>; // Дата и время создания документа
    decision_id: <number>; // Идентификатор протокола решения собрания совета
    generator?: <null | string>; // Имя генератора, использованного для создания документа
    lang?: <null | string>; // Язык документа
    links?: <null | string[]>; // Ссылки, связанные с документом
    project_id: <string>; // Идентификатор проекта решения
    timezone?: <null | string>; // Часовой пояс, в котором был создан документ
    title?: <null | string>; // Название документа
    username: <string>; // Имя пользователя, создавшего документ
    version?: <null | string>; // Версия генератора, использованного для создания документа
  };
  options?: {
    lang?: <null | string>; // Язык документа
    skip_save?: <null | boolean>; // Пропустить сохранение
  };
};

const { [Mutations.FreeDecisions.GenerateFreeDecision.name]: result } = await client.Mutation(
  Mutations.FreeDecisions.GenerateFreeDecision.mutation,
  { variables }
);

Результат:

interface IOutput {
  generateFreeDecision: {
    binary: <string>; // Бинарное содержимое документа (base64)
    full_title: <string>; // Полное название документа
    hash: <string>; // Хэш документа
    html: <string>; // HTML содержимое документа
    meta: <unknown>; // Метаданные документа
  };
}

Свободное решение: сгенерировать проект

🛠️ SDK: Mutations.FreeDecisions.GenerateProjectOfFreeDecision | Mutation.generateProjectOfFreeDecision

Сгенерировать документ проекта свободного решения Требуемые роли: chairman, member.

import { Mutations } from '@coopenomics/sdk';

const variables: Mutations.FreeDecisions.GenerateProjectOfFreeDecision.IInput = {
  data: {
    block_num?: <null | number>; // Номер блока, на котором был создан документ
    coopname: <string>; // Название кооператива, связанное с документом
    created_at?: <null | string>; // Дата и время создания документа
    generator?: <null | string>; // Имя генератора, использованного для создания документа
    lang?: <null | string>; // Язык документа
    links?: <null | string[]>; // Ссылки, связанные с документом
    project_id: <string>; // Идентификатор проекта решения
    timezone?: <null | string>; // Часовой пояс, в котором был создан документ
    title?: <null | string>; // Название документа
    username: <string>; // Имя пользователя, создавшего документ
    version?: <null | string>; // Версия генератора, использованного для создания документа
  };
  options?: {
    lang?: <null | string>; // Язык документа
    skip_save?: <null | boolean>; // Пропустить сохранение
  };
};

const { [Mutations.FreeDecisions.GenerateProjectOfFreeDecision.name]: result } = await client.Mutation(
  Mutations.FreeDecisions.GenerateProjectOfFreeDecision.mutation,
  { variables }
);

Результат:

interface IOutput {
  generateProjectOfFreeDecision: {
    binary: <string>; // Бинарное содержимое документа (base64)
    full_title: <string>; // Полное название документа
    hash: <string>; // Хэш документа
    html: <string>; // HTML содержимое документа
    meta: <unknown>; // Метаданные документа
  };
}

Свободное решение: опубликовать проект

🛠️ SDK: Mutations.FreeDecisions.PublishProjectOfFreeDecision | Mutation.publishProjectOfFreeDecision

Опубликовать предложенную повестку и проект решения для дальнейшего голосования совета по нему Требуемые роли: chairman, member.

import { Mutations } from '@coopenomics/sdk';

const variables: Mutations.FreeDecisions.PublishProjectOfFreeDecision.IInput = {
  data: {
    coopname: <string>; // Имя аккаунта кооператива
    document: {
      doc_hash: <string>; // Хэш содержимого документа
      hash: <string>; // Общий хэш (doc_hash + meta_hash)
      meta: {
        block_num: <number>; // Номер блока, на котором был создан документ
        coopname: <string>; // Название кооператива, связанное с документом
        created_at: <string>; // Дата и время создания документа
        generator: <string>; // Имя генератора, использованного для создания документа
        lang: <string>; // Язык документа
        links: <string[]>; // Ссылки, связанные с документом
        project_id: <string>; // Идентификатор проекта решения
        registry_id: <number>; // ID документа в реестре
        timezone: <string>; // Часовой пояс, в котором был создан документ
        title: <string>; // Название документа
        username: <string>; // Имя пользователя, создавшего документ
        version: <string>; // Версия генератора, использованного для создания документа
      };
      meta_hash: <string>; // Хэш мета-данных
      signatures: <{
          id: <number>; // Идентификатор номера подписи
          meta: <string>; // Мета-данные подписи
          public_key: <string>; // Публичный ключ
          signature: <string>; // Подпись хэша
          signed_at: <string>; // Время подписания
          signed_hash: <string>; // Подписанный хэш
          signer: <string>; // Аккаунт подписавшего
        }[]>; // Вектор подписей
      version: <string>; // Версия стандарта документа
    };
    meta: <string>; // Строка мета-информации
    username: <string>; // Имя аккаунта пользователя
  };
};

const { [Mutations.FreeDecisions.PublishProjectOfFreeDecision.name]: result } = await client.Mutation(
  Mutations.FreeDecisions.PublishProjectOfFreeDecision.mutation,
  { variables }
);

Результат:

interface IOutput {
  publishProjectOfFreeDecision: <boolean>; // Опубликовать предложенную повестку и проект решения для дальнейшего голосования совета по нему

Требуемые роли: chairman, member.
}

Часть шагов (голос по решению совета, исполнение ряда решений) выполняется подписью и отправкой транзакции в блокчейн через Client.Blockchain / класс Blockchain в пакете @coopenomics/sdk, а не отдельной мутацией GraphQL; см. 🛠️ Classes.Blockchain и 🛠️ Classes.Client.