# Claude Rules: Financial Indicators
<!-- paths: backend/modules/reports/services/financial_indicators_service.py, backend/modules/reports/services/dashboard_service.py, backend/modules/reports/models/financial_indicators.py -->

## Surse de Date - OBLIGATORIU

### Preferință: VBAL (Balanța de Verificare)

**ÎNTOTDEAUNA** folosește tabelul `VBAL` pentru calculul indicatorilor financiari, NU `vbalanta_parteneri`.

| Indicator | Tabel | Conturi | Coloane |
|-----------|-------|---------|---------|
| Vânzări/Cifra Afaceri | VBAL | 70x | TOTCRED - TOTDEB(709) |
| Cheltuieli | VBAL | 6x | TOTDEB - TOTCRED(609) |
| Încasări clienți | VBAL | 4111, 461 | RULCRED (lunar), TOTCRED (YTD) |
| Plăți furnizori | VBAL | 401, 404, 462 | RULDEB (lunar), TOTDEB (YTD) |
| Solduri bilanțiere | VBAL | diverse | SOLDDEB, SOLDCRED |

### Excepție: ACT (Registru Jurnal)

Pentru **Achiziții YTD** se folosește tabelul `ACT` deoarece captează și achizițiile directe pe cheltuieli (6x = 4x):

```sql
-- Achiziții totale (stocuri + cheltuieli directe)
SELECT SUM(CASE WHEN (SCD LIKE '3%' OR SCD LIKE '6%')
                 AND (SCC LIKE '4%' OR SCC LIKE '46%')
           THEN SUMA ELSE 0 END)
FROM ACT WHERE STERS = 0
```

## Structura VBAL

```sql
SELECT
    cont,           -- Cont contabil (ex: '4111', '701')
    solddeb1,       -- Sold debitor la 1 ianuarie
    soldcred1,      -- Sold creditor la 1 ianuarie
    ruldeb,         -- Rulaj DEBIT luna curentă
    rulcred,        -- Rulaj CREDIT luna curentă
    totdeb,         -- Total DEBIT YTD (de la 1 ianuarie)
    totcred,        -- Total CREDIT YTD (de la 1 ianuarie)
    solddeb,        -- Sold final debitor
    soldcred        -- Sold final creditor
FROM {schema}.VBAL
WHERE AN = :an AND LUNA = :luna
```

### Când să folosești fiecare coloană:

| Nevoie | Coloană | Exemplu |
|--------|---------|---------|
| Valoare lunară | `RULDEB`, `RULCRED` | Încasări luna curentă |
| Valoare YTD | `TOTDEB`, `TOTCRED` | Cifra de Afaceri YTD |
| Sold curent | `SOLDDEB`, `SOLDCRED` | Sold clienți |
| Sold început an | `SOLDDEB1`, `SOLDCRED1` | Active la 1 ianuarie |

## TVA în Indicatori

### Cu TVA (fluxuri de numerar reale):
- ✅ Cash Flow (încasări/plăți)
- ✅ Solduri clienți/furnizori
- ✅ DSO, DPO (zile încasare/plată)

### Fără TVA (indicatori economici):
- ✅ Cifra de Afaceri (Clasa 7)
- ✅ Cheltuieli (Clasa 6)
- ✅ Profit Brut
- ✅ Achiziții (din ACT)

## Pattern-uri de Cod

### Query VBAL cu agregare pe conturi:

```python
query = f"""
    SELECT
        NVL(SUM(CASE WHEN CONT LIKE '70%' THEN TOTCRED ELSE 0 END), 0) -
        NVL(SUM(CASE WHEN CONT = '709' THEN TOTDEB ELSE 0 END), 0) as cifra_afaceri
    FROM {schema}.VBAL
    WHERE AN = :an AND LUNA = :luna
"""
```

### Cache decorator:

```python
@staticmethod
@cached(cache_type='fin_indicator_name', key_params=['company_id', 'luna', 'an'])
async def get_indicator(...):
    ...
```

## NU folosi

- ❌ `vbalanta_parteneri` pentru calcule agregate (doar pentru rapoarte pe parteneri)
- ❌ `SOLDDEB`/`SOLDCRED` pentru Clasa 6/7 (conturile se închid lunar, sold=0)
- ❌ Hardcodare valori TVA (19%, 9%) în formule
