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

Платежи

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

платежи пайщика

При создании заявления на возврат паевого взноса на листе платежей появляется запись со статусом "ожидает обработки". Статус записи изменится на "завершено", когда платеж будет фактически оплачен кассиром. В оплату кассиру платеж поступит после принятия решения советом.

Дополнительную информацию по реквизитам, на которые будет произведена оплата кассиром, можно получить, развернув строку платежа:

платежи пайщика

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

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

Список платежей

🛠️ SDK: Queries.Gateway.GetPayments | Query.getPayments

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

data.username

совпадает с

username

текущего пользователя.

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

const variables: Queries.Gateway.GetPayments.IInput = {
  data?: {
    coopname?: <null | string>; // Название кооператива
    direction?: <null | PaymentDirection>; // Направление платежа
    hash?: <null | string>; // Хэш платежа
    provider?: <null | string>; // Провайдер платежа
    status?: <null | PaymentStatus>; // Статус платежа
    type?: <null | PaymentType>; // Тип платежа
    username?: <null | string>; // Имя пользователя
  };
  options?: {
    limit: <number>; // Количество элементов на странице
    page: <number>; // Номер страницы
    sortBy?: <null | string>; // Ключ сортировки (например, "name")
    sortOrder: <string>; // Направление сортировки ("ASC" или "DESC")
  };
};

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

Результат:

interface IOutput {
  getPayments: {
    currentPage: <number>; // Текущая страница
    items: <{
        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; } | { ...; }) & {}>; // Сертификат пользователя, создавшего платеж
      }[]>; // Элементы текущей страницы
    totalCount: <number>; // Общее количество элементов
    totalPages: <number>; // Общее количество страниц
  };
}

Изменить статус платежа

🛠️ SDK: Mutations.Gateway.SetPaymentStatus | Mutation.setPaymentStatus

Управление статусом платежа осущствляется мутацией setPaymentStatus. При переходе платежа в статус PAID вызывается эффект в блокчейне, который завершает операцию автоматическим переводом платежа в статус COMPLETED. При установке статуса REFUNDED запускается процесс отмены платежа в блокчейне. Остальные статусы не приводят к эффектам в блокчейне. Требуемые роли: chairman, member.

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

const variables: Mutations.Gateway.SetPaymentStatus.IInput = {
  data: {
    id: <string>; // Идентификатор платежа, для которого устанавливается статус
    status: <PaymentStatus>; // Новый статус платежа
  };
};

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

Результат:

interface IOutput {
  setPaymentStatus: <ModelTypes["GatewayPayment"]>;
}

Создать платёж (депозит)

🛠️ SDK: Mutations.Gateway.CreateDepositPayment | Mutation.createDepositPayment

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

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

const variables: Mutations.Gateway.CreateDepositPayment.IInput = {
  data: {
    quantity: <number>; // Сумма взноса
    symbol: <string>; // Символ валюты
    username: <string>; // Имя аккаунта пользователя
  };
};

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

Результат:

interface IOutput {
  createDepositPayment: {
    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; } | { ...; }) & {}>; // Сертификат пользователя, создавшего платеж
  };
}

Создать начальный платёж

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

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

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

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

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

Результат:

interface IOutput {
  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; } | { ...; }) & {}>; // Сертификат пользователя, создавшего платеж
  };
}