MRA-06 — Reseller app — promotions & daily offers
Daily offers with countdown, promotions list and detail with eligible products.
| Field | Details |
|---|---|
| Task code | MRA-06 |
| Phase | P1 — V1 build & integration |
| Product scope | V1 |
| Status | Planned |
| Start | Tue 17 Nov 2026 |
| Due | Tue 17 Nov 2026 |
| Responsible | Imad — Mobile developer (Flutter) |
| Co-responsible | — |
| Effort | 0.75 person-day(s) planned · 3 from scratch · size S |
| Area · app | Reseller app · mobile |
| Depends on | DES-10 |
| Unblocks | MRA-11 |
| Milestones | — |
Summary
Daily offers with countdown, promotions list and detail with eligible products.
Description
Daily offers and promotions drive repeat orders, and the reseller must see the same discount the cart will apply (PRM-01, PRM-04, PRM-05). Scope: promotions and daily offers list RA-24 with countdowns, and promotion detail RA-25 with conditions, dates and eligible products that can be added to the cart. The app never computes discounts; it displays the server's promotion price and lets the cart apply it. Per decision 6 guests can browse promotions without prices, but promotions.list and promotions.get are marked session in endpoints.json — Anis must make them auth: optional (or guests get promotions only via catalog.home). Per decision 1 a promotion's remaining stock cap is not shown as a number (« Quantité limitée » at most). It needs SRV-19 and Akram's DES-10 frames; banners from MRA-01 deep-link into RA-25.
Subtasks
| # | Subtask | Owner |
|---|---|---|
| 1 | PromotionsScreen RA-24: « Offres du jour » section with countdown cards, then active and scheduled promotions with type labels (« -15 % », « -500,00 DA », « Prix promotionnel », « Livraison offerte ») | Imad |
| 2 | Countdown widget shared with the home daily offer (server-time offset, auto-removal at expiry) | Imad |
| 3 | PromotionDetailScreen RA-25 on GET /promotions/{promotionId}: conditions, start/end dates, target (products, categories or brands), « Quantité limitée » flag instead of the remaining cap | Imad |
| 4 | Eligible products grid reusing hoco_catalog ProductGrid filtered by the promotion, with add-to-cart and the promotion price | Imad |
| 5 | Guest rendering: promotions visible, prices locked, add replaced by the sign-up prompt | Imad |
| 6 | Deep links /promotions/:id from banners and push, ended promotions show « Offre terminée » | Imad |
| 7 | Make promotions.list and promotions.get auth optional for guests (contract change) | Anis |
Deliverables
- apps/reseller/lib/src/features/promotions/ (list, detail)
- packages/hoco_catalog/lib/src/widgets/countdown.dart
- Widget tests for active, scheduled, ended and guest states
Acceptance criteria
- The promotion price shown on RA-25 equals the cart line price after adding the product (PRM-04)
- A daily offer disappears from the list at its end time, using server time (PRM-05)
- Scheduled promotions show their start date and cannot be added before it (PRM-01)
- Guests see promotions and eligible products without prices (AUTH-10)
- No remaining-quantity number is displayed for capped promotions (STK-07)
Requirements covered
| Requirement | Title | Release |
|---|---|---|
| PRM-01 | Simple promotions: daily offers, scheduled promotions, temporary discounts on products, categories or brands | V1 |
| PRM-04 | A promotion respects its dates, stock cap and target; the cart total applies it correctly | V1 |
| PRM-05 | Home banners and daily offer carousel with countdown | V1 |
Screens
API surface
| Endpoint group | Operations |
|---|---|
| Promotions, banners & packs | 5 |
Test measures
- Widget tests of the countdown with fake clocks and of each PromotionType label
- Integration test: banner tap → promotion detail → add eligible product → cart shows the discounted price
Risks
- Guest access to promotions depends on a contract change — raise it with Anis before SRV-19 is frozen; fallback is showing the daily offer and banners from catalog.home only
KPI
- Delivered by Tue 17 Nov 2026 within 0.75 person-day(s).
- Every acceptance criterion above demonstrated before hand-off; linked requirements' acceptance criteria pass.
- Zero open critical defects, permission gaps or data-integrity regressions at sign-off.
Generated from content/plan/tasks.json by scripts/generate-team-tasks.mjs. Dates are computed by the scheduler (Sunday–Thursday weeks, holidays excluded) — change the plan, not this page.
MRA-05 — Reseller app — orders, tracking & assisted-order confirmation
Status counters, list with live progress tracker (SSE while open, push otherwise), order detail with timeline, documents, cancel, reorder, contact support; confirm or reject assisted orders.
MRA-07 — Reseller app — account, store, finance & settings
Account hub, store profile and documents, balance and credit, invoices, payments and payment declaration with proof, settings.