Регистрация пайщика
Регистрация пайщика в кооперативе требует соблюдения строгой процедуры: заполнение заявления, подписание заявления и соглашений, оплата вступительного и минимального паевого взносов, получение решения совета. Цифровой кооператив автоматизирует эту процедуру до нажатия кнопок.
flowchart LR
A[Заполнение заявления] --> B[Подписание заявления и соглашений]
B --> C[Оплата вступительного и минимального паевого взносов]
C --> D[Получение решения совета]
Прежде, чем мы перейдем непосредственно к рассмотрению того, как же пайщик регистрируется в кооперативе, необходимо сказать о двух методах регистрации пайщиков, которые доступны на текущий момент.
flowchart TD
A[Методы регистрации] --> B[Вступление в пайщики]
A --> C[Добавление пайщика]
Первый метод - это вступление в пайщики, которое мы будем рассматривать далее. Согласно ей формируются и подписываются все необходимые документы по пути выше, система при этом все пополняет кооперативные кошельки и совершает бухгалтерские проводки.
Второй метод - это упрощенная регистрация пайщика, или, правильнее сказать - добавление пайщика. Метод добавления пайщика рассматривается и применяется на странице реестра пайщиков стола совета. Согласно ему, пайщик получает приглашение на электронную почту для выпуска цифровой подписи и дальнейшего входа в цифровую систему. Этот метод применяется в том случае, когда пайщики уже являются действующими, они вступили в кооператив вне цифровой среды и сейчас им необходимо предоставить доступ и выпустить цифровую подпись.
В этой документации мы рассмотрим оба подхода. Начнем с первого - вступление в пайщики.
Разработчикам¶
Канонические имена полей и типов — в файле 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.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>; // Имя аккаунта кооператива
};
}
Добавить пайщика (упрощённый сценарий)¶
🛠️ SDK: Mutations.Participants.AddParticipant | Mutation.addParticipant
import { Mutations, Zeus} from '@coopenomics/sdk'
const variables: Mutations.Participants.AddParticipant.IInput = {
data: {
created_at: "<фактическая дата регистрации пайщика>",
email: "<email пайщика>",
initial: <внесенный вступительного взнос (100.0000 RUB)>,
minimum: <внесенный мин. паевый взнос (300.0000 RUB)>,
//флаг распределения вступительного взноса по фондам указывает то,
// следует ли системе добавить вступительный взнос в фонд для дальнейшего списания (true),
// или он был ранее добавлен и списан на хозяйственные расходы (false).
spread_initial: false | true,
//тип добавляемого аккаунта - физлицо, юрлицо или организация
type: <Zeus.AccountType.Individual | Zeus.AccountType.Entrepreneur | Zeus.AccountType.Organization>
//передать один из объектов с данными
individual_data: {<объект с данными физлица> },
organization_data: {<объект с данными ИП> },
entrepreneur_data: {<объект с данными организации> },
}
}
const { [Mutations.Account.AddParticipant.name]: result } = await client.Mutation(
Mutations.Account.AddParticipant.mutation,
{
variables,
}
);
/** Добавить активного пайщика, который вступил в кооператив, не используя платформу (заполнив заявление собственноручно, оплатив вступительный и минимальный паевый взносы, и получив протокол решения совета) Требуемые роли: chairman, member.
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Participants.AddParticipant.IInput = {
data: {
created_at: <string>; // Дата создания аккаунта в строковом формате даты EOSIO по UTC (2024-12-28T06:58:52.500)
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>; // Телефон
}>; // Данные физического лица
initial: <string>; // Вступительный взнос, который был внесён пайщиком
minimum: <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>; // Тип организации
}>; // Данные организации
referer?: <null | string>; // Имя аккаунта реферера
spread_initial: <boolean>; // Флаг распределения вступительного взноса в невозвратный фонд вступительных взносов кооператива
type: <AccountType>; // Тип аккаунта
};
};
const { [Mutations.Participants.AddParticipant.name]: result } = await client.Mutation(
Mutations.Participants.AddParticipant.mutation,
{ variables }
);
Результат:
interface IOutput {
addParticipant: {
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>; // Имя аккаунта кооператива
};
}
Кандидаты на вступление¶
В SDK запрос оформлен в src/queries/registration/getCandidates.ts (экспорт getCandidatesQuery); отдельной записи в TypeDoc под стандартным путём Queries.* для этой операции нет.
Повестка совета¶
🛠️ SDK: Queries.Agenda.GetAgenda | Query.getAgenda
Получить список вопросов совета кооператива для голосования Требуемые роли: chairman, member.
import { Queries } from '@coopenomics/sdk';
const variables: Queries.Agenda.GetAgenda.IInput = {
};
const { [Queries.Agenda.GetAgenda.name]: result } = await client.Query(
Queries.Agenda.GetAgenda.query,
{ variables }
);
Результат:
interface IOutput {
getAgenda: <{
action: {
account: <string>;
account_ram_deltas: <{
account: <string>;
delta: <number>;
}[]>;
action_ordinal: <number>;
authorization: <{
actor: <string>;
permission: <string>;
}[]>;
block_id: <string>;
block_num: <number>;
chain_id: <string>;
console: <string>;
context_free: <boolean>;
creator_action_ordinal: <number>;
data: <unknown>; // Данные действия в формате JSON
elapsed: <number>;
global_sequence: <string>;
name: <string>;
receipt: {
abi_sequence: <number>;
act_digest: <string>;
auth_sequence: <{
account: <string>;
sequence: <string>;
}[]>;
code_sequence: <number>;
global_sequence: <string>;
receiver: <string>;
recv_sequence: <string>;
};
receiver: <string>;
transaction_id: <string>;
};
documents: {
acts: <{
action?: {
account: <string>;
account_ram_deltas: <{
account: <string>;
delta: <number>;
}[]>;
action_ordinal: <number>;
actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
authorization: <{
actor: <string>;
permission: <string>;
}[]>;
block_id: <string>;
block_num: <number>;
chain_id: <string>;
console: <string>;
context_free: <boolean>;
creator_action_ordinal: <number>;
data: <unknown>; // Данные действия в формате JSON
elapsed: <number>;
global_sequence: <string>;
name: <string>;
receipt: {
abi_sequence: <number>;
act_digest: <string>;
auth_sequence: <{
account: <string>;
sequence: <string>;
}[]>;
code_sequence: <number>;
global_sequence: <string>;
receiver: <string>;
recv_sequence: <string>;
};
receiver: <string>;
transaction_id: <string>;
};
documentAggregate?: {
document: {
doc_hash: <string>;
hash: <string>;
meta: <unknown>;
meta_hash: <string>;
signatures: <{
id: <number>;
is_valid?: <... | ... | ... | ...>;
meta: <unknown>;
public_key: <string>;
signature: <string>;
signed_at: <string>;
signed_hash: <string>;
signer: <string>;
signer_certificate?: <... | ...>; // Сертификат подписанта (сокращенная информация)
}[]>;
version: <string>;
};
hash: <string>;
rawDocument?: {
binary: <string>; // Бинарное содержимое документа (base64)
full_title: <string>; // Полное название документа
hash: <string>; // Хэш документа
html: <string>; // HTML содержимое документа
meta: <unknown>; // Метаданные документа
};
};
}[]>; // Массив объект(ов) актов с агрегатами, относящихся к заявлению
decision?: {
action: {
account: <string>;
account_ram_deltas: <{
account: <string>;
delta: <number>;
}[]>;
action_ordinal: <number>;
actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
authorization: <{
actor: <string>;
permission: <string>;
}[]>;
block_id: <string>;
block_num: <number>;
chain_id: <string>;
console: <string>;
context_free: <boolean>;
creator_action_ordinal: <number>;
data: <unknown>; // Данные действия в формате JSON
elapsed: <number>;
global_sequence: <string>;
name: <string>;
receipt: {
abi_sequence: <number>;
act_digest: <string>;
auth_sequence: <{
account: <string>;
sequence: <string>;
}[]>;
code_sequence: <number>;
global_sequence: <string>;
receiver: <string>;
recv_sequence: <string>;
};
receiver: <string>;
transaction_id: <string>;
};
documentAggregate: {
document: {
doc_hash: <string>;
hash: <string>;
meta: <unknown>;
meta_hash: <string>;
signatures: <{
id: <number>;
is_valid?: <null | boolean>;
meta: <unknown>;
public_key: <string>;
signature: <string>;
signed_at: <string>;
signed_hash: <string>;
signer: <string>;
signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
}[]>;
version: <string>;
};
hash: <string>;
rawDocument?: {
binary: <string>; // Бинарное содержимое документа (base64)
full_title: <string>; // Полное название документа
hash: <string>; // Хэш документа
html: <string>; // HTML содержимое документа
meta: <unknown>; // Метаданные документа
};
};
votes_against: <{
account: <string>;
account_ram_deltas: <{
account: <string>;
delta: <number>;
}[]>;
action_ordinal: <number>;
actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
authorization: <{
actor: <string>;
permission: <string>;
}[]>;
block_id: <string>;
block_num: <number>;
chain_id: <string>;
console: <string>;
context_free: <boolean>;
creator_action_ordinal: <number>;
data: <unknown>; // Данные действия в формате JSON
elapsed: <number>;
global_sequence: <string>;
name: <string>;
receipt: {
abi_sequence: <number>;
act_digest: <string>;
auth_sequence: <{
account: <string>;
sequence: <string>;
}[]>;
code_sequence: <number>;
global_sequence: <string>;
receiver: <string>;
recv_sequence: <string>;
};
receiver: <string>;
transaction_id: <string>;
}[]>;
votes_for: <{
account: <string>;
account_ram_deltas: <{
account: <string>;
delta: <number>;
}[]>;
action_ordinal: <number>;
actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
authorization: <{
actor: <string>;
permission: <string>;
}[]>;
block_id: <string>;
block_num: <number>;
chain_id: <string>;
console: <string>;
context_free: <boolean>;
creator_action_ordinal: <number>;
data: <unknown>; // Данные действия в формате JSON
elapsed: <number>;
global_sequence: <string>;
name: <string>;
receipt: {
abi_sequence: <number>;
act_digest: <string>;
auth_sequence: <{
account: <string>;
sequence: <string>;
}[]>;
code_sequence: <number>;
global_sequence: <string>;
receiver: <string>;
recv_sequence: <string>;
};
receiver: <string>;
transaction_id: <string>;
}[]>;
};
links: <{
document: {
doc_hash: <string>;
hash: <string>;
meta: <unknown>;
meta_hash: <string>;
signatures: <{
id: <number>;
is_valid?: <null | boolean>;
meta: <unknown>;
public_key: <string>;
signature: <string>;
signed_at: <string>;
signed_hash: <string>;
signer: <string>;
signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
}[]>;
version: <string>;
};
hash: <string>;
rawDocument?: {
binary: <string>; // Бинарное содержимое документа (base64)
full_title: <string>; // Полное название документа
hash: <string>; // Хэш документа
html: <string>; // HTML содержимое документа
meta: <unknown>; // Метаданные документа
};
}[]>; // Массив связанных документов с агрегатами, извлечённых из мета-данных
statement?: {
action: {
account: <string>;
account_ram_deltas: <{
account: <string>;
delta: <number>;
}[]>;
action_ordinal: <number>;
actor_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя (сокращенная информация)
authorization: <{
actor: <string>;
permission: <string>;
}[]>;
block_id: <string>;
block_num: <number>;
chain_id: <string>;
console: <string>;
context_free: <boolean>;
creator_action_ordinal: <number>;
data: <unknown>; // Данные действия в формате JSON
elapsed: <number>;
global_sequence: <string>;
name: <string>;
receipt: {
abi_sequence: <number>;
act_digest: <string>;
auth_sequence: <{
account: <string>;
sequence: <string>;
}[]>;
code_sequence: <number>;
global_sequence: <string>;
receiver: <string>;
recv_sequence: <string>;
};
receiver: <string>;
transaction_id: <string>;
};
documentAggregate: {
document: {
doc_hash: <string>;
hash: <string>;
meta: <unknown>;
meta_hash: <string>;
signatures: <{
id: <number>;
is_valid?: <null | boolean>;
meta: <unknown>;
public_key: <string>;
signature: <string>;
signed_at: <string>;
signed_hash: <string>;
signer: <string>;
signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
}[]>;
version: <string>;
};
hash: <string>;
rawDocument?: {
binary: <string>; // Бинарное содержимое документа (base64)
full_title: <string>; // Полное название документа
hash: <string>; // Хэш документа
html: <string>; // HTML содержимое документа
meta: <unknown>; // Метаданные документа
};
};
};
};
table: {
approved: <boolean>;
authorization: {
doc_hash: <string>; // Хэш содержимого документа
hash: <string>; // Общий хэш (doc_hash + meta_hash)
meta: <string>; // Метаинформация документа (в формате JSON-строки)
meta_hash: <string>; // Хэш мета-данных
signatures: <{
id: <number>;
is_valid?: <null | boolean>;
meta: <unknown>;
public_key: <string>;
signature: <string>;
signed_at: <string>;
signed_hash: <string>;
signer: <string>;
signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
}[]>; // Вектор подписей
version: <string>; // Версия стандарта документа
};
authorized: <boolean>;
authorized_by: <string>;
batch_id: <number>;
callback_contract?: <null | string>;
confirm_callback?: <null | string>;
coopname: <string>;
created_at: <string>;
decline_callback?: <null | string>;
expired_at: <string>;
hash?: <null | string>;
id: <number>;
meta: <string>;
statement: {
doc_hash: <string>; // Хэш содержимого документа
hash: <string>; // Общий хэш (doc_hash + meta_hash)
meta: <string>; // Метаинформация документа (в формате JSON-строки)
meta_hash: <string>; // Хэш мета-данных
signatures: <{
id: <number>;
is_valid?: <null | boolean>;
meta: <unknown>;
public_key: <string>;
signature: <string>;
signed_at: <string>;
signed_hash: <string>;
signer: <string>;
signer_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат подписанта (сокращенная информация)
}[]>; // Вектор подписей
version: <string>; // Версия стандарта документа
};
type: <string>;
username: <string>;
username_certificate?: <({ username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | null | undefined; inn: string; } | { username: string; type: AccountType; first_name: string; last_name: string; middle_name?: string | ... 1 more ... | undefined; } | { ...; }) & {}>; // Сертификат пользователя, создавшего решение
validated: <boolean>;
votes_against: <string[]>;
votes_against_certificates: <unknown[]>; // Сертификаты пользователей, голосовавших "против"
votes_for: <string[]>;
votes_for_certificates: <unknown[]>; // Сертификаты пользователей, голосовавших "за"
};
}[]>; // Получить список вопросов совета кооператива для голосования
Требуемые роли: chairman, member.
}