Files
roa2web-service-auto/tasks/prd-mobile-fixes-phase4.md
Claude Agent 65eff42312 feat(mobile-fixes-phase4): Complete US-401 - Fix Layout Principal - Ascundere Header Desktop pe Mobil
Implemented by Ralph autonomous loop.
Iteration: 1

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-12 18:45:30 +00:00

189 lines
8.5 KiB
Markdown

# PRD: Mobile Fixes Phase 4 - Layout & State Issues
## 1. Introducere
După completarea Phase 3 (11/11 stories), au fost identificate probleme critice în modul mobil prin testare Playwright. Cauza principală este că layout-ul desktop (AppHeader + sidebar) rămâne vizibil pe viewport mobil, acoperind componentele mobile (MobileTopBar, MobileDrawerMenu). În plus, există probleme cu persistența bonurilor cu eroare la upload.
## 2. Obiective
### Obiectiv Principal
- Corectarea layout-ului mobil pentru a afișa DOAR componentele mobile pe viewport < 768px
### Obiective Secundare
- Restaurarea corectă a bonurilor cu eroare după refresh
- Permiterea editării bonurilor cu eroare pentru corectare
### Metrici de Succes
- Playwright test: Header desktop ASCUNS pe viewport 375px
- Playwright test: MobileTopBar cu butoane filter/export VIZIBILE
- Playwright test: MobileDrawerMenu afișează secțiunea ANALIZE
- Playwright test: Bonuri cu eroare rămân vizibile după refresh
## 3. User Stories
### US-401: Fix Layout Principal - Ascundere Header Desktop pe Mobil
**Ca** utilizator mobil
**Vreau** văd doar MobileTopBar și MobileBottomNav
**Pentru că** header-ul desktop ocupă spațiu și acoperă butoanele mobile
**Acceptance Criteria:**
- [ ] AppHeader.vue are `v-if="!isMobile"` pentru a se ascunde pe mobil
- [ ] Sidebar-ul desktop (navigation cu Rapoarte/Introduceri Date/Sistem) este ascuns pe mobil
- [ ] MobileTopBar este singurul header vizibil pe viewport < 768px
- [ ] Nu există suprapunere între header desktop și MobileTopBar
- [ ] npm run build passes
- [ ] Verify in browser (375x667): Header desktop NU este vizibil
### US-402: Fix MobileTopBar - Butoane Filter/Export Vizibile
**Ca** utilizator mobil pe pagina Facturi/Bonuri
**Vreau** văd butoanele de filtrare și export în header
**Pentru că** acum sunt ascunse/acoperite de header-ul desktop
**Acceptance Criteria:**
- [ ] Pe InvoicesView.vue, butoanele Filter/Refresh/Export sunt vizibile în MobileTopBar
- [ ] Pe ReceiptsListView.vue, butoanele Filter/Export/More sunt vizibile în MobileTopBar
- [ ] Click pe butonul Filter deschide BottomSheet cu filtre
- [ ] Click pe butonul Export declanșează descărcarea
- [ ] npm run build passes
- [ ] Verify in browser (375x667): Butoanele sunt vizibile și funcționale pe pagina Facturi
### US-403: Fix MobileDrawerMenu - Secțiunea ANALIZE Vizibilă
**Ca** utilizator mobil
**Vreau** văd secțiunea ANALIZE în hamburger menu
**Pentru că** acum se deschide sidebar-ul desktop în loc de MobileDrawerMenu
**Acceptance Criteria:**
- [ ] Click pe butonul Meniu din MobileTopBar deschide MobileDrawerMenu (nu sidebar desktop)
- [ ] MobileDrawerMenu afișează secțiunile: PRINCIPALE, RAPOARTE, ANALIZE, ADMINISTRARE
- [ ] Secțiunea ANALIZE conține: Scadențe, Facturi Detaliate
- [ ] Link-urile din ANALIZE navighează corect
- [ ] npm run build passes
- [ ] Verify in browser (375x667): Click pe Meniu apare drawer cu secțiunea ANALIZE
### US-404: Fix Spațiu Blank - Padding Corect pentru Mobile
**Ca** utilizator mobil
**Vreau** ca paginile nu aibă spațiu blank excesiv în partea de sus
**Pentru că** acum există ~120px spațiu gol unde ar fi header-ul desktop
**Acceptance Criteria:**
- [ ] Paginile de rapoarte au padding-top corect pentru MobileTopBar (56px)
- [ ] Nu există spațiu blank între MobileTopBar și conținut
- [ ] Tab-urile Clienți/Furnizori sunt imediat sub MobileTopBar
- [ ] npm run build passes
- [ ] Verify in browser (375x667): Nu există spațiu blank excesiv pe pagina Facturi
### US-405: Fix batchProgressStore - Restaurare Joburi Failed
**Ca** utilizator care a uploadat bonuri cu erori OCR
**Vreau** ca bonurile cu eroare rămână vizibile după refresh
**Pentru că** acum dispar și nu pot fi editate
**Acceptance Criteria:**
- [ ] `restoreJobsFromBatch()` în batchProgressStore.js include joburi cu status 'failed'
- [ ] Batch-ul NU este șters din localStorage dacă are joburi failed
- [ ] După refresh, bonurile cu eroare sunt afișate cu status vizual "Eroare"
- [ ] `unifiedItems` computed include joburile failed pentru afișare
- [ ] npm run build passes
- [ ] Verify in browser: Upload bon cu eroare Refresh Bonul cu eroare rămâne vizibil
### US-406: Fix UI Bonuri cu Eroare - Afișare Corectă pe Mobil
**Ca** utilizator mobil
**Vreau** văd clar un bon are eroare (nu "în procesare")
**Pentru că** acum bonurile failed arată ca și cum ar fi încă în procesare
**Acceptance Criteria:**
- [ ] Bonurile cu status 'failed' afișează chip/badge "Eroare" (roșu)
- [ ] NU afișează "În procesare" pentru bonuri failed
- [ ] Mesajul de eroare este vizibil (truncat dacă e prea lung)
- [ ] npm run build passes
- [ ] Verify in browser (375x667): Bon cu eroare arată "Eroare" nu "În procesare"
### US-407: Fix Editare Bonuri cu Eroare
**Ca** utilizator care are un bon cu eroare OCR
**Vreau** pot edita bonul pentru a corecta erorile manual
**Pentru că** acum nu pot salva modificările sau re-trimite pe workflow
**Acceptance Criteria:**
- [ ] Click pe bon cu eroare deschide formularul de editare
- [ ] La salvare, `processing_status` este resetat la NULL
- [ ] După salvare, bonul poate fi trimis pe workflow (Submit for Approval)
- [ ] Backend endpoint PATCH /receipts/{id} resetează processing_status
- [ ] npm run build passes
- [ ] Verify in browser: Editează bon cu eroare Salvează Poate fi trimis pe workflow
### US-408: Verificare Finală cu Playwright
**Ca** developer
**Vreau** verificare automată a tuturor fix-urilor
**Pentru că** trebuie confirmate toate scenariile înainte de merge
**Acceptance Criteria:**
- [ ] Test 1: Viewport 375x667 Header desktop ASCUNS
- [ ] Test 2: Viewport 375x667 MobileTopBar cu butoane VIZIBILE
- [ ] Test 3: Click Meniu MobileDrawerMenu cu ANALIZE
- [ ] Test 4: Pagina Facturi Tab-uri + butoane imediat vizibile (fără blank)
- [ ] Test 5: Upload bon cu eroare Arată "Eroare" nu "În procesare"
- [ ] Test 6: Refresh Bonul cu eroare rămâne
- [ ] npm run build passes
## 4. Cerințe Funcționale
1. [REQ-001] Pe viewport < 768px, AppHeader și sidebar desktop trebuie ascunse complet
2. [REQ-002] MobileTopBar trebuie fie singurul header vizibil pe mobil
3. [REQ-003] MobileDrawerMenu trebuie se deschidă la click pe butonul Meniu din MobileTopBar
4. [REQ-004] Butoanele actions din MobileTopBar trebuie fie vizibile și funcționale
5. [REQ-005] batchProgressStore trebuie restaureze și afișeze joburi cu status 'failed'
6. [REQ-006] Editarea unui bon cu eroare trebuie reseteze processing_status pentru re-workflow
## 5. Non-Goals (Ce NU facem)
- NU modificăm layout-ul desktop (rămâne neschimbat)
- NU adăugăm funcționalități noi (doar fix-uri)
- NU modificăm stilurile cardurilor de bonuri
- NU schimbăm structura hamburger menu (doar ne asigurăm se deschide corect)
## 6. Considerații Tehnice
### Stack/Tehnologii
- Vue 3 Composition API
- PrimeVue components
- Pinia stores (batchProgressStore)
- CSS media queries / v-if cu isMobile computed
### Patterns de Urmat
- `isMobile` computed bazat pe `window.innerWidth < 768`
- `v-if="!isMobile"` pentru componente desktop-only
- `v-if="isMobile"` pentru componente mobile-only
### Fișiere Cheie de Modificat
| Fișier | Modificare |
|--------|------------|
| `src/App.vue` sau layout component | v-if pentru AppHeader/sidebar |
| `src/shared/components/layout/AppHeader.vue` | Verificare isMobile |
| `src/modules/reports/views/InvoicesView.vue` | CSS padding-top |
| `src/modules/data-entry/views/ReceiptsListView.vue` | CSS padding-top |
| `src/stores/batchProgressStore.js` | Include 'failed' în restore |
| `backend/modules/data_entry/routers/receipts.py` | Reset processing_status |
### Riscuri Tehnice
- Modificarea layout-ului principal poate afecta toate paginile - testare completă necesară
- isMobile computed trebuie fie reactiv la resize
## 7. Considerații UI/UX
- Mobile layout trebuie fie curat, fără suprapuneri
- Butoanele touch target minim 48px
- Feedback vizual clar pentru starea bonurilor (Eroare vs În procesare)
- Tranziție smooth pentru MobileDrawerMenu
## 8. Success Metrics
- 100% teste Playwright trec
- 0 suprapuneri vizuale pe viewport mobil
- Bonuri cu eroare persistent după refresh
- Timp de încărcare pagină neschimbat
## 9. Open Questions
- [x] Cauza exactă a problemei? Header desktop nu este ascuns pe mobil (confirmat prin Playwright)
- [x] isMobile computed există? Trebuie verificat în layout principal
- [ ] Există alte pagini afectate de layout? De verificat după fix