diff --git a/scripts/ralph/archive/prd-phase2-20260112-133438.json b/scripts/ralph/archive/prd-phase2-20260112-133438.json
new file mode 100644
index 0000000..9ca0c02
--- /dev/null
+++ b/scripts/ralph/archive/prd-phase2-20260112-133438.json
@@ -0,0 +1,253 @@
+{
+ "projectName": "mobile-navigation-improvements",
+ "branchName": "ralph/unified-mobile-md",
+ "description": "Extinderea navigării mobile cu Dashboard split, Settings Hub, MobileDrawerMenu și butoane context-aware",
+ "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",
+ "Verifică CSS_PATTERNS.md înainte de a scrie CSS nou",
+ "Testează în AMBELE teme (light + dark mode)",
+ "NICIODATĂ :deep() în componente (PrimeVue → vendor/)",
+ "NICIODATĂ duplicate CSS (write once, use everywhere)",
+ "Mobile: toate paginile folosesc MobileTopBar + MobileBottomNav",
+ "Mobile: filtrele se pun în BottomSheet, NU inline",
+ "Mobile: selecția afișează acțiuni în footer, NU în header"
+ ],
+ "mobileLayoutTokens": {
+ "topBarHeight": "56px",
+ "bottomNavHeight": "56px",
+ "fabSize": "56px",
+ "fabBottomOffset": "72px",
+ "touchTargetMin": "48px"
+ }
+ },
+ "userStories": [
+ {
+ "id": "US-201",
+ "title": "MobileBottomNav activ pe Dashboard",
+ "description": "Ca utilizator mobil vreau să văd footer navigation și pe Dashboard pentru navigare ușoară",
+ "priority": 1,
+ "acceptanceCriteria": [
+ "DashboardView.vue include MobileBottomNav component",
+ "Link-ul 'Rapoarte' din nav este activ/highlighted pe Dashboard",
+ "MobileTopBar adăugat cu title 'Dashboard'",
+ "Verify in browser: navigarea funcționează din Dashboard",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 1"
+ },
+ {
+ "id": "US-202",
+ "title": "MobileDrawerMenu Material Design cu Profil",
+ "description": "Ca utilizator mobil vreau meniul hamburger să aibă design Material cu secțiune profil",
+ "priority": 2,
+ "acceptanceCriteria": [
+ "Componentă src/shared/components/mobile/MobileDrawerMenu.vue creată",
+ "Secțiuni: Header cu logo, Navigare principală, Profil utilizator (nume + logout)",
+ "Link-uri navigare: Dashboard, Bonuri, Facturi, Balanță, Trezorerie, Setări",
+ "Active state pe link-ul curent (bazat pe route)",
+ "Animație slide-in de la stânga",
+ "Close pe tap outside sau pe link click",
+ "Dark mode support",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 2"
+ },
+ {
+ "id": "US-208",
+ "title": "Actualizare Router cu noile rute",
+ "description": "Ca developer vreau router-ul configurat pentru noile pagini",
+ "priority": 3,
+ "acceptanceCriteria": [
+ "Rută /reports/maturity-analysis → MaturityAnalysisView (lazy loaded)",
+ "Rută /reports/detailed-invoices → DetailedInvoicesView (lazy loaded)",
+ "Rută /settings → SettingsHubView (lazy loaded)",
+ "Redirect /data-entry/ocr-metrics accesibil din Settings Hub",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 3"
+ },
+ {
+ "id": "US-206",
+ "title": "Creare Pagină Hub Setări",
+ "description": "Ca utilizator vreau o pagină centrală cu toate opțiunile de setări",
+ "priority": 4,
+ "acceptanceCriteria": [
+ "View nou: src/modules/reports/views/SettingsHubView.vue",
+ "Route: /settings",
+ "Carduri pentru: OCR Setări, Cache Stats, Loguri Server, Telegram (dacă admin)",
+ "MobileTopBar cu title 'Setări'",
+ "MobileBottomNav cu Setări activ",
+ "Click pe card navighează la pagina respectivă",
+ "Design responsive (grid 2x2 pe mobil, 4 columns pe desktop)",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 4"
+ },
+ {
+ "id": "US-204",
+ "title": "Creare Pagină Analiză Scadențe",
+ "description": "Ca utilizator vreau o pagină dedicată pentru analiza scadențelor clienți/furnizori",
+ "priority": 5,
+ "acceptanceCriteria": [
+ "View nou: src/modules/reports/views/MaturityAnalysisView.vue",
+ "Route: /reports/maturity-analysis",
+ "Conține componenta MaturityAndDetailsCard (partea de analiză scadențe)",
+ "MobileTopBar cu title 'Analiză Scadențe' și buton ← Înapoi la Dashboard",
+ "MobileBottomNav activ",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 5"
+ },
+ {
+ "id": "US-205",
+ "title": "Creare Pagină Facturi Detaliate",
+ "description": "Ca utilizator vreau o pagină dedicată pentru tabelul facturilor detaliate",
+ "priority": 6,
+ "acceptanceCriteria": [
+ "View nou: src/modules/reports/views/DetailedInvoicesView.vue",
+ "Route: /reports/detailed-invoices",
+ "Conține componenta/partea de tabel detaliat din MaturityAndDetailsCard",
+ "MobileTopBar cu title 'Facturi Detaliate' și buton ← Înapoi",
+ "MobileBottomNav activ",
+ "Filtre în BottomSheet pe mobil",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 6"
+ },
+ {
+ "id": "US-203",
+ "title": "Dashboard KPIs Only View",
+ "description": "Ca utilizator mobil vreau Dashboard-ul principal să arate doar KPI cards pentru acces rapid",
+ "priority": 7,
+ "acceptanceCriteria": [
+ "DashboardView.vue pe mobil afișează DOAR: SwipeableCards cu KPIs",
+ "Adăugare 2 carduri quick-link: 'Analiză Scadențe →' și 'Facturi Detaliate →'",
+ "Click pe quick-link navighează la pagina dedicată",
+ "Desktop rămâne neschimbat (toate secțiunile)",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 7"
+ },
+ {
+ "id": "US-212",
+ "title": "Quick Links în Dashboard Mobile",
+ "description": "Ca utilizator vreau carduri clickabile în Dashboard pentru a ajunge la Scadențe și Facturi",
+ "priority": 8,
+ "acceptanceCriteria": [
+ "După SwipeableCards, 2 carduri: 'Analiză Scadențe' și 'Facturi Detaliate'",
+ "Design: icon + titlu + săgeată dreaptă (→)",
+ "Click navighează la pagina respectivă",
+ "Doar pe mobil (desktop are totul în aceeași pagină)",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 8"
+ },
+ {
+ "id": "US-207",
+ "title": "Actualizare MobileBottomNav cu link Setări",
+ "description": "Ca utilizator vreau butonul Setări din footer să ducă la Hub Setări",
+ "priority": 9,
+ "acceptanceCriteria": [
+ "MobileBottomNav: link Setări → /settings (nu /data-entry/ocr-metrics)",
+ "Icon: pi-cog",
+ "Active state când pe /settings sau /settings/* sau pagini admin",
+ "Actualizare în toate paginile care folosesc MobileBottomNav",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 9"
+ },
+ {
+ "id": "US-213",
+ "title": "Actualizare Hamburger Menu în toate paginile",
+ "description": "Ca utilizator vreau hamburger menu-ul să funcționeze uniform în toată aplicația",
+ "priority": 10,
+ "acceptanceCriteria": [
+ "Toate paginile cu MobileTopBar: click pe ☰ deschide MobileDrawerMenu",
+ "MobileDrawerMenu înlocuiește vechiul Sidebar pe mobil",
+ "Desktop păstrează navigarea existentă",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 10"
+ },
+ {
+ "id": "US-210",
+ "title": "Creare MobileActionBar Component",
+ "description": "Ca developer vreau componentă reutilizabilă pentru butoane de acțiune pe mobil",
+ "priority": 11,
+ "acceptanceCriteria": [
+ "Componentă src/shared/components/mobile/MobileActionBar.vue creată",
+ "Props: actions (array of {label, icon, severity, handler, disabled})",
+ "Layout: butoane full-width sau side-by-side (2 butoane)",
+ "Position: fixed bottom, above MobileBottomNav",
+ "Animație: slide-up la mount",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 11"
+ },
+ {
+ "id": "US-209",
+ "title": "Butoane Context-Aware în Editare Bon",
+ "description": "Ca utilizator vreau butoanele din editare bon să se schimbe în funcție de starea bonului",
+ "priority": 12,
+ "acceptanceCriteria": [
+ "ReceiptCreateUnifiedView detectează starea bonului (draft/pending/approved/rejected)",
+ "Draft: Salvează | Submit pentru Aprobare | Șterge",
+ "Pending: Salvează | Aprobă | Respinge (dacă are permisiuni)",
+ "Approved: doar vizualizare (butoane disabled sau ascunse)",
+ "Rejected: Salvează (re-edit) | Re-submit",
+ "Butoane în MobileActionBar fix jos pe mobil",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 12"
+ },
+ {
+ "id": "US-211",
+ "title": "Integrare MobileActionBar în ReceiptCreateUnifiedView",
+ "description": "Ca utilizator vreau butoanele de acțiune pentru bon să fie în action bar pe mobil",
+ "priority": 13,
+ "acceptanceCriteria": [
+ "ReceiptCreateUnifiedView folosește MobileActionBar pe mobil",
+ "Desktop păstrează butoanele în form",
+ "Buton Înapoi în MobileTopBar (deja există din US-105)",
+ "Action bar dispare când se deschide BottomSheet sau alte overlay-uri",
+ "npm run build passes"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 13"
+ },
+ {
+ "id": "US-214",
+ "title": "Actualizare Documentație MOBILE_PATTERNS.md",
+ "description": "Ca developer viitor vreau documentația actualizată cu noile componente și pattern-uri",
+ "priority": 14,
+ "acceptanceCriteria": [
+ "Secțiune nouă: MobileDrawerMenu (usage, props)",
+ "Secțiune nouă: MobileActionBar (usage, props)",
+ "Secțiune actualizată: Navigation patterns (footer → settings hub)",
+ "Diagrame ASCII actualizate cu noile rute",
+ "npm run build passes (doar pentru validare că nu s-a stricat nimic)"
+ ],
+ "passes": true,
+ "notes": "Completed in iteration 14"
+ }
+ ]
+}
diff --git a/scripts/ralph/prd.json b/scripts/ralph/prd.json
index 9ca0c02..a9518ce 100644
--- a/scripts/ralph/prd.json
+++ b/scripts/ralph/prd.json
@@ -1,7 +1,7 @@
{
- "projectName": "mobile-navigation-improvements",
+ "projectName": "mobile-fixes-phase3",
"branchName": "ralph/unified-mobile-md",
- "description": "Extinderea navigării mobile cu Dashboard split, Settings Hub, MobileDrawerMenu și butoane context-aware",
+ "description": "Corectări navigare mobilă: footer restructurat, tab-uri Clienți/Furnizori, FAB pe Bonuri, hamburger grupat",
"cssRules": {
"documentation": [
"docs/ONBOARDING_CSS.md",
@@ -14,10 +14,9 @@
"Verifică CSS_PATTERNS.md înainte de a scrie CSS nou",
"Testează în AMBELE teme (light + dark mode)",
"NICIODATĂ :deep() în componente (PrimeVue → vendor/)",
- "NICIODATĂ duplicate CSS (write once, use everywhere)",
"Mobile: toate paginile folosesc MobileTopBar + MobileBottomNav",
"Mobile: filtrele se pun în BottomSheet, NU inline",
- "Mobile: selecția afișează acțiuni în footer, NU în header"
+ "Mobile: tab-uri pentru switch Clienți/Furnizori"
],
"mobileLayoutTokens": {
"topBarHeight": "56px",
@@ -29,225 +28,189 @@
},
"userStories": [
{
- "id": "US-201",
- "title": "MobileBottomNav activ pe Dashboard",
- "description": "Ca utilizator mobil vreau să văd footer navigation și pe Dashboard pentru navigare ușoară",
+ "id": "US-307",
+ "title": "Restructurare Footer Nav (4 butoane noi)",
+ "description": "Ca utilizator mobil vreau footer navigation cu: Dashboard | Bonuri | Facturi | Setări",
"priority": 1,
"acceptanceCriteria": [
- "DashboardView.vue include MobileBottomNav component",
- "Link-ul 'Rapoarte' din nav este activ/highlighted pe Dashboard",
- "MobileTopBar adăugat cu title 'Dashboard'",
- "Verify in browser: navigarea funcționează din Dashboard",
+ "MobileBottomNav cu 4 butoane: Dashboard, Bonuri, Facturi, Setări",
+ "Dashboard: icon pi-home, route /dashboard",
+ "Bonuri: icon pi-receipt, route /data-entry",
+ "Facturi: icon pi-file-edit, route /reports/invoices",
+ "Setări: icon pi-cog, route /settings",
+ "Active state corect pe fiecare pagină",
+ "Ștergere link Upload din footer (mutat în FAB)",
"npm run build passes"
],
"passes": true,
"notes": "Completed in iteration 1"
},
{
- "id": "US-202",
- "title": "MobileDrawerMenu Material Design cu Profil",
- "description": "Ca utilizator mobil vreau meniul hamburger să aibă design Material cu secțiune profil",
+ "id": "US-308",
+ "title": "Actualizare Hamburger Menu - Grupat pe Categorii",
+ "description": "Ca utilizator mobil vreau meniul hamburger organizat pe categorii clare",
"priority": 2,
"acceptanceCriteria": [
- "Componentă src/shared/components/mobile/MobileDrawerMenu.vue creată",
- "Secțiuni: Header cu logo, Navigare principală, Profil utilizator (nume + logout)",
- "Link-uri navigare: Dashboard, Bonuri, Facturi, Balanță, Trezorerie, Setări",
- "Active state pe link-ul curent (bazat pe route)",
- "Animație slide-in de la stânga",
- "Close pe tap outside sau pe link click",
- "Dark mode support",
+ "MobileDrawerMenu.vue restructurat cu secțiuni vizuale",
+ "Secțiune PRINCIPALE: Dashboard → /dashboard, Bonuri → /data-entry",
+ "Secțiune RAPOARTE: Facturi → /reports/invoices, Balanță → /reports/trial-balance, Casa și Banca → /reports/bank-cash",
+ "Secțiune ANALIZE: Scadențe → /reports/maturity-analysis, Facturi Detaliate → /reports/detailed-invoices",
+ "Secțiune ADMINISTRARE: Setări → /settings",
+ "Separatori vizuali între secțiuni",
+ "Header cu logo, Footer cu profil utilizator și logout",
"npm run build passes"
],
- "passes": true,
- "notes": "Completed in iteration 2"
+ "passes": false,
+ "notes": ""
},
{
- "id": "US-208",
- "title": "Actualizare Router cu noile rute",
- "description": "Ca developer vreau router-ul configurat pentru noile pagini",
+ "id": "US-304",
+ "title": "Tab-uri Clienți/Furnizori în Facturi",
+ "description": "Ca utilizator vreau pagina Facturi să aibă tab-uri pentru Clienți și Furnizori",
"priority": 3,
"acceptanceCriteria": [
- "Rută /reports/maturity-analysis → MaturityAnalysisView (lazy loaded)",
- "Rută /reports/detailed-invoices → DetailedInvoicesView (lazy loaded)",
- "Rută /settings → SettingsHubView (lazy loaded)",
- "Redirect /data-entry/ocr-metrics accesibil din Settings Hub",
+ "InvoicesView.vue modificat cu tab-uri: Clienți | Furnizori",
+ "Tab-uri sub MobileTopBar (design Material, full-width)",
+ "Switch între tab-uri păstrează filtrele active",
+ "Default: primul tab activ (Clienți)",
+ "URL query param pentru tab activ (?tab=suppliers)",
+ "MobileTopBar cu title Facturi",
+ "MobileBottomNav activ (Facturi highlighted)",
"npm run build passes"
],
- "passes": true,
- "notes": "Completed in iteration 3"
+ "passes": false,
+ "notes": ""
},
{
- "id": "US-206",
- "title": "Creare Pagină Hub Setări",
- "description": "Ca utilizator vreau o pagină centrală cu toate opțiunile de setări",
+ "id": "US-305",
+ "title": "Tab-uri Clienți/Furnizori în Scadențe",
+ "description": "Ca utilizator vreau pagina Scadențe să aibă tab-uri pentru Clienți și Furnizori",
"priority": 4,
"acceptanceCriteria": [
- "View nou: src/modules/reports/views/SettingsHubView.vue",
- "Route: /settings",
- "Carduri pentru: OCR Setări, Cache Stats, Loguri Server, Telegram (dacă admin)",
- "MobileTopBar cu title 'Setări'",
- "MobileBottomNav cu Setări activ",
- "Click pe card navighează la pagina respectivă",
- "Design responsive (grid 2x2 pe mobil, 4 columns pe desktop)",
+ "MaturityAnalysisView.vue modificat cu tab-uri: Clienți | Furnizori",
+ "Tab-uri sub MobileTopBar (design Material, full-width)",
+ "Switch între tab-uri păstrează filtrele active",
+ "Default: primul tab activ (Clienți)",
+ "URL query param pentru tab activ (?tab=suppliers)",
+ "MobileTopBar cu title Scadențe și buton ← Înapoi",
+ "MobileBottomNav activ",
"npm run build passes"
],
- "passes": true,
- "notes": "Completed in iteration 4"
+ "passes": false,
+ "notes": ""
},
{
- "id": "US-204",
- "title": "Creare Pagină Analiză Scadențe",
- "description": "Ca utilizator vreau o pagină dedicată pentru analiza scadențelor clienți/furnizori",
+ "id": "US-301",
+ "title": "Buton Înapoi în Creare/Editare/Vizualizare Bon",
+ "description": "Ca utilizator mobil vreau buton ← Înapoi în MobileTopBar pe pagina de bon",
"priority": 5,
"acceptanceCriteria": [
- "View nou: src/modules/reports/views/MaturityAnalysisView.vue",
- "Route: /reports/maturity-analysis",
- "Conține componenta MaturityAndDetailsCard (partea de analiză scadențe)",
- "MobileTopBar cu title 'Analiză Scadențe' și buton ← Înapoi la Dashboard",
- "MobileBottomNav activ",
+ "ReceiptCreateUnifiedView.vue are MobileTopBar cu showBack=true",
+ "Click pe ← navighează la /data-entry (lista bonuri)",
+ "Funcționează în toate modurile: create, edit, view",
+ "Verify in browser: butonul apare și funcționează",
"npm run build passes"
],
- "passes": true,
- "notes": "Completed in iteration 5"
+ "passes": false,
+ "notes": ""
},
{
- "id": "US-205",
- "title": "Creare Pagină Facturi Detaliate",
- "description": "Ca utilizator vreau o pagină dedicată pentru tabelul facturilor detaliate",
+ "id": "US-302",
+ "title": "Footer Nav pe toate Paginile de Setări",
+ "description": "Ca utilizator mobil vreau MobileBottomNav pe toate paginile din secțiunea Setări",
"priority": 6,
"acceptanceCriteria": [
- "View nou: src/modules/reports/views/DetailedInvoicesView.vue",
- "Route: /reports/detailed-invoices",
- "Conține componenta/partea de tabel detaliat din MaturityAndDetailsCard",
- "MobileTopBar cu title 'Facturi Detaliate' și buton ← Înapoi",
- "MobileBottomNav activ",
- "Filtre în BottomSheet pe mobil",
+ "OCRMetricsView.vue include MobileBottomNav cu Setări activ",
+ "CacheStatsView.vue include MobileBottomNav cu Setări activ",
+ "ServerLogsView.vue include MobileBottomNav cu Setări activ",
+ "TelegramAdminView.vue include MobileBottomNav cu Setări activ (dacă există)",
+ "SettingsHubView.vue include MobileBottomNav cu Setări activ",
"npm run build passes"
],
- "passes": true,
- "notes": "Completed in iteration 6"
+ "passes": false,
+ "notes": ""
},
{
- "id": "US-203",
- "title": "Dashboard KPIs Only View",
- "description": "Ca utilizator mobil vreau Dashboard-ul principal să arate doar KPI cards pentru acces rapid",
+ "id": "US-303",
+ "title": "FAB pe Pagina Bonuri (Mutare Upload)",
+ "description": "Ca utilizator mobil vreau funcția Upload să fie în butonul FAB (+) pe pagina Bonuri",
"priority": 7,
"acceptanceCriteria": [
- "DashboardView.vue pe mobil afișează DOAR: SwipeableCards cu KPIs",
- "Adăugare 2 carduri quick-link: 'Analiză Scadențe →' și 'Facturi Detaliate →'",
- "Click pe quick-link navighează la pagina dedicată",
- "Desktop rămâne neschimbat (toate secțiunile)",
+ "ReceiptsListView.vue are buton FAB (+) în colțul dreapta-jos",
+ "Click pe FAB deschide meniu popup: Bon Nou | Upload Bulk",
+ "FAB poziționat deasupra MobileBottomNav (bottom: 72px)",
+ "Bon Nou navighează la /data-entry/receipts/new",
+ "Upload Bulk navighează la /data-entry/bulk-upload",
+ "FAB vizibil doar pe mobil (isMobile)",
"npm run build passes"
],
- "passes": true,
- "notes": "Completed in iteration 7"
+ "passes": false,
+ "notes": ""
},
{
- "id": "US-212",
- "title": "Quick Links în Dashboard Mobile",
- "description": "Ca utilizator vreau carduri clickabile în Dashboard pentru a ajunge la Scadențe și Facturi",
+ "id": "US-306",
+ "title": "Restaurare Butoane Export și Filtrare pe Rapoarte",
+ "description": "Ca utilizator mobil vreau butoane de export și filtrare pe toate rapoartele",
"priority": 8,
"acceptanceCriteria": [
- "După SwipeableCards, 2 carduri: 'Analiză Scadențe' și 'Facturi Detaliate'",
- "Design: icon + titlu + săgeată dreaptă (→)",
- "Click navighează la pagina respectivă",
- "Doar pe mobil (desktop are totul în aceeași pagină)",
+ "InvoicesView.vue: buton Export (pi-download) și Filtrare (pi-filter) în MobileTopBar actions",
+ "TrialBalanceView.vue: buton Export și Filtrare în MobileTopBar actions",
+ "BankCashRegisterView.vue: buton Export și Filtrare în MobileTopBar actions",
+ "ReceiptsListView.vue: buton Export și Filtrare în MobileTopBar actions",
+ "MaturityAnalysisView.vue: buton Export și Filtrare în MobileTopBar actions",
+ "Click pe Filtrare deschide BottomSheet cu filtrele paginii",
"npm run build passes"
],
- "passes": true,
- "notes": "Completed in iteration 8"
+ "passes": false,
+ "notes": ""
},
{
- "id": "US-207",
- "title": "Actualizare MobileBottomNav cu link Setări",
- "description": "Ca utilizator vreau butonul Setări din footer să ducă la Hub Setări",
+ "id": "US-309",
+ "title": "Cleanup Dashboard Mobile",
+ "description": "Ca utilizator mobil vreau Dashboard-ul să afișeze doar KPIs fără quick-links",
"priority": 9,
"acceptanceCriteria": [
- "MobileBottomNav: link Setări → /settings (nu /data-entry/ocr-metrics)",
- "Icon: pi-cog",
- "Active state când pe /settings sau /settings/* sau pagini admin",
- "Actualizare în toate paginile care folosesc MobileBottomNav",
+ "DashboardView.vue pe mobil: ștergere quick-link cards dacă există",
+ "Doar SwipeableCards cu KPIs pe mobil",
+ "Desktop rămâne neschimbat",
+ "MobileTopBar cu title Dashboard",
+ "MobileBottomNav cu Dashboard activ",
"npm run build passes"
],
- "passes": true,
- "notes": "Completed in iteration 9"
+ "passes": false,
+ "notes": ""
},
{
- "id": "US-213",
- "title": "Actualizare Hamburger Menu în toate paginile",
- "description": "Ca utilizator vreau hamburger menu-ul să funcționeze uniform în toată aplicația",
+ "id": "US-310",
+ "title": "Actualizare Router cu Modificările",
+ "description": "Ca developer vreau router-ul actualizat pentru a funcționa cu noile pagini",
"priority": 10,
"acceptanceCriteria": [
- "Toate paginile cu MobileTopBar: click pe ☰ deschide MobileDrawerMenu",
- "MobileDrawerMenu înlocuiește vechiul Sidebar pe mobil",
- "Desktop păstrează navigarea existentă",
+ "Rută /reports/invoices → InvoicesView funcțională",
+ "Rută /reports/maturity-analysis → MaturityAnalysisView funcțională",
+ "Rutele existente păstrate: /reports/trial-balance, /reports/bank-cash, /reports/detailed-invoices",
+ "Cleanup rute nefolosite dacă există",
+ "Toate rutele lazy loaded",
"npm run build passes"
],
- "passes": true,
- "notes": "Completed in iteration 10"
+ "passes": false,
+ "notes": ""
},
{
- "id": "US-210",
- "title": "Creare MobileActionBar Component",
- "description": "Ca developer vreau componentă reutilizabilă pentru butoane de acțiune pe mobil",
+ "id": "US-311",
+ "title": "Actualizare Documentație MOBILE_PATTERNS.md",
+ "description": "Ca developer viitor vreau documentația actualizată cu modificările din Phase 3",
"priority": 11,
"acceptanceCriteria": [
- "Componentă src/shared/components/mobile/MobileActionBar.vue creată",
- "Props: actions (array of {label, icon, severity, handler, disabled})",
- "Layout: butoane full-width sau side-by-side (2 butoane)",
- "Position: fixed bottom, above MobileBottomNav",
- "Animație: slide-up la mount",
+ "Secțiune actualizată: Footer Navigation (Dashboard, Bonuri, Facturi, Setări)",
+ "Secțiune nouă: FAB Pattern pentru acțiuni contextuale",
+ "Secțiune nouă: Tab Pattern pentru switch Clienți/Furnizori",
+ "Secțiune actualizată: Hamburger Menu grupat pe categorii",
+ "Diagrame ASCII actualizate cu noua structură navigare",
"npm run build passes"
],
- "passes": true,
- "notes": "Completed in iteration 11"
- },
- {
- "id": "US-209",
- "title": "Butoane Context-Aware în Editare Bon",
- "description": "Ca utilizator vreau butoanele din editare bon să se schimbe în funcție de starea bonului",
- "priority": 12,
- "acceptanceCriteria": [
- "ReceiptCreateUnifiedView detectează starea bonului (draft/pending/approved/rejected)",
- "Draft: Salvează | Submit pentru Aprobare | Șterge",
- "Pending: Salvează | Aprobă | Respinge (dacă are permisiuni)",
- "Approved: doar vizualizare (butoane disabled sau ascunse)",
- "Rejected: Salvează (re-edit) | Re-submit",
- "Butoane în MobileActionBar fix jos pe mobil",
- "npm run build passes"
- ],
- "passes": true,
- "notes": "Completed in iteration 12"
- },
- {
- "id": "US-211",
- "title": "Integrare MobileActionBar în ReceiptCreateUnifiedView",
- "description": "Ca utilizator vreau butoanele de acțiune pentru bon să fie în action bar pe mobil",
- "priority": 13,
- "acceptanceCriteria": [
- "ReceiptCreateUnifiedView folosește MobileActionBar pe mobil",
- "Desktop păstrează butoanele în form",
- "Buton Înapoi în MobileTopBar (deja există din US-105)",
- "Action bar dispare când se deschide BottomSheet sau alte overlay-uri",
- "npm run build passes"
- ],
- "passes": true,
- "notes": "Completed in iteration 13"
- },
- {
- "id": "US-214",
- "title": "Actualizare Documentație MOBILE_PATTERNS.md",
- "description": "Ca developer viitor vreau documentația actualizată cu noile componente și pattern-uri",
- "priority": 14,
- "acceptanceCriteria": [
- "Secțiune nouă: MobileDrawerMenu (usage, props)",
- "Secțiune nouă: MobileActionBar (usage, props)",
- "Secțiune actualizată: Navigation patterns (footer → settings hub)",
- "Diagrame ASCII actualizate cu noile rute",
- "npm run build passes (doar pentru validare că nu s-a stricat nimic)"
- ],
- "passes": true,
- "notes": "Completed in iteration 14"
+ "passes": false,
+ "notes": ""
}
]
}
diff --git a/scripts/ralph/progress.txt b/scripts/ralph/progress.txt
index 6a6ddaa..c375d0d 100644
--- a/scripts/ralph/progress.txt
+++ b/scripts/ralph/progress.txt
@@ -1,90 +1,17 @@
-# Ralph Progress Log - Phase 2
-Started: Mon Jan 12 12:03:01 PM UTC 2026
-Project: mobile-navigation-improvements
+# Ralph Progress Log - Phase 3
+Started: Mon Jan 12 01:35:36 PM UTC 2026
+Project: mobile-fixes-phase3
Branch: ralph/unified-mobile-md (continuing)
-User Stories: 14 (US-201 to US-214)
+User Stories: 11 (US-301 to US-311)
---
-[2026-01-12 12:03:07] Starting Ralph for project: mobile-navigation-improvements
-[2026-01-12 12:03:07] Max iterations: 100
-[2026-01-12 12:03:07] === Iteration 1/100 ===
-[2026-01-12 12:03:07] Working on story: US-201
-[2026-01-12 12:03:07] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_1_US-201.log)
-[2026-01-12 12:05:02] SUCCESS: Story US-201 passed!
-[2026-01-12 12:05:02] Changes committed
-[2026-01-12 12:05:02] Progress: 1/14 stories completed
-[2026-01-12 12:05:04] === Iteration 2/100 ===
-[2026-01-12 12:05:04] Working on story: US-202
-[2026-01-12 12:05:04] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_2_US-202.log)
-[2026-01-12 12:07:29] SUCCESS: Story US-202 passed!
-[2026-01-12 12:07:29] Changes committed
-[2026-01-12 12:07:29] Progress: 2/14 stories completed
-[2026-01-12 12:07:31] === Iteration 3/100 ===
-[2026-01-12 12:07:31] Working on story: US-208
-[2026-01-12 12:07:31] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_3_US-208.log)
-[2026-01-12 12:09:57] SUCCESS: Story US-208 passed!
-[2026-01-12 12:09:57] Changes committed
-[2026-01-12 12:09:57] Progress: 3/14 stories completed
-[2026-01-12 12:09:59] === Iteration 4/100 ===
-[2026-01-12 12:09:59] Working on story: US-206
-[2026-01-12 12:09:59] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_4_US-206.log)
-[2026-01-12 12:12:24] SUCCESS: Story US-206 passed!
-[2026-01-12 12:12:24] Changes committed
-[2026-01-12 12:12:24] Progress: 4/14 stories completed
-[2026-01-12 12:12:26] === Iteration 5/100 ===
-[2026-01-12 12:12:26] Working on story: US-204
-[2026-01-12 12:12:26] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_5_US-204.log)
-[2026-01-12 12:14:24] SUCCESS: Story US-204 passed!
-[2026-01-12 12:14:24] Changes committed
-[2026-01-12 12:14:24] Progress: 5/14 stories completed
-[2026-01-12 12:14:26] === Iteration 6/100 ===
-[2026-01-12 12:14:26] Working on story: US-205
-[2026-01-12 12:14:26] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_6_US-205.log)
-[2026-01-12 12:21:23] SUCCESS: Story US-205 passed!
-[2026-01-12 12:21:24] Changes committed
-[2026-01-12 12:21:24] Progress: 6/14 stories completed
-[2026-01-12 12:21:26] === Iteration 7/100 ===
-[2026-01-12 12:21:26] Working on story: US-203
-[2026-01-12 12:21:26] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_7_US-203.log)
-[2026-01-12 12:23:00] SUCCESS: Story US-203 passed!
-[2026-01-12 12:23:00] Changes committed
-[2026-01-12 12:23:00] Progress: 7/14 stories completed
-[2026-01-12 12:23:02] === Iteration 8/100 ===
-[2026-01-12 12:23:02] Working on story: US-212
-[2026-01-12 12:23:02] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_8_US-212.log)
-[2026-01-12 12:23:50] SUCCESS: Story US-212 passed!
-[2026-01-12 12:23:50] Changes committed
-[2026-01-12 12:23:50] Progress: 8/14 stories completed
-[2026-01-12 12:23:52] === Iteration 9/100 ===
-[2026-01-12 12:23:52] Working on story: US-207
-[2026-01-12 12:23:52] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_9_US-207.log)
-[2026-01-12 12:28:03] SUCCESS: Story US-207 passed!
-[2026-01-12 12:28:03] Changes committed
-[2026-01-12 12:28:03] Progress: 9/14 stories completed
-[2026-01-12 12:28:05] === Iteration 10/100 ===
-[2026-01-12 12:28:05] Working on story: US-213
-[2026-01-12 12:28:05] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_10_US-213.log)
-[2026-01-12 12:36:45] SUCCESS: Story US-213 passed!
-[2026-01-12 12:36:45] Changes committed
-[2026-01-12 12:36:45] Progress: 10/14 stories completed
-[2026-01-12 12:36:47] === Iteration 11/100 ===
-[2026-01-12 12:36:47] Working on story: US-210
-[2026-01-12 12:36:47] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_11_US-210.log)
-[2026-01-12 12:38:10] SUCCESS: Story US-210 passed!
-[2026-01-12 12:38:10] Changes committed
-[2026-01-12 12:38:10] Progress: 11/14 stories completed
-[2026-01-12 12:38:12] === Iteration 12/100 ===
-[2026-01-12 12:38:12] Working on story: US-209
-[2026-01-12 12:38:12] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_12_US-209.log)
-[2026-01-12 12:40:29] SUCCESS: Story US-209 passed!
-[2026-01-12 12:40:29] Changes committed
-[2026-01-12 12:40:29] Progress: 12/14 stories completed
-[2026-01-12 12:40:31] === Iteration 13/100 ===
-[2026-01-12 12:40:31] Working on story: US-211
-[2026-01-12 12:40:31] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_13_US-211.log)
-[2026-01-12 12:42:01] SUCCESS: Story US-211 passed!
-[2026-01-12 12:42:01] Changes committed
-[2026-01-12 12:42:01] Progress: 13/14 stories completed
-[2026-01-12 12:42:03] === Iteration 14/100 ===
-[2026-01-12 12:42:03] Working on story: US-214
-[2026-01-12 12:42:03] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_14_US-214.log)
-[2026-01-12 12:45:42] SUCCESS: Story US-214 passed!
+[2026-01-12 13:35:41] Starting Ralph for project: mobile-fixes-phase3
+[2026-01-12 13:35:41] Max iterations: 100
+[2026-01-12 13:35:41] === Iteration 1/100 ===
+[2026-01-12 13:35:41] Working on story: US-307
+[2026-01-12 13:35:41] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_1_US-307.log)
+[2026-01-12 13:35:46] Starting Ralph for project: mobile-fixes-phase3
+[2026-01-12 13:35:46] Max iterations: 100
+[2026-01-12 13:35:46] === Iteration 1/100 ===
+[2026-01-12 13:35:46] Working on story: US-307
+[2026-01-12 13:35:46] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_1_US-307.log)
+[2026-01-12 13:38:58] SUCCESS: Story US-307 passed!
diff --git a/src/modules/data-entry/views/receipts/ReceiptsListView.vue b/src/modules/data-entry/views/receipts/ReceiptsListView.vue
index 1d7d844..4fdf38e 100644
--- a/src/modules/data-entry/views/receipts/ReceiptsListView.vue
+++ b/src/modules/data-entry/views/receipts/ReceiptsListView.vue
@@ -558,11 +558,8 @@
-
+
+
@@ -1119,20 +1116,8 @@ const handleTopBarAction = (action) => {
}
}
-// US-103: Bottom nav items for MobileBottomNav component
-const mobileBottomNavItems = computed(() => [
- { to: '/data-entry', icon: 'pi pi-receipt', label: 'Bonuri', active: true },
- { icon: 'pi pi-cloud-upload', label: 'Upload' }, // No 'to' - handled via item-click
- { to: '/reports/dashboard', icon: 'pi pi-chart-bar', label: 'Rapoarte' },
- { to: '/settings', icon: 'pi pi-cog', label: 'Setări' }
-])
-
-// US-103: Handle bottom nav clicks for items without routes
-const handleBottomNavClick = (item) => {
- if (item.label === 'Upload') {
- openBulkFileInput()
- }
-}
+// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults
+// Upload functionality moved to FAB (US-303)
// US-103/US-113: Selection footer actions for MobileSelectionFooter component
// Bonuri batch actions: Delete + Export
diff --git a/src/modules/reports/views/BankCashRegisterView.vue b/src/modules/reports/views/BankCashRegisterView.vue
index 25129c1..fb40277 100644
--- a/src/modules/reports/views/BankCashRegisterView.vue
+++ b/src/modules/reports/views/BankCashRegisterView.vue
@@ -381,11 +381,8 @@
-
-
+
+
@@ -459,12 +456,7 @@ const handleTopBarAction = (action) => {
};
// US-109: Bottom nav items for MobileBottomNav component
-const mobileBottomNavItems = computed(() => [
- { to: "/data-entry", icon: "pi pi-receipt", label: "Bonuri" },
- { to: "/reports/bank-cash-register", icon: "pi pi-wallet", label: "Trezorerie", active: true },
- { to: "/reports/dashboard", icon: "pi pi-chart-bar", label: "Rapoarte" },
- { to: "/settings", icon: "pi pi-cog", label: "Setări" }
-]);
+// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults
// Handle window resize
const handleResize = () => {
diff --git a/src/modules/reports/views/CacheStatsView.vue b/src/modules/reports/views/CacheStatsView.vue
index 1b50475..e96215e 100644
--- a/src/modules/reports/views/CacheStatsView.vue
+++ b/src/modules/reports/views/CacheStatsView.vue
@@ -197,8 +197,8 @@
-
-
+
+
@@ -263,18 +263,7 @@ const handleTopBarAction = (action) => {
}
};
-// US-111: Bottom nav items for MobileBottomNav component
-const mobileBottomNavItems = computed(() => [
- { to: "/data-entry", icon: "pi pi-receipt", label: "Bonuri" },
- {
- to: "/reports/cache-stats",
- icon: "pi pi-database",
- label: "Cache",
- active: true,
- },
- { to: "/reports/dashboard", icon: "pi pi-chart-bar", label: "Rapoarte" },
- { to: "/settings", icon: "pi pi-cog", label: "Setări" },
-]);
+// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults
// US-111: Handle window resize
const handleResize = () => {
diff --git a/src/modules/reports/views/DashboardView.vue b/src/modules/reports/views/DashboardView.vue
index 36ac6d1..4774d9e 100644
--- a/src/modules/reports/views/DashboardView.vue
+++ b/src/modules/reports/views/DashboardView.vue
@@ -179,8 +179,8 @@
-
-
+
+