Разработчикам
sequenceDiagram
participant Client
participant SDK
Client->>SDK: Accounts.RegisterAccount
Client->>SDK: Agreements.Generate* (4 документа)
Client->>SDK: Participants.GenerateParticipantApplication (ссылки на все соглашения)
Client->>SDK: Gateway.CreateInitialPayment
Client->>SDK: Gateway.SetPaymentStatus
Client->>SDK: Soviet.AcceptParticipant
Client->>SDK: Participants.RegisterParticipant
1. Создать аккаунт¶
Заводим учётную запись будущего пайщика и получаем ключи/токены для дальнейших подписей.
🛠️ SDK: Mutations.Accounts.RegisterAccount | 🔗 GraphQL API: Mutation.registerAccount
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Accounts.RegisterAccount.IInput = {
data: {
email: <string>; // Электронная почта
entrepreneur_data?: <{
bank_account: {
account_number: <string>; // Номер банковского счета
bank_name: <string>; // Название банка
card_number?: <string | null>; // Номер карты
currency: <string>; // Валюта счета
details: {
bik: <string>; // БИК банка
corr: <string>; // Корреспондентский счет
kpp: <string>; // КПП банка
};
};
birthdate: <string>; // Дата рождения
city: <string>; // Город
country: <Country>; // Страна
details: {
inn: <string>; // ИНН
ogrn: <string>; // ОГРН
};
first_name: <string>; // Имя
full_address: <string>; // Полный адрес
last_name: <string>; // Фамилия
middle_name: <string>; // Отчество
phone: <string>; // Телефон
} | null>; // Данные индивидуального предпринимателя
individual_data?: <{
birthdate: <string>; // Дата рождения
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>;
} | null>; // Данные паспорта
phone: <string>; // Телефон
} | null>; // Данные физического лица
organization_data?: <{
bank_account: {
account_number: <string>; // Номер банковского счета
bank_name: <string>; // Название банка
card_number?: <string | null>; // Номер карты
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>; // Тип организации
} | null>; // Данные организации
public_key: <string>; // Публичный ключ
referer?: <string | null>; // Имя аккаунта реферера
type: <AccountType>; // Тип аккаунта
username: <string>; // Имя пользователя
};
};
const { [Mutations.Accounts.RegisterAccount.name]: result } = await client.Mutation(
Mutations.Accounts.RegisterAccount.mutation,
{ variables }
);
Результат
interface IOutput {
}
2. Подготовить пакет документов и заявление¶
Выпускаем обязательные соглашения, подписываем их и прикладываем к заявлению на вступление. Сгенерировать заявление: 🛠️ SDK: Mutations.Participants.GenerateParticipantApplication | 🔗 GraphQL API: Mutation.generateParticipantApplication
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Participants.GenerateParticipantApplication.IInput = {
data: {
block_num?: <number | null>; // Номер блока, на котором был создан документ
braname: <string>; // Имя аккаунта кооперативного участка
coopname: <string>; // Название кооператива, связанное с документом
created_at?: <string | null>; // Дата и время создания документа
generator?: <string | null>; // Имя генератора, использованного для создания документа
lang?: <string | null>; // Язык документа
links?: <string[] | null>; // Ссылки, связанные с документом
signature?: <string | null>; // Изображение собственноручной подписи (base-64)
skip_save: <boolean>; // Флаг пропуска сохранения документа (используется для предварительной генерации и демонстрации пользователю)
timezone?: <string | null>; // Часовой пояс, в котором был создан документ
title?: <string | null>; // Название документа
username: <string>; // Имя пользователя, создавшего документ
version?: <string | null>; // Версия генератора, использованного для создания документа
};
options?: {
lang?: <string | null>; // Язык документа
skip_save?: <boolean | null>; // Пропустить сохранение
};
};
const { [Mutations.Participants.GenerateParticipantApplication.name]: result } = await client.Mutation(
Mutations.Participants.GenerateParticipantApplication.mutation,
{ variables }
);
И аналогично сопутствующие документы соглашений: Сгенерировать и подписать обязательные соглашения (каждое — отдельный документ):
-
Соглашение о ЦПП "Цифровой Кошелек" 🛠️ SDK: Mutations.Agreements.GenerateWalletAgreement | 🔗 GraphQL API: Mutation.generateWalletAgreement
-
Политика конфиденциальности 🛠️ SDK: Mutations.Agreements.GeneratePrivacyAgreement | 🔗 GraphQL API: Mutation.generatePrivacyAgreement
-
Соглашение о порядке и правилах использования простой электронной подписи 🛠️ SDK: Mutations.Agreements.GenerateSignatureAgreement | 🔗 GraphQL API: Mutation.generateSignatureAgreement
-
Пользовательское соглашение 🛠️ SDK: Mutations.Agreements.GenerateUserAgreement | 🔗 GraphQL API: Mutation.generateUserAgreement
3. Создать регистрационный платёж¶
Выпускаем платёж на вступительный и минимальный паевой взносы и отмечаем его поступление. 🛠️ SDK: Mutations.Gateway.CreateInitialPayment | 🔗 GraphQL API: Mutation.createInitialPayment
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 {
}
4. Подтвердить приём платежа¶
После фактического поступления средств отметить статус:
🛠️ SDK: Mutations.Gateway.SetPaymentStatus | 🔗 GraphQL API: Mutation.setPaymentStatus
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"]>;
}
4. Провести голосование и утвердить решение¶
Фиксируем решение совета. Сейчас фронтенд отправляет транзакцию и протокол напрямую в блокчейн, используя класс голосования 🛠️ Classes.Vote.voteFor. Планируемая SDK-обёртка (без макроса, чтобы не ломать сборку): Mutations.Soviet.AcceptParticipant — для передачи результата голосования и протокола.
5. Завершить регистрацию¶
Фиксируем принятого пайщика, выдаём доступы/роли и открываем доступ к рабочему месту. 🛠️ SDK: Mutations.Participants.RegisterParticipant | 🔗 GraphQL API: Mutation.registerParticipant
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Participants.RegisterParticipant.IInput = {
data: {
blagorost_offer?: <{
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>; // Версия стандарта документа
} | null>; // Подписанный документ соглашения по капитализации (опционально, только если требуется)
braname?: <string | null>; // Имя кооперативного участка
generator_offer?: <{
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>; // Версия стандарта документа
} | null>; // Подписанный документ оферты по программе "Генератор" (опционально, только для программы 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?: <ProgramKey | null>; // Ключ выбранной программы регистрации
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?: <string | null>; // Изображение собственноручной подписи (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 {
}