0426735ea6
Task 4.1 — SalesPayoutService + SalesPayoutController. - record: append-only запись в sales_payouts + письмо менеджеру (SalesPayoutRecordedMail). Журнал неизменяем (DB-триггер sales_payouts_no_mutate — покрыто тестами на UPDATE/DELETE → QueryException). - remaining (head): по каждому менеджеру за период — начислено (forManager), выплачено за период (по дате paid_on), выплачено всего, остаток = начислено − выплачено(период); переплата не зажимается в 0. - index: менеджер видит только свои выплаты, начальник — все. - POST /payouts и /payouts/remaining — только head; валидация суммы/даты/ менеджера. Тесты 15/15 (вкл. append-only через savepoint), sales-набор 145/145, Larastan 0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>