damsel/proto/merch_stat.thrift

449 lines
13 KiB
Thrift
Raw Normal View History

/**
* Интерфейс сервиса статистики и связанные с ним определения предметной области, основанные на моделях домена.
*/
include "base.thrift"
include "domain.thrift"
include "geo_ip.thrift"
namespace java com.rbkmoney.damsel.merch_stat
namespace erlang merchstat
/**
* Информация о платеже.
* **/
struct StatPayment {
1 : required domain.InvoicePaymentID id
2 : required domain.InvoiceID invoice_id
3 : required domain.PartyID owner_id
4 : required domain.ShopID shop_id
5 : required base.Timestamp created_at
6 : required InvoicePaymentStatus status
7 : required domain.Amount amount
8 : required domain.Amount fee
9 : required string currency_symbolic_code
10: required Payer payer
12: optional base.Content context
13: optional geo_ip.LocationInfo location_info
14: required InvoicePaymentFlow flow
2018-05-22 12:41:55 +00:00
15: optional string short_id
16: optional bool make_recurrent
17: required domain.DataRevision domain_revision
18: optional domain.InvoiceCart cart
19: optional domain.AdditionalTransactionInfo additional_transaction_info
}
union Payer {
1: PaymentResourcePayer payment_resource
2: CustomerPayer customer
3: RecurrentPayer recurrent
}
struct RecurrentParentPayment {
1: required domain.InvoiceID invoice_id
2: required domain.InvoicePaymentID payment_id
}
struct RecurrentPayer {
1: required PaymentTool payment_tool
2: required RecurrentParentPayment recurrent_parent
3: optional string phone_number
4: optional string email
}
struct PaymentResourcePayer {
1: required PaymentTool payment_tool
2: optional domain.IPAddress ip_address
3: optional domain.Fingerprint fingerprint
4: optional string phone_number
5: optional string email
6: optional domain.PaymentSessionID session_id
}
struct CustomerPayer {
1: required domain.CustomerID customer_id
2: required PaymentTool payment_tool
3: optional string phone_number
4: optional string email
}
union InvoicePaymentFlow {
1: InvoicePaymentFlowInstant instant
2: InvoicePaymentFlowHold hold
}
struct InvoicePaymentFlowInstant {}
struct InvoicePaymentFlowHold {
1: required OnHoldExpiration on_hold_expiration
2: required base.Timestamp held_until
}
enum OnHoldExpiration {
cancel
capture
}
union OperationFailure {
1: OperationTimeout operation_timeout
2018-03-28 13:17:44 +00:00
2: domain.Failure failure
}
struct OperationTimeout {}
struct InvoicePaymentPending {}
struct InvoicePaymentProcessed { 1: optional base.Timestamp at }
struct InvoicePaymentCaptured { 1: optional base.Timestamp at }
struct InvoicePaymentCancelled { 1: optional base.Timestamp at }
struct InvoicePaymentRefunded { 1: optional base.Timestamp at }
struct InvoicePaymentFailed {
1: required OperationFailure failure
2: optional base.Timestamp at
}
union InvoicePaymentStatus {
1: InvoicePaymentPending pending
4: InvoicePaymentProcessed processed
2: InvoicePaymentCaptured captured
5: InvoicePaymentCancelled cancelled
6: InvoicePaymentRefunded refunded
3: InvoicePaymentFailed failed
}
union PaymentTool {
1: BankCard bank_card
2017-09-06 16:00:36 +00:00
2: PaymentTerminal payment_terminal
3: DigitalWallet digital_wallet
4: CryptoCurrency crypto_currency
5: MobileCommerce mobile_commerce
}
struct MobileCommerce {
1: required MobileOperator operator
2: required MobilePhone phone
}
enum MobileOperator {
mts = 1
beeline = 2
megafone = 3
tele2 = 4
yota = 5
}
/**
* Телефонный номер согласно (E.164 рекомендация ITU-T)
* +79114363738
* cc = 7 - код страны(1-3 цифры)
* ctn = 9114363738 - 10-ти значный номер абонента(макс 12)
*/
struct MobilePhone {
1: required string cc
2: required string ctn
}
struct BankCard {
1: required domain.Token token
2: required domain.BankCardPaymentSystem payment_system
3: required string bin
4: required string masked_pan
5: optional domain.BankCardTokenProvider token_provider
}
enum CryptoCurrency {
bitcoin
litecoin
bitcoin_cash
ripple
ethereum
zcash
}
2017-09-06 16:00:36 +00:00
struct PaymentTerminal {
1: required TerminalPaymentProvider terminal_type
}
enum TerminalPaymentProvider {
euroset
wechat
alipay
2017-09-06 16:00:36 +00:00
}
typedef string DigitalWalletID
struct DigitalWallet {
1: required DigitalWalletProvider provider
2: required DigitalWalletID id
}
enum DigitalWalletProvider {
qiwi
}
struct RussianBankAccount {
1: required string account
2: required string bank_name
3: required string bank_post_account
4: required string bank_bik
}
struct InternationalBankAccount {
1: optional string number
2: optional InternationalBankDetails bank
3: optional InternationalBankAccount correspondent_account
4: optional string iban // International Bank Account Number (ISO 13616)
5: optional string account_holder
}
struct InternationalBankDetails {
1: optional string bic // Business Identifier Code (ISO 9362)
2: optional domain.Residence country
3: optional string name
4: optional string address
5: optional string aba_rtn // ABA Routing Transit Number
}
/**
* Информация об инвойсе.
*/
struct StatInvoice {
1 : required domain.InvoiceID id
2 : required domain.PartyID owner_id
3 : required domain.ShopID shop_id
4 : required base.Timestamp created_at
5 : required InvoiceStatus status
6 : required string product
7 : optional string description
8 : required base.Timestamp due
9 : required domain.Amount amount
10: required string currency_symbolic_code
11: optional base.Content context
12: optional domain.InvoiceCart cart
}
struct EnrichedStatInvoice {
1: required StatInvoice invoice
2: required list<StatPayment> payments
3: required list<StatRefund> refunds
}
struct InvoiceUnpaid {}
struct InvoicePaid { 1: optional base.Timestamp at }
struct InvoiceCancelled {
1: required string details
2: optional base.Timestamp at
}
struct InvoiceFulfilled {
1: required string details
2: optional base.Timestamp at
}
union InvoiceStatus {
1: InvoiceUnpaid unpaid
2: InvoicePaid paid
3: InvoiceCancelled cancelled
4: InvoiceFulfilled fulfilled
}
/**
* Информация о клиенте. Уникальность клиента определяется по fingerprint.
*/
struct StatCustomer {
1: required domain.Fingerprint id
2: required base.Timestamp created_at
}
typedef base.ID PayoutID
/**
* Информация о выплате
*/
struct StatPayout {
1 : required PayoutID id
2 : required domain.PartyID party_id
3 : required domain.ShopID shop_id
4 : required base.Timestamp created_at
5 : required PayoutStatus status
6 : required domain.Amount amount
7 : required domain.Amount fee
8 : required string currency_symbolic_code
9 : required PayoutType type
10: optional PayoutSummary summary
}
enum OperationType {
payment
refund
}
struct PayoutSummaryItem {
1: required domain.Amount amount
2: required domain.Amount fee
3: required string currency_symbolic_code
4: required base.Timestamp from_time
5: required base.Timestamp to_time
6: required OperationType operation_type
7: required i32 count
}
typedef list<PayoutSummaryItem> PayoutSummary
union PayoutType {
1: PayoutCard bank_card
2: PayoutAccount bank_account
3: Wallet wallet
}
struct Wallet {
1: required domain.WalletID wallet_id
}
struct PayoutCard {
1: required BankCard card
}
union PayoutAccount {
1: RussianPayoutAccount russian_payout_account
2: InternationalPayoutAccount international_payout_account
}
struct RussianPayoutAccount {
1: required RussianBankAccount bank_account
2: required string inn
3: required string purpose
}
struct InternationalPayoutAccount {
1: required InternationalBankAccount bank_account
2: required string purpose
}
union PayoutStatus {
1: PayoutUnpaid unpaid
2: PayoutPaid paid
3: PayoutCancelled cancelled
4: PayoutConfirmed confirmed
}
struct PayoutUnpaid {}
struct PayoutPaid {}
struct PayoutCancelled { 1: required string details }
struct PayoutConfirmed {}
/**
* Информация о рефанде.
* **/
struct StatRefund {
1 : required domain.InvoicePaymentRefundID id
2 : required domain.InvoicePaymentID payment_id
3 : required domain.InvoiceID invoice_id
4 : required domain.PartyID owner_id
5 : required domain.ShopID shop_id
6 : required InvoicePaymentRefundStatus status
7 : required base.Timestamp created_at
8 : required domain.Amount amount
9 : required domain.Amount fee
10: required string currency_symbolic_code
11: optional string reason
12: optional domain.InvoiceCart cart
}
union InvoicePaymentRefundStatus {
1: InvoicePaymentRefundPending pending
2: InvoicePaymentRefundSucceeded succeeded
3: InvoicePaymentRefundFailed failed
}
struct InvoicePaymentRefundPending {}
struct InvoicePaymentRefundSucceeded {
1: required base.Timestamp at
}
struct InvoicePaymentRefundFailed {
1: required OperationFailure failure
2: required base.Timestamp at
}
typedef map<string, string> StatInfo
typedef base.InvalidRequest InvalidRequest
/**
* Данные запроса к сервису. Формат и функциональность запроса зависят от DSL.
* DSL содержит условия выборки, а также id мерчанта, по которому производится выборка.
* continuation_token - токен, который передается в случае обращения за следующим блоком данных, соответствующих dsl
*/
struct StatRequest {
1: required string dsl
2: optional string continuation_token
}
/**
* Данные ответа сервиса.
* data - данные, тип зависит от целевой функции.
* total_count - ожидаемое общее количество данных (т.е. размер всех данных результата, без ограничений по количеству)
* continuation_token - токен, сигнализирующий о том, что в ответе передана только часть данных, для получения следующей части
* нужно повторно обратиться к сервису, указав тот-же набор условий и continuation_token. Если токена нет, получена последняя часть данных.
*/
struct StatResponse {
1: required StatResponseData data
2: optional i32 total_count
3: optional string continuation_token
}
/**
* Возможные варианты возвращаемых данных
*/
union StatResponseData {
1: list<StatPayment> payments
2: list<StatInvoice> invoices
3: list<StatCustomer> customers
4: list<StatInfo> records
5: list<StatPayout> payouts
6: list<StatRefund> refunds
7: list<EnrichedStatInvoice> enriched_invoices
}
/**
* Ошибка обработки переданного токена, при получении такой ошибки клиент должен заново запросить все данные, соответсвующие dsl запросу
*/
exception BadToken {
1: string reason
}
service MerchantStatistics {
/**
* Возвращает набор данных о платежах
*/
StatResponse GetPayments(1: StatRequest req) throws (1: InvalidRequest ex1, 3: BadToken ex3)
/**
* Возвращает набор данных об инвойсах
*/
StatResponse GetInvoices(1: StatRequest req) throws (1: InvalidRequest ex1, 3: BadToken ex3)
/**
* Возвращает набор данных о покупателях
*/
StatResponse GetCustomers(1: StatRequest req) throws (1: InvalidRequest ex1, 3: BadToken ex3)
/**
* Возвращает набор данных о выплатах
*/
StatResponse GetPayouts(1: StatRequest req) throws (1: InvalidRequest ex1, 3: BadToken ex3)
/**
* Возвращает аггрегированные данные в виде набора записей, формат возвращаемых данных зависит от целевой функции, указанной в DSL.
*/
StatResponse GetStatistics(1: StatRequest req) throws (1: InvalidRequest ex1, 3: BadToken ex3)
}
service DarkMessiahStatistics {
/**
* Возвращает набор данных
*/
StatResponse GetByQuery(1: StatRequest req) throws (1: InvalidRequest ex1, 3: BadToken ex3)
}