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

Обзор

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

Главный кошелек обеспечивает учёт взносов на лицевом счете пайщика по целевой потребительской програме "Цифровой Кошелек". Он же является центральным входом и выходом денег из цифрового кооператива для пайщиков, обеспечивая приём паевых взносов банковскими переводами и их возврат банковскими переводами.

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

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

flowchart LR
    contrib[Паевой взнос] --> main["Главный кошелек"]
    refund[Возврат взноса] --> main
    main <-->|трансляция| subgraph_apps["Кошельки приложений"]
    subgraph_apps --> app1[Кошелек приложения A]
    subgraph_apps --> app2[Кошелек приложения B]
    subgraph_apps --> app3[Кошелек приложения C]

модуль кошелька

Главный кошелёк.

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

главный кошелек

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

Главный кошелек показывает два состояния паевых взносов по целевой потребительской программе "Цифровой Кошелек": доступные средства и заблокированные средства.

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

Кошельки приложений

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

кошельки приложений

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

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

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

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

Микро-кошелек

Микро-кошелек отображает баланс главного кошелька и кнопки управления взносами в всегда доступном месте главного меню.

микро-кошелек

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

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

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

Получить программный кошелёк

🛠️ SDK: Queries.Wallet.GetProgramWallet | Query.getProgramWallet

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

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

const variables: Queries.Wallet.GetProgramWallet.IInput = {
  filter: {
    coopname?: <null | string>; // Фильтр по имени кооператива
    program_id?: <null | string>; // Фильтр по ID программы
    program_type?: <null | ProgramType>; // Фильтр по типу программы
    username?: <null | string>; // Фильтр по имени пользователя
  };
  options: {
    limit: <number>; // Количество элементов на странице
    page: <number>; // Номер страницы
    sortBy?: <null | string>; // Ключ сортировки (например, "name")
    sortOrder: <string>; // Направление сортировки ("ASC" или "DESC")
  };
};

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

Результат:

interface IOutput {
  getProgramWallet?: <undefined | {
      agreement_id: <unknown>; // Идентификатор соглашения
      available: <string>; // Доступный баланс (формат: "100.0000 RUB")
      blockNum?: <null | number>; // Номер блока последнего обновления
      blocked: <string>; // Заблокированный баланс (формат: "100.0000 RUB")
      coopname: <string>; // Имя кооператива
      id: <unknown>; // Уникальный идентификатор кошелька в блокчейне
      membership_contribution: <string>; // Паевой взнос (формат: "100.0000 RUB")
      program_id: <unknown>; // Идентификатор программы
      program_type?: <null | ProgramType>; // Тип программы
      username: <string>; // Имя пользователя
    }>; // Получить один программный кошелек по фильтру

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

Список программных кошельков

🛠️ SDK: Queries.Wallet.GetProgramWallets | Query.getProgramWallets

Получить список программных кошельков с фильтрацией и пагинацией Требуемые роли: chairman, member.

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

const variables: Queries.Wallet.GetProgramWallets.IInput = {
  filter?: {
    coopname?: <null | string>; // Фильтр по имени кооператива
    program_id?: <null | string>; // Фильтр по ID программы
    program_type?: <null | ProgramType>; // Фильтр по типу программы
    username?: <null | string>; // Фильтр по имени пользователя
  };
  options?: {
    limit: <number>; // Количество элементов на странице
    page: <number>; // Номер страницы
    sortBy?: <null | string>; // Ключ сортировки (например, "name")
    sortOrder: <string>; // Направление сортировки ("ASC" или "DESC")
  };
};

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

Результат:

interface IOutput {
  getProgramWallets: {
    currentPage: <number>; // Текущая страница
    items: <{
        agreement_id: <unknown>; // Идентификатор соглашения
        available: <string>; // Доступный баланс (формат: "100.0000 RUB")
        blockNum?: <null | number>; // Номер блока последнего обновления
        blocked: <string>; // Заблокированный баланс (формат: "100.0000 RUB")
        coopname: <string>; // Имя кооператива
        id: <unknown>; // Уникальный идентификатор кошелька в блокчейне
        membership_contribution: <string>; // Паевой взнос (формат: "100.0000 RUB")
        program_id: <unknown>; // Идентификатор программы
        program_type?: <null | ProgramType>; // Тип программы
        username: <string>; // Имя пользователя
      }[]>; // Элементы текущей страницы
    totalCount: <number>; // Общее количество элементов
    totalPages: <number>; // Общее количество страниц
  };
}

Получить информацию об аккаунте

🛠️ SDK: Queries.Accounts.GetAccount | Query.getAccount

/** Получить сводную информацию о аккаунте Требуемые роли: chairman, member.

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

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

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

Результат:

interface IOutput {
  getAccount: {
    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>; // Имя аккаунта кооператива
  };
}

Создать платёж (депозит), модуль Gateway

🛠️ 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; } | { ...; }) & {}>; // Сертификат пользователя, создавшего платеж
  };
}

Создать платёж (депозит), модуль Wallet

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

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

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

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

const { [Mutations.Wallet.CreateDepositPayment.name]: result } = await client.Mutation(
  Mutations.Wallet.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; } | { ...; }) & {}>; // Сертификат пользователя, создавшего платеж
  };
}

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

🛠️ 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.SetPaymentStatus | Mutation.setPaymentStatus

Управление статусом платежа осущствляется мутацией setPaymentStatus. При переходе платежа в статус PAID вызывается эффект в блокчейне, который завершает операцию автоматическим переводом платежа в статус COMPLETED. При установке статуса REFUNDED запускается процесс отмены платежа в блокчейне. Остальные статусы не приводят к эффектам в блокчейне. Требуемые роли: chairman, member.

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

const variables: Mutations.Gateway.SetPaymentStatus.IInput = {
  data: {
    id: <string>; // Идентификатор платежа, для которого устанавливается статус
    status: <PaymentStatus>; // Новый статус платежа
  };
};

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

Результат:

interface IOutput {
  setPaymentStatus: <ModelTypes["GatewayPayment"]>;
}

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

🛠️ SDK: Mutations.Wallet.GenerateReturnByMoneyStatementDocument | Mutation.generateReturnByMoneyStatementDocument

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

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

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

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

Результат:

interface IOutput {
  generateReturnByMoneyStatementDocument: <ModelTypes["GeneratedDocument"]>;
}

Решение совета о возврате паевого взноса (документ)

🛠️ SDK: Mutations.Wallet.GenerateReturnByMoneyDecisionDocument | Mutation.generateReturnByMoneyDecisionDocument

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

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

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

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

Результат:

interface IOutput {
  generateReturnByMoneyDecisionDocument: <ModelTypes["GeneratedDocument"]>;
}