syntax = "proto3"; package common.payment.v1; option go_package = "github.com/tech/sendico/pkg/proto/common/payment/v1;paymentv1"; // CardNetwork identifies a card payment network (scheme). enum CardNetwork { CARD_NETWORK_UNSPECIFIED = 0; CARD_NETWORK_VISA = 1; CARD_NETWORK_MASTERCARD = 2; CARD_NETWORK_MIR = 3; CARD_NETWORK_AMEX = 4; CARD_NETWORK_UNIONPAY = 5; CARD_NETWORK_JCB = 6; CARD_NETWORK_DISCOVER = 7; } // CardFundingType classifies the funding source behind a card. enum CardFundingType { CARD_FUNDING_UNSPECIFIED = 0; CARD_FUNDING_DEBIT = 1; CARD_FUNDING_CREDIT = 2; CARD_FUNDING_PREPAID = 3; } // RawCardData carries PCI-scope card credentials for tokenisation or // direct processing. message RawCardData { string pan = 1; uint32 exp_month = 2; // 1–12 uint32 exp_year = 3; // YYYY string cvv = 4; // optional; often omitted for payouts } // CardMetadata holds non-sensitive display and routing hints derived from // card details. message CardMetadata { string masked_pan = 1; // e.g. 411111******1111 CardNetwork network = 2; // Visa/Mastercard/Mir/... CardFundingType funding = 3; // debit/credit/prepaid (if known) string issuing_country = 4; // ISO 3166-1 alpha-2 (if known) string issuer_name = 5; // display only (if known) } // CardDetails provides card credentials for a payment operation, either // as inline raw data or a reference to a stored payment method. message CardDetails { string id = 1; oneof source { RawCardData raw = 2; string payment_method_id = 3; } string cardholder_name = 4; string cardholder_surname = 5; string billing_country = 6; // ISO 3166-1 alpha-2, if you need it per operation }