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

Регистрация пайщика

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

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>; // Имя аккаунта кооператива
  };
}

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

Query.candidates

В 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.
}