User Stories Completed: - US-001: Eliminare SolduriCompactCard de pe Desktop - US-002: Eliminare Icoane din Header-ul CollapsibleCard - US-003: Reorganizare TreasuryDualCard - Text Înainte de Grafice - US-004: Reorganizare ClientiBalanceCard - Text Înainte de Grafice - US-005: Reorganizare FurnizoriBalanceCard - Text Înainte de Grafice - US-006: Grafice Colapsabile în TreasuryDualCard - US-007: Grafice Colapsabile în ClientiBalanceCard - US-008: Grafice Colapsabile în FurnizoriBalanceCard - US-009: Grafice Colapsabile în CashFlowMetricCard Additional Improvements: - Add cache metadata display (CacheFooter component) for all dashboard cards - Add @cached decorators to get_monthly_flows and get_indicators_with_sparklines - Fix financial indicators calculations and sparkline sync - Add state reset on company change to prevent stale data - New shared components: CacheFooter.vue, authRedirect.js - Enhanced FinancialIndicatorsCard with sparklines and period selection Squashed from branch: ralph/dashboard-desktop-cleanup (11 commits) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.1 KiB
3.1 KiB
Claude Rules: Financial Indicators
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):
-- 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
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:
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:
@staticmethod
@cached(cache_type='fin_indicator_name', key_params=['company_id', 'luna', 'an'])
async def get_indicator(...):
...
NU folosi
- ❌
vbalanta_parteneripentru calcule agregate (doar pentru rapoarte pe parteneri) - ❌
SOLDDEB/SOLDCREDpentru Clasa 6/7 (conturile se închid lunar, sold=0) - ❌ Hardcodare valori TVA (19%, 9%) în formule