cf60ae2967
timedelta.days is integer floor: 29 days 23 hours = 29, not 30. When a user bought extra devices on the same day as their subscription, they were charged for ~1 day instead of the full remaining period. Fix: math.ceil(total_seconds / 86400) rounds partial days UP. Applied to all 11 locations across 4 files: - app/handlers/subscription/devices.py (5 spots) - app/cabinet/routes/subscription_modules/devices.py (3 spots) - app/keyboards/inline.py (3 spots — display pricing) - app/utils/pricing_utils.py (1 spot — traffic prorated pricing)