---
name: billing-audit
description: Аудит денежной корректности биллинг-кода Лидерры — money-инварианты при правке/ревью списаний, тарифов и баланса. Используй при «проверь списание», «аудит биллинга», «не теряются ли копейки», «идемпотентно ли списание», «корректна ли тарифная ступень», «что значит дрейф CsvReconcile», «провенанс charge_source». НЕ для моделирования процесса (process-modeling), поиска узких мест (process-analysis), security-аудита (D3), РСБУ/налогов (ru-tax-accounting), метрик выручки (product-management).
---

# Billing Audit — аудит денежной корректности биллинга Лидерры

Проектный скил раздела C6 карты «Финансы — биллинг и тарификация». Проверяет
**денежные инварианты** биллинг-подсистемы при правке или ревью кода. Объект —
корректность *начисления* (не процесс, не безопасность, не учёт/налоги).

## Когда использовать

- Правка/ревью кода в `app/app/Services/Billing/**`, `app/app/Jobs/Supplier/CsvReconcileJob.php`,
  моделей `PricingTier`/`LeadCharge`, контроллеров биллинга.
- Вопрос «безопасно ли это денежно?» по списанию, тарифу, балансу, сверке.

## Процедура аудита (5 инвариантов)

Полный чек-лист с проверками и ссылками на файлы — `references/invariants.md`.

1. **Сохранение суммы** — все денежные операции через `bcmath` (bcadd/bcsub/bcmul/bcdiv,
   scale фиксирован), никаких float; prepaid→₽ конвертация без потери копеек.
2. **Идемпотентность списания** — один лид = одно списание; повтор/ретрай джоба
   не дублирует начисление (проверить уникальный ключ / advisory-lock / upsert).
3. **Корректность тарифной ступени** — `PricingTierResolver` выбирает верную из 7
   ступеней по объёму; границы ступеней (включительно/исключительно) однозначны.
4. **Дрейф сверки** — `CsvReconcileJob` порог >5%: что сравнивается, что значит дрейф,
   куда смотреть (рассинхрон поставки vs ошибка тарифа).
5. **Провенанс charge_source** — каждое списание имеет прослеживаемый источник
   (`charge_source`); ручные/авто/CSV-восстановленные различимы.

## Границы

- ≠ `process-modeling` #52 / `process-analysis` #53 — те про *поток/процесс*; billing-audit про *деньги в коде*.
- ≠ D3 audit-security (#39/#40) — те про *безопасность*; billing-audit про *денежную корректность*.
- ≠ `ru-tax-accounting` #63 — тот про *учёт/налоги* (выход биллинга → налоговая база); billing-audit про *начисление*.
- ≠ `product-management:metrics-review` #42 — тот про *метрики выручки*; billing-audit про *корректность*.

## Связано

- Reuse: Boost #10 (модели), Pest #18 (тесты инвариантов), Larastan #12 (bcmath/без float), Sentry #34 / Redis #35 (runtime/очередь).
- ADR-012 (граница finance-tooling C6/C7).
