Files
roa2web-service-auto/tasks/prd-dashboard-desktop-cleanup.md
Claude Agent 1b9ebf1d8f feat(dashboard): Complete dashboard desktop cleanup and improvements
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>
2026-01-22 07:27:27 +00:00

214 lines
11 KiB
Markdown

# 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-section` este eliminată din `DashboardView.vue` pentru desktop
- [ ] Rămân doar cele 4 `CollapsibleCard`-uri: Trezorerie, Cash Flow, Clienți, Furnizori
- [ ] Layout-ul grid 2x2 din `metrics-row` ră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 `icon` nu mai este transmis către `CollapsibleCard` în `DashboardView.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țiunea `breakdown-section` se mută ÎNAINTE de `sparkline-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țiunea `breakdown-section` se mută ÎNAINTE de `metric-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țiunea `breakdown-section` se mută ÎNAINTE de `metric-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:**
- [ ] `SwipeableCards` pe mobile rămâne identic
- [ ] Prima pagină cu `solduri-grid-2x2` (4x `SolduriCompactCard`) 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-show` pentru 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.vue` primeș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
1. [REQ-001] Pe desktop (`!isMobile`), secțiunea `desktop-solduri-section` nu trebuie să se mai afișeze
2. [REQ-002] Prop-ul `icon` trebuie eliminat din toate utilizările `CollapsibleCard` în `DashboardView.vue`
3. [REQ-003] În cardurile cu grafice (Treasury, Clienti, Furnizori, CashFlow), ordinea secțiunilor trebuie să fie: Header → Text/Breakdown → Grafice (colapsabile)
4. [REQ-004] Breakdown-urile (Casa/Bancă, În termen/Restant) rămân expandabile cu click
5. [REQ-005] Pe mobile, nimic nu se schimbă - condiția `isMobile` protejează codul existent
6. [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.vue` component-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-show` pentru 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 icoane
- `src/modules/reports/components/dashboard/cards/TreasuryDualCard.vue` - reordonare secțiuni + grafice colapsabile
- `src/modules/reports/components/dashboard/cards/ClientiBalanceCard.vue` - reordonare secțiuni + grafice colapsabile
- `src/modules/reports/components/dashboard/cards/FurnizoriBalanceCard.vue` - reordonare secțiuni + grafice colapsabile
- `src/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 cu `v-show` care 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"` și `tabindex="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
- [x] Confirmat: Se elimină complet `desktop-solduri-section` pe desktop
- [x] Confirmat: Header fără icoane
- [x] Confirmat: Text/breakdown înainte de grafice
- [x] Confirmat: Layout grid 2x2 rămâne
- [x] Confirmat: Mobile neschimbat
- [x] Confirmat: Grafice colapsabile și colapsate implicit (cu `v-show`)