Financial Truth Model (Modelul de adevăr financiar)

Sursa unică de adevăr pentru ce înseamnă fiecare număr financiar din TSync Intelligence. Fiecare indicator expus de stratul Intelligence prin tsync_finance() are exact o definiție aici, astfel încât toate modulele avansate (Dynamic Valuation, FX Exposure, KPI) calculează pe aceeași bază, iar rezultatele sunt reproductibile și auditabile.

Scop. Documentul definește metodologia. Faza 1 livrează definițiile de bază de mai jos (implementate în Tsync_finance_service). Elementele marcate [Faza 2] sunt definite formal aici, dar calculul complet este amânat.


0. Convenții

  • Moneda de bazătsync_fx()->base() (baza contabilă, ex. RON), din opțiunea tsync_acc_base_currency. Toate agregatele sunt exprimate în bază.
  • Curs contabiltsync_fx()->rate(CUR, data): cursul CUR→bază la o dată, din Tsync_currency. Regula datei cursului: România folosește cursul BNR din ziua lucrătoare precedentă; Moldova folosește cursul din aceeași zi. Moneda de bază are cursul 1.0 prin definiție.
  • Conversie — întotdeauna prin bază: convert(sumă, din, în) = sumă × rate(din) ÷ rate(în).
  • Rotunjire — agregatele monetare la 2 zecimale; costurile unitare și valorile din snapshot păstrează 4 zecimale intern.
  • Versionare — fiecare rând de metrică are calc_version + calculated_at (incrementat la fiecare recalcul), deci o valoare învechită este detectabilă. O schimbare a unei definiții de aici = incrementare a versiunii de metodologie (§8).

1. Valorizarea stocului

$$\text{ValoareStoc} = \sum_{\text{rânduri stoc}} (,qty \times avg_cost,)$$

  • Sursă: tsync_stock — coloana canonică de stoc qty (niciodată qty_on_hand), cost unitar avg_cost.
  • Metodă de cost: AVCO (medie ponderată mobilă) — avg_cost este menținut de calea de postare din depozit la fiecare recepție.
  • tsync_finance()->getInventoryValue(). Deja în bază.

2. Creanțe

$$\text{Creanțe} = \sum_{\text{facturi client deschise}} (,total - \text{încasări},)$$

  • Deschisă = status factură ∈ { neplătită (1), parțial (3), restantă (4) }. Plătită (2) și anulată (5) sunt excluse.
  • tsync_finance()->getReceivables(). Facturi non-bază: vezi §6.

3. Datorii (furnizori)

$$\text{Datorii} = \sum_{\text{facturi furnizor deschise}} (,total - \text{plăți},)$$

  • Deschisă = status factură furnizor ∉ { plătită, anulată }.
  • tsync_finance()->getPayables().

4. Sold de numerar (proxy de cash operațional)

$$\text{Cash} = \sum \text{încasări clienți} - \sum \text{plăți furnizori} - \sum \text{cheltuieli}$$

  • Un proxy bazat pe mișcări, nu un sold bancar reconciliat. Reconcilierea bancară / închiderea de perioadă reală este [Faza 2].
  • tsync_finance()->getCashBalance().

5. Expunere valutară

$$\text{Expunere} = \sum_{\substack{\text{creanțe deschise}\ \text{cur} \neq \text{bază}}} \text{valoareBază(suma deschisă)}$$

  • Valoarea în bază a creanțelor deschise, în monedă non-bază — suma expusă la mișcări FX. tsync_finance()->getCurrencyExposure().
  • Indicator de bază: măsoară expunerea, nu câștigul/pierderea realizat(ă).

6. Metodologia câștig / pierdere din FX [calcul Faza 2]

Formal: pentru un element în valută înregistrat la cursul $r_0$ la data $d_0$ și evaluat/decontat la cursul $r_1$ la data $d_1$,

$$\text{Câștig/pierdere FX} = \text{sumă}_{\text{cur}} \times (r_1 - r_0)$$

  • Nerealizat (elemente deschise): $r_1$ = cursul la data raportării.
  • Realizat (la decontare): $r_1$ = cursul la data decontării.
  • Regula: veniturile/cheltuielile și activele/datoriile se înregistrează la cursul istoric ($r_0$) la recunoaștere; reevaluarea folosește cursul curent ($r_1$); diferența este câștigul/pierderea din FX. Faza 1 înregistrează expunerea (§5) și cursurile (§0); linia de câștig/pierdere contabilizată e Faza 2.

7. Profit operațional

Bază Faza 1tsync_finance()->getOperationalProfit($zile):

$$\text{ProfitOp}{\text{bază}} = \text{venituri}{\text{fereastră}} - \text{cheltuieli}_{\text{fereastră}}$$

[Faza 2] profit operațional real — formal:

$$\text{ProfitOp} = \text{venituri} - \text{COGS} - \text{cheltuieli de exploatare} \pm \text{câștig/pierdere FX} - \text{angajamente/amânări}$$

unde COGS se ia din AVCO la momentul vânzării (nu costul de la sfârșit de perioadă), câștigul/pierderea FX conform §6, iar angajamentele/amânările după data recunoașterii. Costul operațional = COGS + cheltuieli de exploatare (exclude finanțarea și impozitul). Baza omite intenționat COGS, FX și angajamentele — nu o trata ca profit auditat.

8. Versionarea metodologiei & reproductibilitate

  • Fiecare metrică stochează calc_version (nr. recalculări) și este produsă sub o versiune de metodologie (versiunea acestui document). O schimbare a oricărei formule de aici incrementează versiunea de metodologie; snapshot-urile rețin metodologia în vigoare, deci o cifră istorică poate fi reprodusă din aceleași date.
  • Contract de reproductibilitate: același set de date + aceeași versiune de metodologie trebuie să producă aceleași numere (baza pentru modul audit/research).

9. Foaie de parcurs Faza 2 (încă neobligatorie)

Profit operațional bazat pe COGS, câștig/pierdere FX contabilizat, reconciliere bancară / închidere de perioadă, angajamente/amânări, consolidare multi-company și scenarii de reevaluare curs istoric vs curs curent.


Implementat de application/libraries/Tsync_finance_service.php (bază) și Tsync_fx_service.php (cursuri). Validat de tests/sim/intelligence_finance_snapshot_sim.php și tests/fx_service_test.php.