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

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

Если нажать на зеленую стрелочку у левого края строки с наименованием кооперативного участка, то откроется вложение с карточкой кооперативного участка и возможностью редактирования:

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

Карточка председателя не редактируется т.к. она только отображает данные председателя кооперативного участка. Для редактирования данных председателя необходимо найти его на странице реестр пайщиков на столе совета.
А вот данные по кооперативному участку можно легко отредактировать, в том числе, заменив председателя кооперативного участка (на что у председателя должно быть юридическое основание):

Переход к двухуровневому управлению¶
Как только в цифровом кооперативе добавляется 3 кооперативных участка - он переходит на двухуровневую систему управления. С этого момента всем пайщикам будет предложено выбрать кооперативный участок и делегировать свой голос на общих собраниях его председателю. Общие собрания пайщиков трансформируются в общие собрания уполномоченных.
Сразу после перехода все пайщики увидят сообщение об этом в личных кабинетах с предложением выбрать кооперативный участок:

Выбор кооперативного участка осуществляется списком с указанием их фактических адресов:

После выбора кооперативного участка пайщику будет автоматически сформировано заявление о выборе кооперативного участка и делегировании своего голоса на общих собраниях его председателю:

После подписи заявления пайщик закрепляется за кооперативным участком и может продолжать использовать платформу.
Возврат к одноуровневой системе
Если кооперативных участков в списке останется меньше 3, то система вернется к одноуровневому режиму работы. Таким образом, чтобы вернуть систему в одноуровневый режим - председателю достаточно удалить кооперативные участки из списка.
Важно! С момента включения двухуровневой системы управления в процесс вступления пайщиков добавится пункт с предложением выбрать кооперативный участок. Запись о делегировании голоса на общих собраниях председателю выбранного кооперативного участка добавится в заявление на вступление в кооператив.
Разработчикам¶
Канонические имена полей и типов — в файле components/controller/schema.gql монорепозитория; интерактивно — в документации GraphQL-API.
Список кооперативных участков¶
🛠️ SDK: Queries.Branches.GetBranches | Query.getBranches
Получить список кооперативных участков
import { Queries } from '@coopenomics/sdk';
const variables: Queries.Branches.GetBranches.IInput = {
data: {
braname?: <null | string>; // Фильтр по имени аккаунта кооперативного участка
coopname: <string>; // Имя аккаунта кооператива
};
};
const { [Queries.Branches.GetBranches.name]: result } = await client.Query(
Queries.Branches.GetBranches.query,
{ variables }
);
Результат:
interface IOutput {
getBranches: <{
bank_account: {
created_at: <unknown>; // Дата создания
data: {
account_number: <string>; // Номер банковского счета
bank_name: <string>; // Название банка
card_number?: <null | string>; // Номер карты
currency: <string>; // Валюта счета
details: {
bik: <string>; // БИК банка
corr: <string>; // Корреспондентский счет
kpp: <string>; // КПП банка
};
};
is_default: <boolean>; // Флаг основного метода платежа, который отображается в документах
method_id: <string>; // Идентификатор метода оплаты
method_type: <string>; // Тип метода оплаты
updated_at: <unknown>; // Дата обновления
username: <string>; // Имя пользователя, к которому привязан метод оплаты
};
braname: <string>; // Уникальное имя кооперативного участка
city: <string>; // Город
coopname: <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>; // Краткое название организации
trusted: <{
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>; // Имя аккаунта
}[]>; // Доверенные аккаунты
Требуемые роли: chairman, member.
trustee: {
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>; // Имя аккаунта
};
type: <string>; // Тип организации
}[]>; // Получить список кооперативных участков
}
Создать участок¶
🛠️ SDK: Mutations.Branches.CreateBranch | Mutation.createBranch
Создать кооперативный участок Требуемые роли: chairman.
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Branches.CreateBranch.IInput = {
data: {
based_on: <string>; // Документ, на основании которого действует Уполномоченный (решение совета №СС-.. от ..)
braname: <string>; // Имя аккаунта кооперативного участка
coopname: <string>; // Имя аккаунта кооператива
email: <string>; // Электронная почта
fact_address: <string>; // Фактический адрес
full_name: <string>; // Полное имя организации кооперативного участка
phone: <string>; // Телефон
short_name: <string>; // Краткое имя организации кооперативного участка
trustee: <string>; // Имя аккаунта уполномоченного (председателя) кооперативного участка
};
};
const { [Mutations.Branches.CreateBranch.name]: result } = await client.Mutation(
Mutations.Branches.CreateBranch.mutation,
{ variables }
);
Результат:
interface IOutput {
createBranch: {
bank_account: {
created_at: <unknown>; // Дата создания
data: {
account_number: <string>; // Номер банковского счета
bank_name: <string>; // Название банка
card_number?: <null | string>; // Номер карты
currency: <string>; // Валюта счета
details: {
bik: <string>; // БИК банка
corr: <string>; // Корреспондентский счет
kpp: <string>; // КПП банка
};
};
is_default: <boolean>; // Флаг основного метода платежа, который отображается в документах
method_id: <string>; // Идентификатор метода оплаты
method_type: <string>; // Тип метода оплаты
updated_at: <unknown>; // Дата обновления
username: <string>; // Имя пользователя, к которому привязан метод оплаты
};
braname: <string>; // Уникальное имя кооперативного участка
city: <string>; // Город
coopname: <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>; // Краткое название организации
trusted: <{
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>; // Имя аккаунта
}[]>; // Доверенные аккаунты
Требуемые роли: chairman, member.
trustee: {
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>; // Имя аккаунта
};
type: <string>; // Тип организации
};
}
Изменить участок¶
🛠️ SDK: Mutations.Branches.EditBranch | Mutation.editBranch
Изменить кооперативный участок Требуемые роли: chairman.
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Branches.EditBranch.IInput = {
data: {
based_on: <string>; // Документ, на основании которого действует Уполномоченный (решение совета №СС-.. от ..)
braname: <string>; // Имя аккаунта кооперативного участка
coopname: <string>; // Имя аккаунта кооператива
email: <string>; // Электронная почта
fact_address: <string>; // Фактический адрес
full_name: <string>; // Полное имя организации кооперативного участка
phone: <string>; // Телефон
short_name: <string>; // Краткое имя организации кооперативного участка
trustee: <string>; // Имя аккаунта уполномоченного (председателя) кооперативного участка
};
};
const { [Mutations.Branches.EditBranch.name]: result } = await client.Mutation(
Mutations.Branches.EditBranch.mutation,
{ variables }
);
Результат:
interface IOutput {
editBranch: {
bank_account: {
created_at: <unknown>; // Дата создания
data: {
account_number: <string>; // Номер банковского счета
bank_name: <string>; // Название банка
card_number?: <null | string>; // Номер карты
currency: <string>; // Валюта счета
details: {
bik: <string>; // БИК банка
corr: <string>; // Корреспондентский счет
kpp: <string>; // КПП банка
};
};
is_default: <boolean>; // Флаг основного метода платежа, который отображается в документах
method_id: <string>; // Идентификатор метода оплаты
method_type: <string>; // Тип метода оплаты
updated_at: <unknown>; // Дата обновления
username: <string>; // Имя пользователя, к которому привязан метод оплаты
};
braname: <string>; // Уникальное имя кооперативного участка
city: <string>; // Город
coopname: <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>; // Краткое название организации
trusted: <{
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>; // Имя аккаунта
}[]>; // Доверенные аккаунты
Требуемые роли: chairman, member.
trustee: {
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>; // Имя аккаунта
};
type: <string>; // Тип организации
};
}
Удалить участок¶
🛠️ SDK: Mutations.Branches.DeleteBranch | Mutation.deleteBranch
Удалить кооперативный участок Требуемые роли: chairman.
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Branches.DeleteBranch.IInput = {
data: {
braname: <string>; // Имя аккаунта кооперативного участка
coopname: <string>; // Имя аккаунта кооператива
};
};
const { [Mutations.Branches.DeleteBranch.name]: result } = await client.Mutation(
Mutations.Branches.DeleteBranch.mutation,
{ variables }
);
Результат:
interface IOutput {
deleteBranch: <boolean>; // Удалить кооперативный участок
Требуемые роли: chairman.
}
Документ выбора участка пайщиком¶
🛠️ SDK: Mutations.Branches.GenerateSelectBranchDocument | Mutation.generateSelectBranchDocument
Сгенерировать документ, подтверждающий выбор кооперативного участка Требуемые роли: chairman, member, user.
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Branches.GenerateSelectBranchDocument.IInput = {
data: {
block_num?: <null | number>; // Номер блока, на котором был создан документ
braname: <string>; // Идентификатор имени аккаунта кооперативного участка
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.Branches.GenerateSelectBranchDocument.name]: result } = await client.Mutation(
Mutations.Branches.GenerateSelectBranchDocument.mutation,
{ variables }
);
Результат:
interface IOutput {
generateSelectBranchDocument: {
binary: <string>; // Бинарное содержимое документа (base64)
full_title: <string>; // Полное название документа
hash: <string>; // Хэш документа
html: <string>; // HTML содержимое документа
meta: <unknown>; // Метаданные документа
};
}
Выбор участка пайщиком¶
🛠️ SDK: Mutations.Branches.SelectBranch | Mutation.selectBranch
Выбрать кооперативный участок Требуемые роли: chairman, member, user.
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Branches.SelectBranch.IInput = {
data: {
braname: <string>; // Имя аккаунта кооперативного участка
coopname: <string>; // Имя аккаунта кооператива
document: {
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 документа в реестре
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>; // Версия стандарта документа
};
username: <string>; // Имя аккаунта пользователя
};
};
const { [Mutations.Branches.SelectBranch.name]: result } = await client.Mutation(
Mutations.Branches.SelectBranch.mutation,
{ variables }
);
Результат:
interface IOutput {
selectBranch: <boolean>; // Выбрать кооперативный участок
Требуемые роли: chairman, member, user.
}
Добавить доверенное лицо¶
🛠️ SDK: Mutations.Branches.AddTrustedAccount | Mutation.addTrustedAccount
Добавить доверенное лицо кооперативного участка Требуемые роли: chairman.
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Branches.AddTrustedAccount.IInput = {
data: {
braname: <string>; // Имя аккаунта кооперативного участка
coopname: <string>; // Имя аккаунта кооператива
trusted: <string>; // Имя аккаунта доверонного лица, который уполномачивается председателем кооперативного участка на совершение действий
};
};
const { [Mutations.Branches.AddTrustedAccount.name]: result } = await client.Mutation(
Mutations.Branches.AddTrustedAccount.mutation,
{ variables }
);
Результат:
interface IOutput {
addTrustedAccount: {
bank_account: {
created_at: <unknown>; // Дата создания
data: {
account_number: <string>; // Номер банковского счета
bank_name: <string>; // Название банка
card_number?: <null | string>; // Номер карты
currency: <string>; // Валюта счета
details: {
bik: <string>; // БИК банка
corr: <string>; // Корреспондентский счет
kpp: <string>; // КПП банка
};
};
is_default: <boolean>; // Флаг основного метода платежа, который отображается в документах
method_id: <string>; // Идентификатор метода оплаты
method_type: <string>; // Тип метода оплаты
updated_at: <unknown>; // Дата обновления
username: <string>; // Имя пользователя, к которому привязан метод оплаты
};
braname: <string>; // Уникальное имя кооперативного участка
city: <string>; // Город
coopname: <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>; // Краткое название организации
trusted: <{
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>; // Имя аккаунта
}[]>; // Доверенные аккаунты
Требуемые роли: chairman, member.
trustee: {
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>; // Имя аккаунта
};
type: <string>; // Тип организации
};
}
Удалить доверенное лицо¶
🛠️ SDK: Mutations.Branches.DeleteTrustedAccount | Mutation.deleteTrustedAccount
Удалить доверенное лицо кооперативного участка Требуемые роли: chairman.
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Branches.DeleteTrustedAccount.IInput = {
data: {
braname: <string>; // Имя аккаунта кооперативного участка
coopname: <string>; // Имя аккаунта кооператива
trusted: <string>; // Имя аккаунта доверонного лица, у которого отзывается право подписи за председателя кооперативного участка
};
};
const { [Mutations.Branches.DeleteTrustedAccount.name]: result } = await client.Mutation(
Mutations.Branches.DeleteTrustedAccount.mutation,
{ variables }
);
Результат:
interface IOutput {
deleteTrustedAccount: {
bank_account: {
created_at: <unknown>; // Дата создания
data: {
account_number: <string>; // Номер банковского счета
bank_name: <string>; // Название банка
card_number?: <null | string>; // Номер карты
currency: <string>; // Валюта счета
details: {
bik: <string>; // БИК банка
corr: <string>; // Корреспондентский счет
kpp: <string>; // КПП банка
};
};
is_default: <boolean>; // Флаг основного метода платежа, который отображается в документах
method_id: <string>; // Идентификатор метода оплаты
method_type: <string>; // Тип метода оплаты
updated_at: <unknown>; // Дата обновления
username: <string>; // Имя пользователя, к которому привязан метод оплаты
};
braname: <string>; // Уникальное имя кооперативного участка
city: <string>; // Город
coopname: <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>; // Краткое название организации
trusted: <{
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>; // Имя аккаунта
}[]>; // Доверенные аккаунты
Требуемые роли: chairman, member.
trustee: {
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>; // Имя аккаунта
};
type: <string>; // Тип организации
};
}
Часть шагов (голос по решению совета, исполнение ряда решений) выполняется подписью и отправкой транзакции в блокчейн через Client.Blockchain / класс Blockchain в пакете @coopenomics/sdk, а не отдельной мутацией GraphQL; см. 🛠️ Classes.Blockchain и 🛠️ Classes.Client.