5 августа 2026: исправление отображения начислений, когда по заявке есть возврат оплаты.

Симптом

В карточке зарплаты сотрудника одно начисление по заявке выглядело как две (или больше) строки с долями по разным оплатам — хотя в базе сумма начисления одна, а net оплат уже уменьшен возвратом.

Типичный сценарий:

  1. По заявке внесли оплату (например, 3000 ₽).
  2. Добавили ещё одну оплату и сделали по ней полный возврат.
  3. В /salary начисление дробилось и на «живую», и на полностью возвращённую оплату.

Итог суммы по строкам мог совпадать с начислением в БД, но визуально казалось, что зарплата «задвоилась» или размазана по отменённому платежу.

Причина

Разбивка начислений по оплатам в дашборде ЗП брала все платежи со статусом captured и отфильтровывала только строки с kind = refund.
Исходная оплата после возврата остаётся captured (возврат — отдельная запись), поэтому она продолжала участвовать в пропорции.

Расчёт суммы начисления в SalaryService уже учитывал возвраты (net), а отображение — нет.

Исправление

Перед разбивкой:

Файл: app/services/salary_dashboard_service.py.

Что проверить

  1. Заявка с оплатой + полный возврат другой оплаты → в карточке сотрудника одна доля на «живую» оплату.
  2. Сумма строк по заявке = amount_cents начисления в БД.
  3. Повторное закрытие / смена мастера без лишнего пересчёта — как в предыдущем посте.

Связанные фиксы зарплаты (тот же день)

Связанный UI-баг: двойная модалка оплаты из /all_orders

При закрытии заявки из реестра открывалась вкладка с open_payment_modal=1. После внесения оплаты страница перезагружалась с тем же флагом в URL — модалка просила сумму снова.

Исправление (templates/order_detail.html): флаг сразу снимается из URL; модалка не открывается при долге ≤ 0; после оплаты reload идёт на чистый URL; из потока all_orders после оплаты включается выбор печати, как при закрытии с карточки.