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>
11 KiB
PRD: Dashboard Desktop Cleanup - Eliminare Duplicate și Reorganizare Layout
1. Introducere
Dashboard-ul desktop afișează în prezent carduri duplicate pentru Trezorerie, Clienți și Furnizori. Există SolduriCompactCard (în secțiunea desktop-solduri-section) și CollapsibleCard cu grafice (în secțiunea metrics-row). Scopul este eliminarea duplicatelor, păstrând doar CollapsibleCard-urile cu grafice, dar reorganizate astfel încât textul cu valorile să apară ÎNAINTE de grafice pentru vizibilitate mai bună.
2. Obiective
Obiectiv Principal
- Eliminarea cardurilor duplicate de pe dashboard-ul desktop, păstrând doar
CollapsibleCard-urile cu conținut reorganizat (text → grafice)
Obiective Secundare
- Îmbunătățirea vizibilității valorilor principale (afișate înaintea graficelor)
- Menținerea unui layout compact și informativ
- Păstrarea funcționalității mobile neschimbată
Metrici de Succes
- Zero carduri duplicate pe dashboard desktop
- Valorile principale vizibile fără scroll
- Același număr de informații disponibile ca înainte
3. User Stories
US-001: Eliminare SolduriCompactCard de pe Desktop
Ca utilizator desktop Vreau să văd doar un set de carduri pentru fiecare metric Pentru că duplicatele creează confuzie și ocupă spațiu inutil
Acceptance Criteria:
- Secțiunea
desktop-solduri-sectioneste eliminată dinDashboardView.vuepentru desktop - Rămân doar cele 4
CollapsibleCard-uri: Trezorerie, Cash Flow, Clienți, Furnizori - Layout-ul grid 2x2 din
metrics-rowrămâne neschimbat - npm run typecheck passes
- Verify in browser că pe desktop nu mai există duplicate
US-002: Eliminare Icoane din Header-ul CollapsibleCard
Ca utilizator Vreau un header curat, fără icoane/emoji-uri Pentru că vreau un design minimalist și profesional
Acceptance Criteria:
- Prop-ul
iconnu mai este transmis cătreCollapsibleCardînDashboardView.vue - Header-ul afișează doar: "Label Valoare ▼" (ex: "Trezorerie 125.500 RON ▼")
- npm run typecheck passes
- Verify in browser că header-urile nu au icoane
US-003: Reorganizare TreasuryDualCard - Text Înainte de Grafice
Ca utilizator Vreau să văd valorile Casa/Bancă și breakdown-ul ÎNAINTE de grafice Pentru că textul cu valorile este mai important decât graficele
Acceptance Criteria:
- În
TreasuryDualCard.vue, secțiuneabreakdown-sectionse mută ÎNAINTE desparkline-dual-container - Ordinea în body devine: values-section → breakdown-section → sparkline-dual-container
- Breakdown-ul Casa/Bancă cu sub-conturi rămâne expandabil
- Graficele apar la sfârșit
- npm run typecheck passes
- Verify in browser că textul apare înainte de grafice
US-004: Reorganizare ClientiBalanceCard - Text Înainte de Grafice
Ca utilizator Vreau să văd breakdown-ul (În termen/Restant) ÎNAINTE de grafic Pentru că valorile text sunt prioritare față de grafic
Acceptance Criteria:
- În
ClientiBalanceCard.vue, secțiuneabreakdown-sectionse mută ÎNAINTE demetric-sparkline - Ordinea în body devine: value-section → breakdown-section → metric-sparkline
- Breakdown-ul În termen/Restant cu perioade rămâne expandabil
- Graficul apare la sfârșit
- npm run typecheck passes
- Verify in browser că textul apare înainte de grafic
US-005: Reorganizare FurnizoriBalanceCard - Text Înainte de Grafice
Ca utilizator Vreau să văd breakdown-ul (În termen/Restant) ÎNAINTE de grafic Pentru că consistență cu celelalte carduri
Acceptance Criteria:
- În
FurnizoriBalanceCard.vue, secțiuneabreakdown-sectionse mută ÎNAINTE demetric-sparkline - Ordinea în body devine: value-section → breakdown-section → metric-sparkline
- Breakdown-ul În termen/Restant cu perioade rămâne expandabil
- Graficul apare la sfârșit
- npm run typecheck passes
- Verify in browser că textul apare înainte de grafic
US-006: Păstrare Layout Mobile Neschimbat
Ca utilizator mobile Vreau ca experiența pe mobil să rămână neschimbată Pentru că layout-ul mobile este deja optimizat
Acceptance Criteria:
SwipeableCardspe mobile rămâne identic- Prima pagină cu
solduri-grid-2x2(4xSolduriCompactCard) rămâne pe mobile - Paginile 2-5 cu carduri grafice rămân neschimbate pe mobile
- npm run typecheck passes
- Verify in browser (mobile viewport) că experiența nu s-a schimbat
US-007: Grafice Colapsabile și Colapsate Implicit
Ca utilizator desktop Vreau să pot expanda/colasa graficele separat Pentru că vreau să văd rapid valorile fără să scrollez peste grafice
Acceptance Criteria:
- Secțiunea cu grafice are un header clickabil: "Grafice evoluție ▶" (collapsed) / "▼" (expanded)
- Graficele sunt COLAPSATE implicit (
chartsExpanded = false) - La click pe header, graficele se expandează la dimensiunea lor completă (150px height fiecare)
- Se folosește
v-showpentru toggle (păstrează Chart.js instances în memorie) - Header-ul graficelor are styling consistent cu breakdown headers (font, culoare, spacing)
- Implementat în:
TreasuryDualCard.vue,ClientiBalanceCard.vue,FurnizoriBalanceCard.vue CashFlowMetricCard.vueprimește același treatment (grafic colapsabil)- npm run typecheck passes
- Verify in browser că graficele sunt collapsed implicit și se expandează corect la click
4. Cerințe Funcționale
- [REQ-001] Pe desktop (
!isMobile), secțiuneadesktop-solduri-sectionnu trebuie să se mai afișeze - [REQ-002] Prop-ul
icontrebuie eliminat din toate utilizărileCollapsibleCardînDashboardView.vue - [REQ-003] În cardurile cu grafice (Treasury, Clienti, Furnizori, CashFlow), ordinea secțiunilor trebuie să fie: Header → Text/Breakdown → Grafice (colapsabile)
- [REQ-004] Breakdown-urile (Casa/Bancă, În termen/Restant) rămân expandabile cu click
- [REQ-005] Pe mobile, nimic nu se schimbă - condiția
isMobileprotejează codul existent - [REQ-006] Graficele din toate cardurile trebuie să fie colapsabile și COLAPSATE implicit, cu header clickabil pentru expand
5. Non-Goals (Ce NU facem)
- NU modificăm componentele
SolduriCompactCard- doar le ascundem pe desktop - NU schimbăm layout-ul mobile
- NU modificăm stilul/dimensiunea graficelor - doar adăugăm collapse toggle
- NU modificăm
CollapsibleCard.vuecomponent-ul shared - NU modificăm logica de date/calcul din carduri
6. Considerații Tehnice
Stack/Tehnologii
- Vue 3 Composition API
- Chart.js pentru grafice
- CSS cu design tokens existente
Patterns de Urmat
- Utilizare
v-if="!isMobile"pentru condiții desktop - Utilizare
v-showpentru grafice colapsabile (păstrează Chart.js instances) - Design tokens din
DESIGN_TOKENS.md - BEM naming convention pentru CSS
Fișiere Afectate
src/modules/reports/views/DashboardView.vue- eliminare secțiune și icoanesrc/modules/reports/components/dashboard/cards/TreasuryDualCard.vue- reordonare secțiuni + grafice colapsabilesrc/modules/reports/components/dashboard/cards/ClientiBalanceCard.vue- reordonare secțiuni + grafice colapsabilesrc/modules/reports/components/dashboard/cards/FurnizoriBalanceCard.vue- reordonare secțiuni + grafice colapsabilesrc/modules/reports/components/dashboard/cards/CashFlowMetricCard.vue- grafice colapsabile
Dependențe
- Nicio dependență nouă necesară
Riscuri Tehnice
Chart.js poate avea probleme dacă canvas-ul nu este vizibil la render→ Rezolvat cuv-showcare păstrează DOM-ul- Chart.js instances rămân în memorie când graficele sunt colapsate - acceptabil pentru 4 carduri
7. Considerații UI/UX
Layout Nou (Desktop) - Stare Implicită (Collapsed)
┌─────────────────────────────────────────────┐
│ Trezorerie 125.500 RON ▼│ ← Header card (fără icoane)
├─────────────────────────────────────────────┤
│ Casa 35.500 RON │ ← Valori principale (vizibile)
│ Bancă 90.000 RON │
│ ▶ Casa breakdown (click expand) │ ← Detalii conturi (expandabile)
│ ▶ Bancă breakdown (click expand) │
├─────────────────────────────────────────────┤
│ ▶ Grafice evoluție │ ← COLLAPSED IMPLICIT
└─────────────────────────────────────────────┘
Layout Nou (Desktop) - Grafice Expandate
┌─────────────────────────────────────────────┐
│ Trezorerie 125.500 RON ▼│
├─────────────────────────────────────────────┤
│ Casa 35.500 RON │
│ Bancă 90.000 RON │
│ ▶ Casa breakdown │
│ ▶ Bancă breakdown │
├─────────────────────────────────────────────┤
│ ▼ Grafice evoluție │ ← EXPANDED (click toggle)
│ ┌─────────────────────────────────────────┐ │
│ │ 📈 [Grafic Casa - 150px height] │ │ ← Full size charts
│ │ 📈 [Grafic Bancă - 150px height] │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
Dark Mode
- Toate componentele folosesc deja design tokens compatibile dark mode
- Nu necesită modificări suplimentare
Accesibilitate
- Header-ul CollapsibleCard are deja
role="button"șitabindex="0" - Breakdown-urile au keyboard support pentru expand/collapse
8. Success Metrics
- Eliminare duplicate: 100% (3 carduri duplicate eliminate)
- Timp de scanare: valorile principale vizibile în primele 2 secunde
- Funcționalitate păstrată: 100% (aceleași date disponibile, doar reorganizate)
9. Open Questions
- Confirmat: Se elimină complet
desktop-solduri-sectionpe desktop - Confirmat: Header fără icoane
- Confirmat: Text/breakdown înainte de grafice
- Confirmat: Layout grid 2x2 rămâne
- Confirmat: Mobile neschimbat
- Confirmat: Grafice colapsabile și colapsate implicit (cu
v-show)