## 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>
161 lines
7.9 KiB
JSON
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"
|
|
}
|
|
]
|
|
}
|