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

Вступить в пайщики

Для вступления в пайщики кооператива необходимо пройти процедуру регистрации. Для этого необходимо нажать на кнопку "Регистрация":

кнопка регистрации

После нажатия откроется интерфейс вступления в пайщики, который первым делом предложит ввести электронную почту:

ввод е-почты

Введите электронную почту. Она будет использоваться для системных оповещений, входа, а при необходимости, и восстановления доступа. После ввода и нажатия на кнопку "Продолжить", вам будет предложено определить, в качестве кого вы вступаете в пайщики?

выбор типа лица

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

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

ввод данных

На следующем шаге система запросит ввод данных физического лица. Введите запрашиваемые данные. Ознакомьтесь с политикой конфиденциальности, и отметьте галочкой её прочтение. После ввода всех данных и отметки о прочтении политики конфиденциальности, система сделает кнопку "Продолжить" доступной.

получение ключа

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

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

ознакомление с заявлением

На следующем шаге система на основе предоставленных данных заполнит заявление на вступление в кооператив и предложит ознакомиться с ним. Под заявлением находится четыре галочки, которые необходимо отметить, как свидетельство того, что вы ознакомились со всеми документами: положение о порядке и правилах использования простой электронной подписи, положение о целевой потребительской программе "Цифровой Кошелек", пользователькое соглашение и Устав кооператива.

К сведению

Все заявления на вступление являются типовыми для всех кооперативов платформы. В них изменяются только переменные, такие как дата заполнения, реквизиты пайщика и кооператива, и суммы взносов. Все документы (кроме Устава), которые предлагаются к ознакомлению, также создаются из шаблонов и являются стандатизированными для всех кооперативов платформы "Кооперативная Экономика" согласно стандартам.

подпись заявления

На следующем шаге система предложит "собственноручно" подписать заявление пальцем или мышкой по экрану/тачпаду. Полученный графический оттиск подписи будет наложен на прочитанное ранее заявление и дополнительно подписан вашей электронной подписью, связав их в единый юридический акт свободного волеизъявления. В этот момент, ваша собственноручная подпись буквально сливается с цифровой, наделяя ее полномочиями подписывать документы на платформе.

подпись заявления

После успешной подписи заявления на вступление, система предложит совершить минимальный паевой и вступительные взносы одним платежом. Здесь способ приёма платежа может отличаться от кооператива к кооперативу, т.к. он зависит от выбранного платежного провайдера. Мы рассмотрим только случай банковского платежа по реквизитам с использованием QR-кода, т.к. он стандартен и доступен всем подключенным кооперативам системы.

подпись заявления

На этом шаге для продолжения необходимо произвести оплату по указанным реквизитам из вашего банковского приложения. У любого банковского приложения на сегодня есть функция сканирования QR-кода. При сканировании предлагаемого QR-кода и выбора способа оплаты "По реквизитам", банковская система автоматически предзаполнит данные к оплате. Останется только проверить сумму и нажать кнопку "Оплатить".

О сроке зачисления

Банковский платеж, по стандартным условиям обслуживания, идет до 3х рабочих дней. Однако, как сегодня показывает практика, платеж зачисляется в течении нескольких часов. Скорость банковского перевода зависит от банка кооператива-получателя и вашего банка-отправителя.

Следует отметить, что если у вас одно устройство, и отсканировать QR-код невозможно, то вы можете скачать QR-код и загрузить его в банковское приложение. Большинство из них предоставляют такую функцию. Если же такой функции в вашем банке нет, то вы всегда можете нажать на кнопку "Скопировать Реквизиты" для получения их в структурированном виде в буфер обмена. Используйте это для самостоятельного заполнения формы банковского платежа в вашем мобильном банке, или в конечном счете, бумажной квитанции в отделении.

Об альтернативных методах платежа

У некоторых кооперативов форма оплаты банковским платежом по QR-кода может быть заменена на моментальную оплату через сервис Yookassa или аналоги. Данные сервисы взымают дополнительную комиссию, которая ложится на вас, как вступающего пайщика. Кроме того, эти сервисы требуют договора с кооперативом, прохождения проверок их служб безопасности и т.д.. Потому, по-умолчанию, все платежи производятся прямыми банковскими переводами по QR-коду у всех кооперативов. Наличие альтернативных методов платежа - зависит от кооператива.

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

ожидание решения совета

Согласно нормам стандартов кооперативной экономики кооператив может рассматривать заявление на вступление в течение 30 дней. Однако, обычно все происходит быстрее, в среднем, за 24 часа (в это время члены совета должны ознакомиться с вашим заявлением, проголосовать по нему, сформировать протокол решения и утвердить его). Как только протокол решения совета будет сформирован и утвержден - вы получите оповещение об этом на электронную почту и доступ в личный кабинет.

ожидание решения совета

На этом процесс вступления в кооператив для пайщика завершается. Перейдем к рассмотрению того же самого процесса со стороны взгляда члена совета.

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

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

Конфигурация регистрации

🛠️ SDK: Queries.System.GetRegistrationConfig | Query.getRegistrationConfig

Получить конфигурацию программ регистрации для кооператива

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

const variables: Queries.System.GetRegistrationConfig.IInput = {
  account_type: <AccountType>;
  coopname: <string>;
};

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

Результат:

interface IOutput {
  getRegistrationConfig: {
    programs: <{
        applicable_account_types: <AccountType[]>; // Для каких типов аккаунтов доступна программа
        description: <string>; // Описание программы
        image_url?: <null | string>; // URL изображения (опционально)
        key: <string>; // Уникальный ключ программы
        order: <number>; // Порядок отображения
        requirements?: <null | string>; // Минимальные требования для участия
        title: <string>; // Название программы для отображения
      }[]>; // Доступные программы
    requires_selection: <boolean>; // Нужен ли выбор программы
  };
}

Зарегистрировать аккаунт

🛠️ SDK: Mutations.Accounts.RegisterAccount | Mutation.registerAccount

Зарегистрировать аккаунт пользователя в системе

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

const variables: Mutations.Accounts.RegisterAccount.IInput = {
  data: {
    email: <string>; // Электронная почта
    entrepreneur_data?: <null | {
        bank_account: {
          account_number: <string>; // Номер банковского счета
          bank_name: <string>; // Название банка
          card_number?: <null | string>; // Номер карты
          currency: <string>; // Валюта счета
          details: {
            bik: <string>; // БИК банка
            corr: <string>; // Корреспондентский счет
            kpp: <string>; // КПП банка
          };
        };
        birthdate: <string>; // Дата рождения
        city: <string>; // Город
        country: <Russia>; // Страна
        details: {
          inn: <string>; // ИНН
          ogrn: <string>; // ОГРН
        };
        first_name: <string>; // Имя
        full_address: <string>; // Полный адрес
        last_name: <string>; // Фамилия
        middle_name: <string>; // Отчество
        phone: <string>; // Телефон
      }>; // Данные индивидуального предпринимателя
    individual_data?: <null | {
        birthdate: <string>; // Дата рождения
        first_name: <string>; // Имя
        full_address: <string>; // Полный адрес
        last_name: <string>; // Фамилия
        middle_name: <string>; // Отчество
        passport?: <null | {
            code: <string>;
            issued_at: <string>;
            issued_by: <string>;
            number: <number>;
            series: <number>;
          }>; // Данные паспорта
        phone: <string>; // Телефон
      }>; // Данные физического лица
    organization_data?: <null | {
        bank_account: {
          account_number: <string>; // Номер банковского счета
          bank_name: <string>; // Название банка
          card_number?: <null | string>; // Номер карты
          currency: <string>; // Валюта счета
          details: {
            bik: <string>; // БИК банка
            corr: <string>; // Корреспондентский счет
            kpp: <string>; // КПП банка
          };
        };
        city: <string>; // Город
        country: <string>; // Страна
        details: {
          inn: <string>;
          kpp: <string>;
          ogrn: <string>;
        };
        fact_address: <string>; // Фактический адрес
        full_address: <string>; // Полный адрес
        full_name: <string>; // Полное наименование организации
        phone: <string>; // Телефон
        represented_by: {
          based_on: <string>;
          first_name: <string>;
          last_name: <string>;
          middle_name: <string>;
          position: <string>;
        };
        short_name: <string>; // Краткое наименование организации
        type: <OrganizationType>; // Тип организации
      }>; // Данные организации
    public_key: <string>; // Публичный ключ
    referer?: <null | string>; // Имя аккаунта реферера
    type: <AccountType>; // Тип аккаунта
    username: <string>; // Имя пользователя
  };
};

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

Результат:

interface IOutput {
  registerAccount: {
    account: {
      blockchain_account?: {
        account_name: <string>; // Имя аккаунта
        core_liquid_balance?: <null | string>; // Баланс
        cpu_limit: {
          available: <string>; // Доступные ресурсы
          current_used?: <null | string>; // Текущее использование ресурсов
          last_usage_update_time?: <null | string>; // Время последнего обновления использования ресурсов
          max: <string>; // Максимальное количество ресурсов
          used: <string>; // Использовано ресурсов
        };
        cpu_weight: <string>; // Вес CPU
        created: <string>; // Дата создания
        head_block_num: <number>; // Номер последнего блока
        head_block_time: <string>; // Время последнего блока
        last_code_update: <string>; // Время последнего обновления кода
        net_limit: {
          available: <string>; // Доступные ресурсы
          current_used?: <null | string>; // Текущее использование ресурсов
          last_usage_update_time?: <null | string>; // Время последнего обновления использования ресурсов
          max: <string>; // Максимальное количество ресурсов
          used: <string>; // Использовано ресурсов
        };
        net_weight: <string>; // Вес сети
        permissions: <{
            parent: <string>; // Родительское разрешение
            perm_name: <string>; // Имя разрешения
            required_auth: {
              accounts: <{
                  permission: {
                    actor: <string>; // Актор
                    permission: <string>; // Разрешение
                  };
                  weight: <number>; // Вес
                }[]>; // Уровни разрешений
              keys: <{
                  key: <string>; // Ключ
                  weight: <number>; // Вес
                }[]>; // Ключи
              threshold: <number>; // Порог
              waits: <{
                  wait_sec: <number>; // Время ожидания в секундах
                  weight: <number>; // Вес
                }[]>; // Вес ожидания
            };
          }[]>; // Разрешения
        privileged: <boolean>; // Флаг привилегий
        ram_quota: <number>; // Квота RAM
        ram_usage: <number>; // Использование RAM
        refund_request?: {
          cpu_amount: <string>; // Сумма CPU
          net_amount: <string>; // Сумма сети
          owner: <string>; // Владелец
          request_time: <string>; // Время запроса
        };
        rex_info?: <null | string>; // Информация о REX
        self_delegated_bandwidth?: {
          cpu_weight: <string>; // Вес CPU
          from: <string>; // Отправитель
          net_weight: <string>; // Вес сети
          to: <string>; // Получатель
        };
        total_resources?: {
          cpu_weight: <string>; // Вес CPU
          net_weight: <string>; // Вес сети
          owner: <string>; // Владелец
          ram_bytes: <number>; // Используемая RAM
        };
        voter_info?: <null | string>; // Информация о голосовании
      };
      participant_account?: {
        braname?: <null | string>; // Имя кооперативного участка
        created_at: <unknown>; // Время создания записи о члене
        has_vote: <boolean>; // LEGACY Флаг, имеет ли член право голоса
        initial_amount?: <null | string>; // Сумма вступительного взноса
        is_initial: <boolean>; // LEGACY Флаг, внесен ли регистрационный взнос
        is_minimum: <boolean>; // LEGACY Флаг, внесен ли минимальный паевый взнос
        last_min_pay: <unknown>; // Время последнего минимального платежа
        last_update: <unknown>; // Время последнего обновления информации о члене
        minimum_amount?: <null | string>; // Сумма минимального паевого взноса
        status: <string>; // Статус члена кооператива (accepted | blocked)
        type?: <null | string>; // Тип участника (individual | entrepreneur | organization)
        username: <string>; // Уникальное имя члена кооператива
      };
      private_account?: {
        entrepreneur_data?: {
          birthdate: <string>; // Дата рождения
          city: <string>; // Город
          country: <string>; // Страна
          details: {
            inn: <string>; // ИНН
            ogrn: <string>; // ОГРН
          };
          email: <string>; // Email
          first_name: <string>; // Имя
          full_address: <string>; // Юридический адрес
          last_name: <string>; // Фамилия
          middle_name: <string>; // Отчество
          phone: <string>; // Телефон
          username: <string>; // Имя аккаунта
        };
        individual_data?: {
          birthdate: <string>; // Дата рождения
          email: <string>; // Email
          first_name: <string>; // Имя
          full_address: <string>; // Полный адрес
          last_name: <string>; // Фамилия
          middle_name: <string>; // Отчество
          passport?: {
            code: <string>; // Код подразделения
            issued_at: <string>; // Дата выдачи
            issued_by: <string>; // Кем выдан
            number: <number>; // Номер паспорта
            series: <number>; // Серия паспорта
          };
          phone: <string>; // Телефон
          username: <string>; // Имя аккаунта
        };
        organization_data?: {
          city: <string>; // Город
          country: <string>; // Страна
          details: {
            inn: <string>; // ИНН
            kpp: <string>; // КПП
            ogrn: <string>; // ОГРН
          };
          email: <string>; // Email
          fact_address: <string>; // Фактический адрес
          full_address: <string>; // Юридический адрес
          full_name: <string>; // Полное название
          phone: <string>; // Телефон
          represented_by: {
            based_on: <string>; // На основании чего действует
            first_name: <string>; // Имя
            last_name: <string>; // Фамилия
            middle_name: <string>; // Отчество
            position: <string>; // Должность
          };
          short_name: <string>; // Краткое название
          type: <string>; // Тип организации
          username: <string>; // Имя аккаунта организации
        };
        type: <AccountType>; // Тип аккаунта
      };
      provider_account?: {
        email: <string>; // Электронная почта пользователя
        has_account: <boolean>; // Есть ли у пользователя аккаунт
        initial_order?: <null | string>; // ID начального заказа
        is_email_verified: <boolean>; // Подтверждена ли электронная почта
        is_registered: <boolean>; // Зарегистрирован ли пользователь
        message?: <null | string>; // Сообщение
        public_key: <string>; // Публичный ключ пользователя
        referer: <string>; // Реферер пользователя
        role: <string>; // Роль пользователя
        status: <UserStatus>; // Статус пользователя
        subscriber_hash: <string>; // Хэш подписчика для уведомлений
        subscriber_id: <string>; // Идентификатор подписчика для уведомлений
        type: <string>; // Тип пользователя
        username: <string>; // Имя пользователя
      };
      user_account?: {
        meta: <string>; // Метаинформация
        referer: <string>; // Реферал
        registered_at: <string>; // Дата регистрации
        registrator: <string>; // Регистратор
        status: <string>; // Статус аккаунта
        storages: <string[]>; // Список хранилищ
        type: <string>; // Тип учетной записи
        username: <string>; // Имя аккаунта
        verifications: <{
            created_at: <string>; // Дата создания верификации
            is_verified: <boolean>; // Флаг верификации
            last_update: <string>; // Дата последнего обновления верификации
            notice: <string>; // Заметка верификации
            procedure: <string>; // Процедура верификации
            verificator: <string>; // Имя верификатора
          }[]>; // Дата регистрации
      };
      username: <string>; // Имя аккаунта кооператива
    };
    tokens: {
      access: {
        expires: <unknown>; // Дата истечения токена доступа
        token: <string>; // Токен доступа
      };
      refresh: {
        expires: <unknown>; // Дата истечения токена доступа
        token: <string>; // Токен доступа
      };
    };
  };
}

Подтвердить адрес электронной почты

Mutation.verifyEmail

Отдельного экспортируемого модуля в @coopenomics/sdk для этой мутации нет.

Сгенерировать пакет документов регистрации

🛠️ SDK: Mutations.Registration.GenerateRegistrationDocuments | Mutation.generateRegistrationDocuments

Генерирует пакет документов для регистрации пайщика. Возвращает список документов с метаданными для отображения на фронтенде. Требуемые роли: chairman, member.

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

const variables: Mutations.Registration.GenerateRegistrationDocuments.IInput = {
  data: {
    account_type: <AccountType>; // Тип аккаунта пайщика
    coopname: <string>; // Имя кооператива
    program_key?: <null | string>; // Ключ выбранной программы регистрации (опционально)
    username: <string>; // Имя пользователя (аккаунт)
  };
};

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

Результат:

interface IOutput {
  generateRegistrationDocuments: {
    account_type: <AccountType>; // Тип аккаунта
    documents: <{
        agreement_type: <string>; // Тип соглашения для блокчейна
        checkbox_text: <string>; // Текст для галочки на фронтенде
        document: {
          binary: <string>; // Бинарное содержимое документа (base64)
          full_title: <string>; // Полное название документа
          hash: <string>; // Хэш документа
          html: <string>; // HTML содержимое документа
          meta: <unknown>; // Метаданные документа
        };
        id: <string>; // Идентификатор соглашения (wallet_agreement, signature_agreement и т.д.)
        is_blockchain_agreement: <boolean>; // Нужно ли отправлять в блокчейн как agreement
        link_text: <string>; // Текст ссылки для открытия диалога чтения
        link_to_statement: <boolean>; // Нужно ли линковать в заявление
        order: <number>; // Порядок отображения
        title: <string>; // Название документа
      }[]>; // Массив сгенерированных документов
    username: <string>; // Имя пользователя
  };
}

Соглашение о ЦПП «Цифровой кошелёк»

🛠️ SDK: Mutations.Agreements.GenerateWalletAgreement | Mutation.generateWalletAgreement

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

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

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

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

Результат:

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

Политика конфиденциальности

🛠️ SDK: Mutations.Agreements.GeneratePrivacyAgreement | Mutation.generatePrivacyAgreement

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

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

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

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

Результат:

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

Соглашение об электронной подписи

🛠️ SDK: Mutations.Agreements.GenerateSignatureAgreement | Mutation.generateSignatureAgreement

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

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

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

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

Результат:

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

Пользовательское соглашение

🛠️ SDK: Mutations.Agreements.GenerateUserAgreement | Mutation.generateUserAgreement

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

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

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

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

Результат:

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

Зарегистрировать пайщика

🛠️ SDK: Mutations.Participants.RegisterParticipant | Mutation.registerParticipant

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

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

const variables: Mutations.Participants.RegisterParticipant.IInput = {
  data: {
    blagorost_offer?: <null | {
        doc_hash: <string>; // Хэш содержимого документа
        hash: <string>; // Общий хэш (doc_hash + meta_hash)
        meta: <any>; // Метаинформация документа
        meta_hash: <string>; // Хэш мета-данных
        signatures: <{
            id: <number>; // Идентификатор номера подписи
            meta: <string>; // Мета-данные подписи
            public_key: <string>; // Публичный ключ
            signature: <string>; // Подпись хэша
            signed_at: <string>; // Время подписания
            signed_hash: <string>; // Подписанный хэш
            signer: <string>; // Аккаунт подписавшего
          }[]>; // Вектор подписей
        version: <string>; // Версия стандарта документа
      }>; // Подписанный документ соглашения по благороста (опционально, только если требуется)
    braname?: <null | string>; // Имя кооперативного участка
    generator_offer?: <null | {
        doc_hash: <string>; // Хэш содержимого документа
        hash: <string>; // Общий хэш (doc_hash + meta_hash)
        meta: <any>; // Метаинформация документа
        meta_hash: <string>; // Хэш мета-данных
        signatures: <{
            id: <number>; // Идентификатор номера подписи
            meta: <string>; // Мета-данные подписи
            public_key: <string>; // Публичный ключ
            signature: <string>; // Подпись хэша
            signed_at: <string>; // Время подписания
            signed_hash: <string>; // Подписанный хэш
            signer: <string>; // Аккаунт подписавшего
          }[]>; // Вектор подписей
        version: <string>; // Версия стандарта документа
      }>; // Подписанный документ оферты по программе "Генератор" (опционально, только для программы generation)
    privacy_agreement: {
      doc_hash: <string>; // Хэш содержимого документа
      hash: <string>; // Общий хэш (doc_hash + meta_hash)
      meta: <any>; // Метаинформация документа
      meta_hash: <string>; // Хэш мета-данных
      signatures: <{
          id: <number>; // Идентификатор номера подписи
          meta: <string>; // Мета-данные подписи
          public_key: <string>; // Публичный ключ
          signature: <string>; // Подпись хэша
          signed_at: <string>; // Время подписания
          signed_hash: <string>; // Подписанный хэш
          signer: <string>; // Аккаунт подписавшего
        }[]>; // Вектор подписей
      version: <string>; // Версия стандарта документа
    };
    program_key?: <null | ProgramKey>; // Ключ выбранной программы регистрации
    signature_agreement: {
      doc_hash: <string>; // Хэш содержимого документа
      hash: <string>; // Общий хэш (doc_hash + meta_hash)
      meta: <any>; // Метаинформация документа
      meta_hash: <string>; // Хэш мета-данных
      signatures: <{
          id: <number>; // Идентификатор номера подписи
          meta: <string>; // Мета-данные подписи
          public_key: <string>; // Публичный ключ
          signature: <string>; // Подпись хэша
          signed_at: <string>; // Время подписания
          signed_hash: <string>; // Подписанный хэш
          signer: <string>; // Аккаунт подписавшего
        }[]>; // Вектор подписей
      version: <string>; // Версия стандарта документа
    };
    statement: {
      doc_hash: <string>; // Хэш содержимого документа
      hash: <string>; // Общий хэш (doc_hash + meta_hash)
      meta: {
        block_num: <number>; // Номер блока, на котором был создан документ
        braname: <string>; // Имя аккаунта кооперативного участка
        coopname: <string>; // Название кооператива, связанное с документом
        created_at: <string>; // Дата и время создания документа
        generator: <string>; // Имя генератора, использованного для создания документа
        lang: <string>; // Язык документа
        links: <string[]>; // Ссылки, связанные с документом
        registry_id: <number>; // ID документа в реестре
        signature?: <null | string>; // Изображение собственноручной подписи (base-64)
        skip_save: <boolean>; // Флаг пропуска сохранения документа (используется для предварительной генерации и демонстрации пользователю)
        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>; // Версия стандарта документа
    };
    user_agreement: {
      doc_hash: <string>; // Хэш содержимого документа
      hash: <string>; // Общий хэш (doc_hash + meta_hash)
      meta: <any>; // Метаинформация документа
      meta_hash: <string>; // Хэш мета-данных
      signatures: <{
          id: <number>; // Идентификатор номера подписи
          meta: <string>; // Мета-данные подписи
          public_key: <string>; // Публичный ключ
          signature: <string>; // Подпись хэша
          signed_at: <string>; // Время подписания
          signed_hash: <string>; // Подписанный хэш
          signer: <string>; // Аккаунт подписавшего
        }[]>; // Вектор подписей
      version: <string>; // Версия стандарта документа
    };
    username: <string>; // Имя аккаунта пайщика
    wallet_agreement: {
      doc_hash: <string>; // Хэш содержимого документа
      hash: <string>; // Общий хэш (doc_hash + meta_hash)
      meta: <any>; // Метаинформация документа
      meta_hash: <string>; // Хэш мета-данных
      signatures: <{
          id: <number>; // Идентификатор номера подписи
          meta: <string>; // Мета-данные подписи
          public_key: <string>; // Публичный ключ
          signature: <string>; // Подпись хэша
          signed_at: <string>; // Время подписания
          signed_hash: <string>; // Подписанный хэш
          signer: <string>; // Аккаунт подписавшего
        }[]>; // Вектор подписей
      version: <string>; // Версия стандарта документа
    };
  };
};

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

Результат:

interface IOutput {
  registerParticipant: {
    blockchain_account?: {
      account_name: <string>; // Имя аккаунта
      core_liquid_balance?: <null | string>; // Баланс
      cpu_limit: {
        available: <string>; // Доступные ресурсы
        current_used?: <null | string>; // Текущее использование ресурсов
        last_usage_update_time?: <null | string>; // Время последнего обновления использования ресурсов
        max: <string>; // Максимальное количество ресурсов
        used: <string>; // Использовано ресурсов
      };
      cpu_weight: <string>; // Вес CPU
      created: <string>; // Дата создания
      head_block_num: <number>; // Номер последнего блока
      head_block_time: <string>; // Время последнего блока
      last_code_update: <string>; // Время последнего обновления кода
      net_limit: {
        available: <string>; // Доступные ресурсы
        current_used?: <null | string>; // Текущее использование ресурсов
        last_usage_update_time?: <null | string>; // Время последнего обновления использования ресурсов
        max: <string>; // Максимальное количество ресурсов
        used: <string>; // Использовано ресурсов
      };
      net_weight: <string>; // Вес сети
      permissions: <{
          parent: <string>; // Родительское разрешение
          perm_name: <string>; // Имя разрешения
          required_auth: {
            accounts: <{
                permission: {
                  actor: <string>; // Актор
                  permission: <string>; // Разрешение
                };
                weight: <number>; // Вес
              }[]>; // Уровни разрешений
            keys: <{
                key: <string>; // Ключ
                weight: <number>; // Вес
              }[]>; // Ключи
            threshold: <number>; // Порог
            waits: <{
                wait_sec: <number>; // Время ожидания в секундах
                weight: <number>; // Вес
              }[]>; // Вес ожидания
          };
        }[]>; // Разрешения
      privileged: <boolean>; // Флаг привилегий
      ram_quota: <number>; // Квота RAM
      ram_usage: <number>; // Использование RAM
      refund_request?: {
        cpu_amount: <string>; // Сумма CPU
        net_amount: <string>; // Сумма сети
        owner: <string>; // Владелец
        request_time: <string>; // Время запроса
      };
      rex_info?: <null | string>; // Информация о REX
      self_delegated_bandwidth?: {
        cpu_weight: <string>; // Вес CPU
        from: <string>; // Отправитель
        net_weight: <string>; // Вес сети
        to: <string>; // Получатель
      };
      total_resources?: {
        cpu_weight: <string>; // Вес CPU
        net_weight: <string>; // Вес сети
        owner: <string>; // Владелец
        ram_bytes: <number>; // Используемая RAM
      };
      voter_info?: <null | string>; // Информация о голосовании
    };
    participant_account?: {
      braname?: <null | string>; // Имя кооперативного участка
      created_at: <unknown>; // Время создания записи о члене
      has_vote: <boolean>; // LEGACY Флаг, имеет ли член право голоса
      initial_amount?: <null | string>; // Сумма вступительного взноса
      is_initial: <boolean>; // LEGACY Флаг, внесен ли регистрационный взнос
      is_minimum: <boolean>; // LEGACY Флаг, внесен ли минимальный паевый взнос
      last_min_pay: <unknown>; // Время последнего минимального платежа
      last_update: <unknown>; // Время последнего обновления информации о члене
      minimum_amount?: <null | string>; // Сумма минимального паевого взноса
      status: <string>; // Статус члена кооператива (accepted | blocked)
      type?: <null | string>; // Тип участника (individual | entrepreneur | organization)
      username: <string>; // Уникальное имя члена кооператива
    };
    private_account?: {
      entrepreneur_data?: {
        birthdate: <string>; // Дата рождения
        city: <string>; // Город
        country: <string>; // Страна
        details: {
          inn: <string>; // ИНН
          ogrn: <string>; // ОГРН
        };
        email: <string>; // Email
        first_name: <string>; // Имя
        full_address: <string>; // Юридический адрес
        last_name: <string>; // Фамилия
        middle_name: <string>; // Отчество
        phone: <string>; // Телефон
        username: <string>; // Имя аккаунта
      };
      individual_data?: {
        birthdate: <string>; // Дата рождения
        email: <string>; // Email
        first_name: <string>; // Имя
        full_address: <string>; // Полный адрес
        last_name: <string>; // Фамилия
        middle_name: <string>; // Отчество
        passport?: {
          code: <string>; // Код подразделения
          issued_at: <string>; // Дата выдачи
          issued_by: <string>; // Кем выдан
          number: <number>; // Номер паспорта
          series: <number>; // Серия паспорта
        };
        phone: <string>; // Телефон
        username: <string>; // Имя аккаунта
      };
      organization_data?: {
        city: <string>; // Город
        country: <string>; // Страна
        details: {
          inn: <string>; // ИНН
          kpp: <string>; // КПП
          ogrn: <string>; // ОГРН
        };
        email: <string>; // Email
        fact_address: <string>; // Фактический адрес
        full_address: <string>; // Юридический адрес
        full_name: <string>; // Полное название
        phone: <string>; // Телефон
        represented_by: {
          based_on: <string>; // На основании чего действует
          first_name: <string>; // Имя
          last_name: <string>; // Фамилия
          middle_name: <string>; // Отчество
          position: <string>; // Должность
        };
        short_name: <string>; // Краткое название
        type: <string>; // Тип организации
        username: <string>; // Имя аккаунта организации
      };
      type: <AccountType>; // Тип аккаунта
    };
    provider_account?: {
      email: <string>; // Электронная почта пользователя
      has_account: <boolean>; // Есть ли у пользователя аккаунт
      initial_order?: <null | string>; // ID начального заказа
      is_email_verified: <boolean>; // Подтверждена ли электронная почта
      is_registered: <boolean>; // Зарегистрирован ли пользователь
      message?: <null | string>; // Сообщение
      public_key: <string>; // Публичный ключ пользователя
      referer: <string>; // Реферер пользователя
      role: <string>; // Роль пользователя
      status: <UserStatus>; // Статус пользователя
      subscriber_hash: <string>; // Хэш подписчика для уведомлений
      subscriber_id: <string>; // Идентификатор подписчика для уведомлений
      type: <string>; // Тип пользователя
      username: <string>; // Имя пользователя
    };
    user_account?: {
      meta: <string>; // Метаинформация
      referer: <string>; // Реферал
      registered_at: <string>; // Дата регистрации
      registrator: <string>; // Регистратор
      status: <string>; // Статус аккаунта
      storages: <string[]>; // Список хранилищ
      type: <string>; // Тип учетной записи
      username: <string>; // Имя аккаунта
      verifications: <{
          created_at: <string>; // Дата создания верификации
          is_verified: <boolean>; // Флаг верификации
          last_update: <string>; // Дата последнего обновления верификации
          notice: <string>; // Заметка верификации
          procedure: <string>; // Процедура верификации
          verificator: <string>; // Имя верификатора
        }[]>; // Дата регистрации
    };
    username: <string>; // Имя аккаунта кооператива
  };
}

Сохранить ключ (WIF)

⚠️ 🛠️ SDK: Mutations.System.SetWif не найден | Mutation.setWif

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

const variables: Mutations.System.SetWif.IInput = {
  data: {
    permission: <string>; // Тип разрешения ключа
    username: <string>; // Имя пользователя, чей ключ
    wif: <string>; // Приватный ключ
  };
};

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

Результат:

interface IOutput {
  setWif: <boolean>; // Сохранить приватный ключ в зашифрованном серверном хранилище
}

Вход в систему

🛠️ SDK: Mutations.Auth.Login | Mutation.login

Войти в систему с помощью цифровой подписи и получить JWT-токены доступа

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

const variables: Mutations.Auth.Login.IInput = {
  data: {
    email: <string>; // Электронная почта
    now: <string>; // Метка времени в строковом формате ISO
    signature: <string>; // Цифровая подпись метки времени
  };
};

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

Результат:

interface IOutput {
  login: {
    account: {
      blockchain_account?: {
        account_name: <string>; // Имя аккаунта
        core_liquid_balance?: <null | string>; // Баланс
        cpu_limit: {
          available: <string>; // Доступные ресурсы
          current_used?: <null | string>; // Текущее использование ресурсов
          last_usage_update_time?: <null | string>; // Время последнего обновления использования ресурсов
          max: <string>; // Максимальное количество ресурсов
          used: <string>; // Использовано ресурсов
        };
        cpu_weight: <string>; // Вес CPU
        created: <string>; // Дата создания
        head_block_num: <number>; // Номер последнего блока
        head_block_time: <string>; // Время последнего блока
        last_code_update: <string>; // Время последнего обновления кода
        net_limit: {
          available: <string>; // Доступные ресурсы
          current_used?: <null | string>; // Текущее использование ресурсов
          last_usage_update_time?: <null | string>; // Время последнего обновления использования ресурсов
          max: <string>; // Максимальное количество ресурсов
          used: <string>; // Использовано ресурсов
        };
        net_weight: <string>; // Вес сети
        permissions: <{
            parent: <string>; // Родительское разрешение
            perm_name: <string>; // Имя разрешения
            required_auth: {
              accounts: <{
                  permission: {
                    actor: <string>; // Актор
                    permission: <string>; // Разрешение
                  };
                  weight: <number>; // Вес
                }[]>; // Уровни разрешений
              keys: <{
                  key: <string>; // Ключ
                  weight: <number>; // Вес
                }[]>; // Ключи
              threshold: <number>; // Порог
              waits: <{
                  wait_sec: <number>; // Время ожидания в секундах
                  weight: <number>; // Вес
                }[]>; // Вес ожидания
            };
          }[]>; // Разрешения
        privileged: <boolean>; // Флаг привилегий
        ram_quota: <number>; // Квота RAM
        ram_usage: <number>; // Использование RAM
        refund_request?: {
          cpu_amount: <string>; // Сумма CPU
          net_amount: <string>; // Сумма сети
          owner: <string>; // Владелец
          request_time: <string>; // Время запроса
        };
        rex_info?: <null | string>; // Информация о REX
        self_delegated_bandwidth?: {
          cpu_weight: <string>; // Вес CPU
          from: <string>; // Отправитель
          net_weight: <string>; // Вес сети
          to: <string>; // Получатель
        };
        total_resources?: {
          cpu_weight: <string>; // Вес CPU
          net_weight: <string>; // Вес сети
          owner: <string>; // Владелец
          ram_bytes: <number>; // Используемая RAM
        };
        voter_info?: <null | string>; // Информация о голосовании
      };
      participant_account?: {
        braname?: <null | string>; // Имя кооперативного участка
        created_at: <unknown>; // Время создания записи о члене
        has_vote: <boolean>; // LEGACY Флаг, имеет ли член право голоса
        initial_amount?: <null | string>; // Сумма вступительного взноса
        is_initial: <boolean>; // LEGACY Флаг, внесен ли регистрационный взнос
        is_minimum: <boolean>; // LEGACY Флаг, внесен ли минимальный паевый взнос
        last_min_pay: <unknown>; // Время последнего минимального платежа
        last_update: <unknown>; // Время последнего обновления информации о члене
        minimum_amount?: <null | string>; // Сумма минимального паевого взноса
        status: <string>; // Статус члена кооператива (accepted | blocked)
        type?: <null | string>; // Тип участника (individual | entrepreneur | organization)
        username: <string>; // Уникальное имя члена кооператива
      };
      private_account?: {
        entrepreneur_data?: {
          birthdate: <string>; // Дата рождения
          city: <string>; // Город
          country: <string>; // Страна
          details: {
            inn: <string>; // ИНН
            ogrn: <string>; // ОГРН
          };
          email: <string>; // Email
          first_name: <string>; // Имя
          full_address: <string>; // Юридический адрес
          last_name: <string>; // Фамилия
          middle_name: <string>; // Отчество
          phone: <string>; // Телефон
          username: <string>; // Имя аккаунта
        };
        individual_data?: {
          birthdate: <string>; // Дата рождения
          email: <string>; // Email
          first_name: <string>; // Имя
          full_address: <string>; // Полный адрес
          last_name: <string>; // Фамилия
          middle_name: <string>; // Отчество
          passport?: {
            code: <string>; // Код подразделения
            issued_at: <string>; // Дата выдачи
            issued_by: <string>; // Кем выдан
            number: <number>; // Номер паспорта
            series: <number>; // Серия паспорта
          };
          phone: <string>; // Телефон
          username: <string>; // Имя аккаунта
        };
        organization_data?: {
          city: <string>; // Город
          country: <string>; // Страна
          details: {
            inn: <string>; // ИНН
            kpp: <string>; // КПП
            ogrn: <string>; // ОГРН
          };
          email: <string>; // Email
          fact_address: <string>; // Фактический адрес
          full_address: <string>; // Юридический адрес
          full_name: <string>; // Полное название
          phone: <string>; // Телефон
          represented_by: {
            based_on: <string>; // На основании чего действует
            first_name: <string>; // Имя
            last_name: <string>; // Фамилия
            middle_name: <string>; // Отчество
            position: <string>; // Должность
          };
          short_name: <string>; // Краткое название
          type: <string>; // Тип организации
          username: <string>; // Имя аккаунта организации
        };
        type: <AccountType>; // Тип аккаунта
      };
      provider_account?: {
        email: <string>; // Электронная почта пользователя
        has_account: <boolean>; // Есть ли у пользователя аккаунт
        initial_order?: <null | string>; // ID начального заказа
        is_email_verified: <boolean>; // Подтверждена ли электронная почта
        is_registered: <boolean>; // Зарегистрирован ли пользователь
        message?: <null | string>; // Сообщение
        public_key: <string>; // Публичный ключ пользователя
        referer: <string>; // Реферер пользователя
        role: <string>; // Роль пользователя
        status: <UserStatus>; // Статус пользователя
        subscriber_hash: <string>; // Хэш подписчика для уведомлений
        subscriber_id: <string>; // Идентификатор подписчика для уведомлений
        type: <string>; // Тип пользователя
        username: <string>; // Имя пользователя
      };
      user_account?: {
        meta: <string>; // Метаинформация
        referer: <string>; // Реферал
        registered_at: <string>; // Дата регистрации
        registrator: <string>; // Регистратор
        status: <string>; // Статус аккаунта
        storages: <string[]>; // Список хранилищ
        type: <string>; // Тип учетной записи
        username: <string>; // Имя аккаунта
        verifications: <{
            created_at: <string>; // Дата создания верификации
            is_verified: <boolean>; // Флаг верификации
            last_update: <string>; // Дата последнего обновления верификации
            notice: <string>; // Заметка верификации
            procedure: <string>; // Процедура верификации
            verificator: <string>; // Имя верификатора
          }[]>; // Дата регистрации
      };
      username: <string>; // Имя аккаунта кооператива
    };
    tokens: {
      access: {
        expires: <unknown>; // Дата истечения токена доступа
        token: <string>; // Токен доступа
      };
      refresh: {
        expires: <unknown>; // Дата истечения токена доступа
        token: <string>; // Токен доступа
      };
    };
  };
}

Создать начальный платёж

🛠️ SDK: Mutations.Gateway.CreateInitialPayment | Mutation.createInitialPayment

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

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

const variables: Mutations.Gateway.CreateInitialPayment.IInput = {
  data: {
    username: <string>; // Имя аккаунта пользователя
  };
};

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

Результат:

interface IOutput {
  createInitialPayment: {
    blockchain_data?: <unknown>; // Данные из блокчейна
    can_change_status: <boolean>; // Можно ли изменить статус
    coopname: <string>; // Название кооператива
    created_at: <unknown>; // Дата создания
    direction: <PaymentDirection>; // Направление платежа
    direction_label: <string>; // Человекочитаемое направление платежа
    expired_at?: <unknown>; // Дата истечения
    formatted_amount: <string>; // Форматированная сумма
    hash?: <null | string>; // Хеш платежа
    id?: <unknown>; // Уникальный идентификатор платежа
    income_hash?: <null | string>; // Хеш входящего платежа (устарело)
    is_final: <boolean>; // Завершен ли платеж окончательно
    memo?: <null | string>; // Дополнительная информация
    message?: <null | string>; // Сообщение
    outcome_hash?: <null | string>; // Хеш исходящего платежа (устарело)
    payment_details?: {
      amount_plus_fee: <string>; // Сумма платежа с учетом комиссии
      amount_without_fee: <string>; // Сумма платежа без учета комиссии
      data: <unknown>; // Данные платежа (QR-код, токен, реквизиты и т.д.)
      fact_fee_percent: <number>; // Фактический процент комиссии
      fee_amount: <string>; // Размер комиссии в абсолютных значениях
      fee_percent: <number>; // Процент комиссии
      tolerance_percent: <number>; // Допустимый процент отклонения
    };
    payment_method_id?: <null | string>; // ID платежного метода
    provider?: <null | string>; // Провайдер платежа
    quantity: <number>; // Количество/сумма
    statement?: <unknown>; // Подписанный документ заявления
    status: <PaymentStatus>; // Статус платежа
    status_label: <string>; // Человекочитаемый статус
    symbol: <string>; // Символ валюты
    type: <PaymentType>; // Тип платежа
    type_label: <string>; // Человекочитаемый тип платежа
    updated_at?: <unknown>; // Дата обновления
    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; } | { ...; }) & {}>; // Сертификат пользователя, создавшего платеж
  };
}

Создать платёж (депозит)

🛠️ SDK: Mutations.Gateway.CreateDepositPayment | Mutation.createDepositPayment

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

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

const variables: Mutations.Gateway.CreateDepositPayment.IInput = {
  data: {
    quantity: <number>; // Сумма взноса
    symbol: <string>; // Символ валюты
    username: <string>; // Имя аккаунта пользователя
  };
};

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

Результат:

interface IOutput {
  createDepositPayment: {
    blockchain_data?: <unknown>; // Данные из блокчейна
    can_change_status: <boolean>; // Можно ли изменить статус
    coopname: <string>; // Название кооператива
    created_at: <unknown>; // Дата создания
    direction: <PaymentDirection>; // Направление платежа
    direction_label: <string>; // Человекочитаемое направление платежа
    expired_at?: <unknown>; // Дата истечения
    formatted_amount: <string>; // Форматированная сумма
    hash?: <null | string>; // Хеш платежа
    id?: <unknown>; // Уникальный идентификатор платежа
    income_hash?: <null | string>; // Хеш входящего платежа (устарело)
    is_final: <boolean>; // Завершен ли платеж окончательно
    memo?: <null | string>; // Дополнительная информация
    message?: <null | string>; // Сообщение
    outcome_hash?: <null | string>; // Хеш исходящего платежа (устарело)
    payment_details?: {
      amount_plus_fee: <string>; // Сумма платежа с учетом комиссии
      amount_without_fee: <string>; // Сумма платежа без учета комиссии
      data: <unknown>; // Данные платежа (QR-код, токен, реквизиты и т.д.)
      fact_fee_percent: <number>; // Фактический процент комиссии
      fee_amount: <string>; // Размер комиссии в абсолютных значениях
      fee_percent: <number>; // Процент комиссии
      tolerance_percent: <number>; // Допустимый процент отклонения
    };
    payment_method_id?: <null | string>; // ID платежного метода
    provider?: <null | string>; // Провайдер платежа
    quantity: <number>; // Количество/сумма
    statement?: <unknown>; // Подписанный документ заявления
    status: <PaymentStatus>; // Статус платежа
    status_label: <string>; // Человекочитаемый статус
    symbol: <string>; // Символ валюты
    type: <PaymentType>; // Тип платежа
    type_label: <string>; // Человекочитаемый тип платежа
    updated_at?: <unknown>; // Дата обновления
    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; } | { ...; }) & {}>; // Сертификат пользователя, создавшего платеж
  };
}