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

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

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

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

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

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

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

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

После успешной подписи заявления на вступление, система предложит совершить минимальный паевой и вступительные взносы одним платежом. Здесь способ приёма платежа может отличаться от кооператива к кооперативу, т.к. он зависит от выбранного платежного провайдера. Мы рассмотрим только случай банковского платежа по реквизитам с использованием 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>; // Токен доступа
};
};
};
}
Подтвердить адрес электронной почты¶
Отдельного экспортируемого модуля в @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; } | { ...; }) & {}>; // Сертификат пользователя, создавшего платеж
};
}