syntax = "proto3"; package common.money.v1; option go_package = "github.com/tech/sendico/pkg/proto/common/money/v1;moneyv1"; // Decimal represents an exact decimal value encoded as a string to avoid // floating-point precision loss. message Decimal { // value is the decimal string representation (e.g. "123.45"). string value = 1; } // Money pairs a decimal amount with a currency code. message Money { // amount is the decimal string representation. string amount = 1; // currency is the ISO 4217 currency code (e.g. "USD", "EUR"). string currency = 2; } // RoundingMode specifies how to round monetary calculations. enum RoundingMode { // ROUNDING_MODE_UNSPECIFIED is the default zero value. ROUNDING_MODE_UNSPECIFIED = 0; // ROUND_HALF_EVEN rounds to the nearest even digit (banker's rounding). ROUND_HALF_EVEN = 1; // ROUND_HALF_UP rounds halves away from zero. ROUND_HALF_UP = 2; // ROUND_DOWN truncates towards zero. ROUND_DOWN = 3; } // CurrencyMeta describes the precision and rounding rules for a currency. message CurrencyMeta { // code is the ISO 4217 currency code. string code = 1; // decimals is the number of minor-unit digits (e.g. 2 for USD, 0 for JPY). uint32 decimals = 2; // rounding is the preferred rounding mode for this currency. RoundingMode rounding = 3; }