Files
roa2web-service-auto/scripts/ralph/prd.json
Claude Agent 15327687f4 feat(dashboard-solduri): Complete dashboard solduri v2 implementation
## Features
- US-2001: Create reusable SolduriCompactCard component
- US-2004: Solduri section on Desktop (top, without title)
- US-2005: Remove MaturityAndDetailsCard from Dashboard
- US-2006: Integrate Solduri data from dashboardStore
- US-2007: Visual indicators for financial status
- US-2008: Refresh button in Dashboard header

## UI Improvements
- Desktop: 2x2 grid for solduri cards with larger breakdown fonts
- Mobile: Single column layout with auto height
- Theme persistence: synchronous initialization to prevent flash
- Unified "Bonuri" icon (pi-shopping-bag) across all navigation

## Files Changed
- New: SolduriCompactCard.vue - expandable cards for Trezorerie/Clienți/Furnizori/TVA
- Modified: DashboardView.vue - integrated solduri section
- Modified: index.html - theme init script
- Modified: Mobile navigation components - icon consistency

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 08:37:10 +00:00

161 lines
7.9 KiB
JSON

{
"projectName": "dashboard-solduri-v2",
"branchName": "ralph/dashboard-solduri",
"description": "Adăugare secțiune Solduri în Dashboard: mobil = prima pagină swipe (grid 2x2), grafice = paginile 2-5 (păstrate ca în main). Desktop = Secțiune Solduri + Secțiune Grafice, fără titluri.",
"cssRules": {
"documentation": [
"docs/ONBOARDING_CSS.md",
"docs/DESIGN_TOKENS.md",
"docs/CSS_PATTERNS.md",
"docs/MOBILE_PATTERNS.md"
],
"goldenRules": [
"Folosește DOAR design tokens - NICIODATĂ valori hardcodate",
"NU modifica cardurile grafice originale (TreasuryDualCard, etc.) - rămân IDENTICE",
"Testează în AMBELE teme (light + dark mode)",
"Mobile: touch targets minim 44x44px",
"Mobile: prima pagină swipe = grid 2x2 solduri",
"Mobile: paginile 2-5 swipe = cardurile grafice ORIGINALE din main"
]
},
"referenceFiles": {
"dashboardView": "src/modules/reports/views/DashboardView.vue",
"swipeableCards": "src/shared/components/mobile/SwipeableCards.vue",
"graficcards": [
"src/modules/reports/components/dashboard/cards/TreasuryDualCard.vue",
"src/modules/reports/components/dashboard/cards/CashFlowMetricCard.vue",
"src/modules/reports/components/dashboard/cards/ClientiBalanceCard.vue",
"src/modules/reports/components/dashboard/cards/FurnizoriBalanceCard.vue"
],
"backupComponents": "/tmp/dashboard-backup/"
},
"userStories": [
{
"id": "US-2001",
"title": "Creare componentă SolduriCompactCard reutilizabilă",
"description": "Ca dezvoltator, vreau o componentă card compactă pentru solduri pentru că o voi folosi în grid 2x2 pe mobil și desktop",
"priority": 1,
"acceptanceCriteria": [
"Creează SolduriCompactCard.vue în src/modules/reports/components/solduri/",
"Props: type (trezorerie|clienti|furnizori|tva), total, breakdown (object), casaTotal, bancaTotal (pentru trezorerie)",
"Afișează: icon + label (uppercase) + valoare principală formatată românesc",
"Click pe card expandează/colapsează breakdown-ul (conturi pentru trezorerie, buckets pentru clienți/furnizori)",
"Folosește design tokens: var(--space-md), var(--text-lg), var(--surface-card)",
"npm run typecheck passes"
],
"passes": true,
"notes": "Completed in iteration 1"
},
{
"id": "US-2002",
"title": "Grid 2x2 Solduri pentru prima pagină swipe pe mobil",
"description": "Ca utilizator pe mobil, vreau prima pagină din swipe să fie un grid 2x2 cu 4 carduri solduri",
"priority": 2,
"acceptanceCriteria": [
"Modifică SwipeableCards în DashboardView să aibă 5 pagini (sau folosește totalCards=5)",
"Prima pagină (card-0 sau echivalent) conține un div cu grid 2x2",
"Grid-ul conține 4 SolduriCompactCard: Trezorerie | Clienți / Furnizori | TVA",
"Fiecare card primește date din dashboardStore",
"Touch target minim 44x44px pentru fiecare card",
"npm run typecheck passes",
"Verify in browser mobil că prima pagină e grid-ul cu 4 solduri compacte"
],
"passes": true,
"notes": "Verified in browser - Grid 2x2 shows correctly with 4 SolduriCompactCard on first swipe page"
},
{
"id": "US-2003",
"title": "Păstrare carduri grafice originale pe paginile 2-5 mobil",
"description": "Ca utilizator pe mobil, vreau paginile 2-5 din swipe să fie cardurile cu grafice originale, exact ca în main",
"priority": 3,
"acceptanceCriteria": [
"Pagina 2 (card-1): TreasuryDualCard cu EXACT aceleași props ca în main",
"Pagina 3 (card-2): CashFlowMetricCard cu EXACT aceleași props ca în main",
"Pagina 4 (card-3): ClientiBalanceCard cu EXACT aceleași props ca în main",
"Pagina 5 (card-4): FurnizoriBalanceCard cu EXACT aceleași props ca în main",
"NU modifica componentele grafice - doar le folosești în SwipeableCards",
"npm run typecheck passes",
"Verify în browser că swipe funcționează fluid între toate 5 paginile"
],
"passes": true,
"notes": "Verified - Pages 2-5 show original graph cards (TreasuryDualCard, CashFlowMetricCard, etc.). Swipe works fluid."
},
{
"id": "US-2004",
"title": "Secțiune Solduri pe Desktop (sus, fără titlu)",
"description": "Ca utilizator pe desktop, vreau să văd soldurile într-o secțiune separată sus, fără titlu vizibil",
"priority": 4,
"acceptanceCriteria": [
"Pe desktop (v-if !isMobile), adaugă o secțiune nouă cu clasa desktop-solduri-section",
"Secțiunea conține 4 SolduriCompactCard în grid responsive (grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)))",
"Fără titlu sau header de secțiune - doar cardurile direct",
"Sub această secțiune rămân cardurile grafice originale (metrics-row existent)",
"npm run typecheck passes",
"Verify în browser desktop că soldurile sunt sus, graficele jos"
],
"passes": true,
"notes": "Completed in iteration 1"
},
{
"id": "US-2005",
"title": "Eliminare MaturityAndDetailsCard de pe Dashboard",
"description": "Ca utilizator, vreau Dashboard-ul să nu mai aibă tabelul detaliat de scadențe (există pagina Maturity Analysis)",
"priority": 5,
"acceptanceCriteria": [
"Șterge MaturityAndDetailsCard din template-ul DashboardView.vue",
"Șterge div-ul .comparison-row care conținea cardul",
"Șterge importul MaturityAndDetailsCard din script setup",
"npm run typecheck passes",
"Verify: Dashboard nu mai are tabel de analiză scadențe"
],
"passes": true,
"notes": "Completed in iteration 2"
},
{
"id": "US-2006",
"title": "Integrare date Solduri din dashboardStore",
"description": "Ca dezvoltator, vreau cardurile solduri să folosească datele existente din dashboardStore fără API calls noi",
"priority": 6,
"acceptanceCriteria": [
"SolduriCompactCard pentru Trezorerie: treasuryData.breakdown.casa.total + banca.total, breakdown items",
"SolduriCompactCard pentru Clienți: netBalanceData.clienti_total, breakdown.clienti",
"SolduriCompactCard pentru Furnizori: netBalanceData.furnizori_total, breakdown.furnizori",
"SolduriCompactCard pentru TVA: calculat sau din dashboardStore.summary",
"npm run typecheck passes"
],
"passes": true,
"notes": "Completed in iteration 3"
},
{
"id": "US-2007",
"title": "Indicatori vizuali pentru starea financiară",
"description": "Ca utilizator, vreau să văd indicatori de avertizare pe cardurile solduri pentru probleme financiare",
"priority": 7,
"acceptanceCriteria": [
"Indicator dot roșu pe card Clienți dacă restanță > 20% din total",
"Indicator dot roșu pe card Furnizori dacă restanță > 20% din total",
"TVA: text roșu var(--red-600) dacă negativ (de plată), verde var(--green-600) dacă pozitiv (de recuperat)",
"npm run typecheck passes",
"Verify în browser că indicatorii sunt vizibili în ambele teme"
],
"passes": true,
"notes": "Completed in iteration 4"
},
{
"id": "US-2008",
"title": "Buton Refresh în header Dashboard",
"description": "Ca utilizator, vreau un buton de refresh în header pentru actualizare manuală a datelor",
"priority": 8,
"acceptanceCriteria": [
"Pe mobil: adaugă action cu icon pi-refresh în MobileTopBar actions",
"Pe desktop: adaugă Button cu icon refresh lângă titlul Dashboard",
"Click declanșează reload date din dashboardStore",
"Icon se rotește (animație CSS) în timpul încărcării",
"npm run typecheck passes"
],
"passes": true,
"notes": "Completed in iteration 5"
}
]
}