enum AccountTier { basic, verified } enum LimitPeriod { day, month } class VisibleLimit { const VisibleLimit({ required this.period, required this.currency, required this.basicMinor, required this.verifiedMinor, required this.currentMinor, required this.remainingMinor, required this.usedMinor, required this.reservedMinor, }); final LimitPeriod period; final String currency; final int basicMinor; final int verifiedMinor; final int currentMinor; final int remainingMinor; final int usedMinor; final int reservedMinor; /// Presentation only: remaining capacity and payment authorization stay server-owned. double get occupiedFraction => currentMinor <= 0 ? 0 : ((usedMinor + reservedMinor) / currentMinor).clamp(0.0, 1.0); } class Limits { Limits({ required this.tier, required List rows, required this.simulated, this.profileRef, List entries = const [], }) : rows = List.unmodifiable(rows), entries = List.unmodifiable(entries); final AccountTier tier; final List rows; final bool simulated; final String? profileRef; final List entries; } /// Authoritative policy amounts in major units. Keep decimal strings intact, /// including currencies whose precision differs from fiat's common two digits. class PolicyLimit { const PolicyLimit({ required this.operation, required this.period, required this.currency, required this.cap, required this.remaining, required this.used, required this.reserved, }); final String operation, period, currency, cap, remaining, used, reserved; }