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

Реестр пайщиков

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

модуль голосования

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

модуль голосования

Сохранение данных для глубокой сверки

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

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

модуль голосования

Добавление пайщика

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

модуль голосования

Пайщик уже должен быть пайщиком!

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

Для того, чтобы добавить пайщика, необходимо ввести его email и указать тип аккаунта. После указания типа аккаунта будет показана форма данных, аналогичная регистрационной, но с некоторыми дополнительными полями:

модуль голосования

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

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

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

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

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

Кандидаты на вступление (candidates)

Query.candidates

Селектор запроса и типы входа — в src/queries/registration/getCandidates.ts (модуль Queries.Registration в рантайме SDK). В сгенерированной документации TypeDoc этот запрос может не иметь отдельной страницы модуля — ориентируйтесь на поле candidates в GraphQL и типы CandidateFilterInput, PaginationInput.

Поиск по приватным данным аккаунтов

🛠️ SDK: Queries.Accounts.SearchPrivateAccounts | Query.searchPrivateAccounts

Поиск приватных данных аккаунтов по запросу. Поиск осуществляется по полям ФИО, ИНН, ОГРН, наименованию организации и другим приватным данным. Требуемые роли: chairman, member.

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

const variables: Queries.Accounts.SearchPrivateAccounts.IInput = {
  data: {
    query: <string>; // Поисковый запрос для поиска приватных аккаунтов
  };
};

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

Результат:

interface IOutput {
  searchPrivateAccounts: <{
      data: <unknown>; // Данные найденного аккаунта
      highlightedFields?: <null | string[]>; // Поля, в которых найдены совпадения
      score?: <null | number>; // Оценка релевантности результата
      type: <string>; // Тип аккаунта
    }[]>; // Поиск приватных данных аккаунтов по запросу. Поиск осуществляется по полям ФИО, ИНН, ОГРН, наименованию организации и другим приватным данным.

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

Список аккаунтов

🛠️ SDK: Queries.Accounts.GetAccounts | Query.getAccounts

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

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

const variables: Queries.Accounts.GetAccounts.IInput = {
  data?: {
    role?: <null | string>;
  };
  options?: {
    limit: <number>; // Количество элементов на странице
    page: <number>; // Номер страницы
    sortBy?: <null | string>; // Ключ сортировки (например, "name")
    sortOrder: <string>; // Направление сортировки ("ASC" или "DESC")
  };
};

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

Результат:

interface IOutput {
  getAccounts: {
    currentPage: <number>; // Текущая страница
    items: <{
        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: <...>; // Актор
                      permission: <...>; // Разрешение
                    };
                    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>; // Имя аккаунта кооператива
      }[]>; // Элементы текущей страницы
    totalCount: <number>; // Общее количество элементов
    totalPages: <number>; // Общее количество страниц
  };
}

Добавить пайщика

🛠️ 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: Mutations.Accounts.UpdateAccount | Mutation.updateAccount

Обновить аккаунт в системе провайдера. Обновление аккаунта пользователя производится по username. Мутация позволяет изменить приватные данные пользователя, а также, адрес электронной почты в MONO. Использовать мутацию может только председатель совета. Требуемые роли: chairman.

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

const variables: Mutations.Accounts.UpdateAccount.IInput = {
  data: {
    entrepreneur_data?: <null | {
        birthdate: <string>; // Дата рождения
        city: <string>; // Город
        country: <Russia>; // Страна
        details: {
          inn: <string>; // ИНН
          ogrn: <string>; // ОГРН
        };
        email: <string>; // Электронная почта
        first_name: <string>; // Имя
        full_address: <string>; // Полный адрес
        last_name: <string>; // Фамилия
        middle_name: <string>; // Отчество
        phone: <string>; // Телефон
        username: <string>; // Имя пользователя
      }>; // Данные индивидуального предпринимателя
    individual_data?: <null | {
        birthdate: <string>; // Дата рождения
        email: <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>; // Телефон
        username: <string>; // Имя пользователя
      }>; // Данные физического лица
    organization_data?: <null | {
        city: <string>; // Город
        country: <string>; // Страна
        details: {
          inn: <string>;
          kpp: <string>;
          ogrn: <string>;
        };
        email: <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: <string>; // Тип организации
        username: <string>; // Имя пользователя
      }>; // Данные организации
    public_key?: <null | string>; // Публичный ключ
    referer?: <null | string>; // Имя аккаунта реферера
    username: <string>; // Имя пользователя
  };
};

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

Результат:

interface IOutput {
  updateAccount: {
    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.GenerateParticipantApplication | Mutation.generateParticipantApplication

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

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

const variables: Mutations.Participants.GenerateParticipantApplication.IInput = {
  data: {
    block_num?: <null | number>; // Номер блока, на котором был создан документ
    braname: <string>; // Имя аккаунта кооперативного участка
    coopname: <string>; // Название кооператива, связанное с документом
    created_at?: <null | string>; // Дата и время создания документа
    generator?: <null | string>; // Имя генератора, использованного для создания документа
    lang?: <null | string>; // Язык документа
    links?: <null | string[]>; // Ссылки, связанные с документом
    signature?: <null | string>; // Изображение собственноручной подписи (base-64)
    skip_save: <boolean>; // Флаг пропуска сохранения документа (используется для предварительной генерации и демонстрации пользователю)
    timezone?: <null | string>; // Часовой пояс, в котором был создан документ
    title?: <null | string>; // Название документа
    username: <string>; // Имя пользователя, создавшего документ
    version?: <null | string>; // Версия генератора, использованного для создания документа
  };
  options?: {
    lang?: <null | string>; // Язык документа
    skip_save?: <null | boolean>; // Пропустить сохранение
  };
};

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

Результат:

interface IOutput {
  generateParticipantApplication: {
    binary: <string>; // Бинарное содержимое документа (base64)
    full_title: <string>; // Полное название документа
    hash: <string>; // Хэш документа
    html: <string>; // HTML содержимое документа
    meta: <unknown>; // Метаданные документа
  };
}

Начальный платёж (в контексте регистрации пайщика)

🛠️ SDK: Mutations.Participants.CreateInitialPayment | Mutation.createInitialPayment

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

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

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

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