8e64f65cac
Task 3.1 — SalesEarningsService, денежное ядро портала продаж. Доход считается по СНИМКУ тарифа клиента (assignment.tariff_kind/params), не по live-тарифу менеджера. - percent_oborot: оборот периода × ставка. - fix_per_client: reward если накопленные пополнения (all-time) ≥ порога, иначе 0. - topup_step: Σ по месяцам периода пополнений месяца × ставка ступени по сроку обслуживания (tenure = diffInMonths(assigned_at→месяц)+1); вне таблицы → 0. - forManager: оклад × число месяцев + Σ по клиентам (round 2). - perClient: детализация для экрана «Мой доход». Переиспользует SalesMetricsService (целые копейки, полуоткрытые интервалы) и SalesPeriodResolver. Тесты 12/12 (заморозка времени на середину месяца против флейков границ + партиций balance_transactions). Larastan 0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>