Модель финансовой истины
Единый источник истины о том, что означает каждый финансовый показатель в
TSync Intelligence. Каждая метрика, которую слой Intelligence
предоставляет через tsync_finance(), имеет здесь ровно одно определение, чтобы все
продвинутые модули (Динамическая оценка, Валютная экспозиция, KPI) считали на одной
основе, а результаты были воспроизводимы и проверяемы.
Область. Этот документ определяет методологию. Фаза 1 поставляет базовые определения ниже (реализованы в
Tsync_finance_service). Пункты с пометкой [Фаза 2] формально определены здесь, но их полный расчёт отложен.
0. Соглашения
- Базовая валюта —
tsync_fx()->base()(учётная база, напр.RON), из опцииtsync_acc_base_currency. Все агрегаты выражаются в базе. - Учётный курс —
tsync_fx()->rate(CUR, date): курсCUR→база на дату, изTsync_currency. Правило даты курса: Румыния использует курс BNR за предыдущий рабочий день; Молдова — курс того же дня. Базовая валюта по определению имеет курс1.0. - Пересчёт — всегда через базу:
convert(amount, from, to) = amount × rate(from) ÷ rate(to). - Округление — денежные агрегаты округляются до 2 знаков; удельные затраты и значения позиций в снимках хранят внутри 4 знака.
- Версионирование — каждая строка метрики несёт
calc_version+calculated_at(увеличиваются при каждом пересчёте), так что устаревшее значение можно обнаружить. Изменение определения здесь — это рост версии методологии (см. §8).
1. Оценка запасов
$$\text{InventoryValue} = \sum_{\text{stock rows}} (,qty \times avg_cost,)$$
- Источник:
tsync_stock— каноническая колонка остаткаqty(никогда неqty_on_hand), удельная себестоимостьavg_cost. - Метод себестоимости: AVCO (скользящее средневзвешенное) —
avg_costподдерживается путём складских проводок при каждом приёме. tsync_finance()->getInventoryValue(). Уже в базе (запасы оцениваются в базе).
2. Дебиторская задолженность
$$\text{Receivables} = \sum_{\text{open customer invoices}} (,total - \text{payments},)$$
- Открытые = статус счёта ∈ {
unpaid(1),partially_paid(3),overdue(4) }. Оплаченные (2) и отменённые (5) исключаются. total— брутто-сумма счёта;payments— сумма зафиксированных по нему оплат.tsync_finance()->getReceivables(). Счета не в базе: см. §6.
3. Кредиторская задолженность
$$\text{Payables} = \sum_{\text{open supplier invoices}} (,total - \text{payments},)$$
- Открытые = статус счёта поставщика не из { оплачен, отменён }.
tsync_finance()->getPayables().
4. Денежный остаток (прокси операционных денег)
$$\text{Cash} = \sum \text{customer payments} - \sum \text{supplier payments} - \sum \text{expenses}$$
- Прокси на основе движений, а не сверенный банковский остаток. Настоящая банковская сверка / закрытие периода — [Фаза 2].
tsync_finance()->getCashBalance().
5. Валютная экспозиция
$$\text{Exposure} = \sum_{\substack{\text{open receivables}\ \text{cur} \neq \text{base}}} \text{baseValue(open amount)}$$
- Значение в базовой валюте открытой дебиторки не в базовой валюте — сумма под
риском валютных колебаний.
tsync_finance()->getCurrencyExposure(). - Базовый показатель: измеряет экспозицию, а не реализованную/нереализованную прибыль/убыток.
6. Методология валютной прибыли / убытка [расчёт Фазы 2]
Формально: для позиции в иностранной валюте, учтённой по курсу $r_0$ на дату $d_0$ и оценённой/расчётной по курсу $r_1$ на дату $d_1$,
$$\text{FX gain/loss} = \text{amount}_{\text{cur}} \times (r_1 - r_0)$$
- Нереализованная (открытые позиции): $r_1$ = курс на отчётную дату.
- Реализованная (при расчёте): $r_1$ = курс на дату расчёта.
- Правило: доходы/расходы и активы/обязательства учитываются по историческому курсу ($r_0$) при признании; переоценка использует текущий курс ($r_1$); разница — это валютная прибыль/убыток. Фаза 1 фиксирует экспозицию (§5) и курсы (§0); проведённая строка прибыли/убытка — это Фаза 2.
7. Операционная прибыль
База Фазы 1 — tsync_finance()->getOperationalProfit($days):
$$\text{OpProfit}{\text{baseline}} = \text{revenue}{\text{window}} - \text{expenses}_{\text{window}}$$
[Фаза 2] истинная операционная прибыль — формально:
$$\text{OpProfit} = \text{revenue} - \text{COGS} - \text{operating expenses} \pm \text{FX gain/loss} - \text{accruals/deferrals}$$
где COGS берётся из AVCO в момент продажи (не себестоимость на конец периода), валютная прибыль/убыток по §6, начисления/отложения по дате признания. Операционные затраты = COGS + операционные расходы (без финансирования и налогов). База намеренно опускает COGS, валютную прибыль/убыток и начисления — не считайте её аудированной прибылью.
8. Версионирование методологии и воспроизводимость
- Каждая метрика хранит
calc_version(счётчик пересчётов данных) и создаётся под версией методологии (версией этого документа). Изменение любой формулы здесь увеличивает версию методологии; снимки фиксируют действующую методологию, чтобы историческое значение всегда можно было воспроизвести из тех же входных данных. - Контракт воспроизводимости: один и тот же набор данных + та же версия методологии должны давать одни и те же числа (основа режима аудита/исследования).
9. Дорожная карта Фазы 2 (пока не обязательна)
Операционная прибыль на основе COGS, проведённая валютная прибыль/убыток, банковская сверка / закрытие периода, начисления/отложения, консолидация по нескольким компаниям и сценарии переоценки по историческому курсу против текущего.
Реализовано в application/libraries/Tsync_finance_service.php (база) и
Tsync_fx_service.php (курсы). Проверяется tests/sim/intelligence_finance_snapshot_sim.php
и tests/fx_service_test.php.