Files
roa2web-service-auto/scripts/ralph/prd.json
Claude Agent 9d66a0b2aa feat(unified-mobile-desktop-ui): Complete US-505 - Meniu Hamburger Desktop = Mobil
Implemented by Ralph autonomous loop.
Iteration: 5

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-12 22:29:44 +00:00

411 lines
17 KiB
JSON

{
"projectName": "unified-mobile-desktop-ui",
"branchName": "ralph/unified-mobile-md",
"description": "Unificare UI/UX mobil-desktop: header actions bar (filter/reset/export), BottomSheet filtre, meniu hamburger unificat, fix bugs (grupuri expandabile, overlay butoane), MD3 styling pentru meniuri și dialoguri",
"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/)",
"Mobile: toate paginile folosesc MobileTopBar + MobileBottomNav",
"Mobile: filtrele se pun în BottomSheet, NU inline",
"Mobile: v-if='isMobile' pentru componente mobile-only",
"Desktop: v-if='!isMobile' pentru componente desktop-only"
],
"mobileLayoutTokens": {
"topBarHeight": "56px",
"bottomNavHeight": "56px",
"fabSize": "56px",
"fabBottomOffset": "72px",
"touchTargetMin": "48px"
}
},
"referenceFiles": {
"designReference": "src/modules/reports/views/InvoicesView.vue",
"mobileComponents": [
"src/shared/components/mobile/MobileTopBar.vue",
"src/shared/components/mobile/MobileDrawerMenu.vue",
"src/shared/components/mobile/MobileBottomNav.vue",
"src/shared/components/mobile/BottomSheet.vue",
"src/shared/components/mobile/MobileSelectionFooter.vue"
]
},
"userStories": [
{
"id": "US-501",
"title": "Header Actions Bar Unificat - Rapoarte",
"description": "Ca utilizator vreau butoane de Filtre, Reset Filtre și Export (PDF/XLSX dropdown) în header-ul din dreapta pe toate rapoartele",
"priority": 1,
"scope": "LARGE - Multiple pages",
"pages": [
"/reports/trial-balance",
"/reports/cash-bank",
"/reports/detailed-invoices/clients",
"/reports/detailed-invoices/suppliers",
"/reports/maturity"
],
"acceptanceCriteria": [
"Fiecare pagină are în header dreapta: [Filter icon] [Reset icon] [Export dropdown]",
"Export dropdown conține: 'Export PDF' și 'Export XLSX'",
"Butonul Filter are indicator vizual (active state) când filtrele sunt aplicate",
"Butonul Reset resetează toate filtrele la valori implicite",
"Pe mobil, acțiunile sunt în MobileTopBar actions array",
"Pe desktop, acțiunile sunt într-un grup în header dreapta",
"Pattern identic cu InvoicesView.vue (referință)",
"npm run build passes",
"Verify in browser: butoanele funcționează pe desktop și mobil"
],
"passes": true,
"notes": "Completed in iteration 1"
},
{
"id": "US-502",
"title": "Header Actions Bar Unificat - Lista Bonuri",
"description": "Ca utilizator vreau butoane de Filtre, Reset Filtre și Export în header-ul listei de bonuri, consistent cu rapoartele",
"priority": 2,
"pages": [
"/data-entry"
],
"acceptanceCriteria": [
"Lista bonuri are în header: [Filter] [Reset] [Export dropdown]",
"Stilul butoanelor este identic cu cel din /reports/invoices",
"Export dropdown: 'Export PDF' și 'Export XLSX'",
"Butoanele vechi 'Filtrează' și 'Resetează' sunt înlocuite cu noul pattern (icons)",
"npm run build passes",
"Verify in browser: butoanele au același aspect ca pe pagina Facturi"
],
"passes": true,
"notes": "Completed in iteration 2"
},
{
"id": "US-503",
"title": "BottomSheet Filtre pentru Lista Bonuri (Mobil)",
"description": "Ca utilizator pe mobil vreau ca filtrele din lista de bonuri să se deschidă într-un BottomSheet, nu inline",
"priority": 3,
"pages": [
"/data-entry"
],
"acceptanceCriteria": [
"Click pe butonul Filter deschide BottomSheet component (nu inline filters)",
"BottomSheet conține toate filtrele existente (status, dată, search, etc.)",
"BottomSheet are butoane 'Resetează' și 'Aplică' în footer",
"Swipe-down sau tap outside închide BottomSheet",
"Pattern identic cu InvoicesView.vue BottomSheet",
"npm run build passes",
"Verify in browser mobil (375x667): filtrele apar în BottomSheet"
],
"passes": true,
"notes": "Completed in iteration 3"
},
{
"id": "US-504",
"title": "Fix Export Endpoints Backend",
"description": "Ca utilizator vreau ca exportul PDF/XLSX să funcționeze fără erori pe toate paginile",
"priority": 4,
"acceptanceCriteria": [
"Identificate și fixate erorile din endpoint-urile de export existente",
"Export PDF funcțional pentru: Facturi, Balanță, Casă și Bancă, Facturi Detaliate, Scadențe, Bonuri",
"Export XLSX funcțional pentru aceleași pagini",
"Exportul include DOAR datele filtrate (nu toate datele)",
"Folosește formatarea PDF existentă de la Facturi/Balanță/Casă și Bancă",
"npm run build passes",
"Verify in browser: descărcare PDF și XLSX reușită"
],
"passes": true,
"notes": "Completed in iteration 4"
},
{
"id": "US-505",
"title": "Meniu Hamburger Desktop = Mobil",
"description": "Ca utilizator pe desktop vreau ca meniul hamburger să aibă aceeași structură ca pe mobil",
"priority": 5,
"acceptanceCriteria": [
"Meniul desktop are secțiunile: PRINCIPALE, RAPOARTE, ANALIZE, ADMINISTRARE",
"Ordinea și itemii sunt identici cu MobileDrawerMenu",
"Stilul vizual este consistent (poate fi adaptat pentru desktop dar structura identică)",
"npm run build passes",
"Verify in browser desktop: meniul arată la fel ca pe mobil ca structură"
],
"passes": true,
"notes": "Completed in iteration 5"
},
{
"id": "US-506",
"title": "Fix MobileDrawerMenu - Deconectare Vizibil",
"description": "Ca utilizator pe mobil vreau să văd și să pot accesa butonul de Deconectare care este ascuns sub bara de navigare",
"priority": 6,
"acceptanceCriteria": [
"Butonul 'Deconectare' este complet vizibil în drawer menu",
"Adăugat padding-bottom suficient pentru a nu fi acoperit de MobileBottomNav (min 72px)",
"Scroll funcționează corect dacă meniul este mai lung decât ecranul",
"npm run build passes",
"Verify in browser mobil (375x667): butonul Deconectare este vizibil și clickabil"
],
"passes": false,
"notes": ""
},
{
"id": "US-507",
"title": "Selecție Companie/Perioadă în MobileDrawerMenu",
"description": "Ca utilizator pe mobil vreau să pot selecta compania și perioada contabilă din drawer menu",
"priority": 7,
"acceptanceCriteria": [
"MobileDrawerMenu include selector companie sub secțiunea profil",
"Selector perioadă contabilă disponibil lângă selector companie",
"Selectarea companiei/perioadei actualizează datele pe toate paginile (folosește store-urile existente)",
"Valorile selectate persistă între sesiuni (localStorage)",
"UI similar cu selectoarele din desktop header",
"npm run build passes",
"Verify in browser mobil: pot schimba compania și perioada din drawer"
],
"passes": false,
"notes": ""
},
{
"id": "US-508",
"title": "Selector Temă în MobileDrawerMenu (Dark/Light/Auto)",
"description": "Ca utilizator pe mobil vreau să pot schimba tema din drawer menu",
"priority": 8,
"acceptanceCriteria": [
"Opțiune de schimbare temă în MobileDrawerMenu (lângă alte setări/footer)",
"Trei opțiuni: Light, Dark, Auto (system)",
"Schimbarea temei se aplică imediat",
"Preferința persistă în localStorage",
"Folosește themeStore existent",
"npm run build passes",
"Verify in browser mobil: tema se schimbă corect din drawer"
],
"passes": false,
"notes": ""
},
{
"id": "US-509",
"title": "Fix Detailed Invoices - Grupuri Expandabile Desktop",
"description": "Ca utilizator pe desktop vreau ca grupurile de facturi per client/furnizor să se expandeze la click (acum funcționează doar pe mobil)",
"priority": 9,
"pages": [
"/reports/detailed-invoices/clients",
"/reports/detailed-invoices/suppliers"
],
"acceptanceCriteria": [
"Click pe un grup (client/furnizor) expandează/colapsează facturile individuale",
"Indicator vizual pentru expand/collapse (chevron icon care rotește)",
"Animație smooth la expand/collapse",
"Comportament identic cu versiunea mobilă",
"npm run build passes",
"Verify in browser desktop: grupurile se extind la click"
],
"passes": false,
"notes": ""
},
{
"id": "US-510",
"title": "Detailed Invoices - Eliminare Filtru Clienți/Furnizori",
"description": "Ca utilizator vreau ca filtrele din Facturi Detaliate să NU aibă selecția Clienți/Furnizori pentru că sunt pagini separate",
"priority": 10,
"pages": [
"/reports/detailed-invoices/clients",
"/reports/detailed-invoices/suppliers"
],
"acceptanceCriteria": [
"Pagina /reports/detailed-invoices/clients NU are dropdown Clienți/Furnizori în filtre",
"Pagina /reports/detailed-invoices/suppliers NU are dropdown Clienți/Furnizori în filtre",
"Tipul (clienți/furnizori) este determinat automat din URL/route params",
"npm run build passes",
"Verify in browser: filtrul Clienți/Furnizori nu mai apare"
],
"passes": false,
"notes": ""
},
{
"id": "US-511",
"title": "Detailed Invoices - Eliminare Buton Filtru Duplicat",
"description": "Ca utilizator vreau un singur buton de filtre în header, nu și deasupra tabelului",
"priority": 11,
"pages": [
"/reports/detailed-invoices/clients",
"/reports/detailed-invoices/suppliers"
],
"acceptanceCriteria": [
"Butonul de filtre apare DOAR în header (dreapta)",
"Eliminat butonul duplicat de deasupra tabelului",
"Funcționalitatea rămâne identică (deschide BottomSheet pe mobil, filtre pe desktop)",
"npm run build passes",
"Verify in browser: un singur buton de filtre"
],
"passes": false,
"notes": ""
},
{
"id": "US-512",
"title": "Detailed Invoices - Fix Overlay Butoane Ascunse",
"description": "Ca utilizator vreau ca în overlay-ul cu selecții să văd toate butoanele (Reset Filtre și Export sunt ascunse sub footer)",
"priority": 12,
"pages": [
"/reports/detailed-invoices/clients",
"/reports/detailed-invoices/suppliers"
],
"acceptanceCriteria": [
"Toate butoanele din overlay sunt vizibile",
"Butoanele nu sunt acoperite de footer",
"Scroll funcționează dacă conținutul e mare",
"Z-index corect pentru overlay vs footer",
"npm run build passes",
"Verify in browser: toate butoanele sunt vizibile în overlay"
],
"passes": false,
"notes": ""
},
{
"id": "US-513",
"title": "Analize Scadențe - Eliminare Secțiune Facturi Detaliate",
"description": "Ca utilizator vreau ca pagina Analize Scadențe să NU conțină secțiunea Facturi Detaliate pentru că sunt pagini separate",
"priority": 13,
"pages": [
"/reports/maturity"
],
"acceptanceCriteria": [
"Pagina /reports/maturity afișează DOAR analiza scadențelor",
"Secțiunea 'Facturi Detaliate' este eliminată complet din această pagină",
"Link-urile către Facturi Detaliate rămân în meniu (separate)",
"npm run build passes",
"Verify in browser: pagina conține doar scadențe"
],
"passes": false,
"notes": ""
},
{
"id": "US-514",
"title": "Fix Spațiu Blank Excesiv Top (Toate Paginile)",
"description": "Ca utilizator vreau ca paginile să nu aibă spațiu gol mare în partea de sus",
"priority": 14,
"acceptanceCriteria": [
"Identificat cauza spațiului blank (margin/padding excesiv)",
"Redus spațiul la maximum 16px între header și conținut",
"Verificate și corectate: Facturi, Balanță, Casă și Bancă, Facturi Detaliate, Scadențe, Bonuri",
"Layout-ul rămâne corect pe toate device-urile (mobil și desktop)",
"npm run build passes",
"Verify in browser: spațiul blank este eliminat pe toate paginile"
],
"passes": false,
"notes": ""
},
{
"id": "US-515",
"title": "Lista Bonuri - Meniu 'Bon Nou/Bulk Upload' Material Design",
"description": "Ca utilizator vreau ca meniul pentru Bon Nou și Bulk Upload să arate modern, Material Design (acum arată înghesuit)",
"priority": 15,
"pages": [
"/data-entry"
],
"acceptanceCriteria": [
"Meniul redesenat în stil Material Design 3",
"Spacing adecvat între opțiuni (min 44px touch targets)",
"Iconițe clare pentru fiecare opțiune (pi-plus pentru Bon Nou, pi-upload pentru Bulk)",
"Hover/active states vizibile cu feedback vizual",
"Animații smooth la deschidere/închidere",
"Folosește design tokens pentru spacing și culori",
"npm run build passes",
"Verify in browser: meniul arată modern și consistent"
],
"passes": false,
"notes": ""
},
{
"id": "US-516",
"title": "Lista Bonuri - Meniu Acțiuni Per Bon Material Design",
"description": "Ca utilizator vreau ca meniul de acțiuni pentru fiecare bon (⋮) să arate modern și consistent",
"priority": 16,
"pages": [
"/data-entry"
],
"acceptanceCriteria": [
"Meniul acțiuni (Vizualizare, Editare, Ștergere) redesenat MD3",
"Opțiuni cu iconițe și text clar",
"Touch targets min 44px",
"Divider între acțiuni normale și destructive (Ștergere)",
"Folosește design tokens",
"npm run build passes",
"Verify in browser: meniul arată modern"
],
"passes": false,
"notes": ""
},
{
"id": "US-517",
"title": "Lista Bonuri Desktop - Dialog Ștergere Material Design",
"description": "Ca utilizator pe desktop vreau ca dialogul de confirmare ștergere să arate modern (acum arată înghesuit)",
"priority": 17,
"pages": [
"/data-entry"
],
"acceptanceCriteria": [
"Dialog redesenat în stil Material Design 3",
"Titlu clar: 'Șterge bonul?'",
"Mesaj descriptiv cu detalii bon (magazin, sumă)",
"Butoane: 'Anulează' (secondary) și 'Șterge' (danger/severity)",
"Spacing și padding corespunzătoare (folosește design tokens)",
"npm run build passes",
"Verify in browser: dialogul arată modern"
],
"passes": false,
"notes": ""
},
{
"id": "US-518",
"title": "Creare/Vizualizare/Editare Bon - Butoane Doar Sus",
"description": "Ca utilizator vreau ca în paginile de creare, vizualizare și editare bon, butoanele să fie DOAR în partea de sus",
"priority": 18,
"pages": [
"/data-entry/receipts/new",
"/data-entry/receipts/:id",
"/data-entry/receipts/:id/edit"
],
"acceptanceCriteria": [
"Pagina creare bon: butoane (Salvează, Anulează) doar în header/top",
"Pagina vizualizare bon: butoane (Editează, Șterge, Înapoi) doar în header/top",
"Pagina editare bon: butoane (Salvează, Anulează) doar în header/top",
"Eliminate butoanele din footer/body dacă există",
"Pe mobil: butoanele sunt în MobileTopBar actions",
"Pe desktop: butoanele sunt în header dreapta",
"npm run build passes",
"Verify in browser: butoane doar în header pe toate cele 3 pagini"
],
"passes": false,
"notes": ""
},
{
"id": "US-519",
"title": "Separare Casă și Bancă în Pagini Distincte",
"description": "Ca utilizator vreau ca Casă și Bancă să fie pagini separate (nu combinate) pentru navigare mai clară",
"priority": 19,
"pages": [
"/reports/cash",
"/reports/bank"
],
"acceptanceCriteria": [
"Pagină separată pentru Casă: /reports/cash",
"Pagină separată pentru Bancă: /reports/bank",
"Fiecare pagină are propriul titlu (Casă / Bancă)",
"Meniul hamburger (desktop și mobil) are intrări separate pentru Casă și Bancă",
"MobileDrawerMenu actualizat cu linkuri separate în secțiunea RAPOARTE",
"Rutele vechi /reports/cash-bank redirect către /reports/cash sau sunt eliminate",
"Filtrele și exportul funcționează independent pe fiecare pagină",
"Backend: endpoint-uri separate sau parametru pentru a filtra cash vs bank",
"npm run build passes",
"Verify in browser desktop: Casă și Bancă sunt pagini separate accesibile din meniu",
"Verify in browser mobil: Casă și Bancă sunt pagini separate în MobileDrawerMenu"
],
"passes": false,
"notes": ""
}
]
}