HOCO B2B
Team tasksImad

MRA-06 — Reseller app — promotions & daily offers

Daily offers with countdown, promotions list and detail with eligible products.

FieldDetails
Task codeMRA-06
PhaseP1 — V1 build & integration
Product scopeV1
StatusPlanned
StartTue 17 Nov 2026
DueTue 17 Nov 2026
ResponsibleImad — Mobile developer (Flutter)
Co-responsible—
Effort0.75 person-day(s) planned · 3 from scratch · size S
Area · appReseller app · mobile
Depends onDES-10
UnblocksMRA-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

#SubtaskOwner
1PromotionsScreen 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
2Countdown widget shared with the home daily offer (server-time offset, auto-removal at expiry)Imad
3PromotionDetailScreen RA-25 on GET /promotions/{promotionId}: conditions, start/end dates, target (products, categories or brands), « Quantité limitée » flag instead of the remaining capImad
4Eligible products grid reusing hoco_catalog ProductGrid filtered by the promotion, with add-to-cart and the promotion priceImad
5Guest rendering: promotions visible, prices locked, add replaced by the sign-up promptImad
6Deep links /promotions/:id from banners and push, ended promotions show « Offre terminée »Imad
7Make 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

RequirementTitleRelease
PRM-01Simple promotions: daily offers, scheduled promotions, temporary discounts on products, categories or brandsV1
PRM-04A promotion respects its dates, stock cap and target; the cart total applies it correctlyV1
PRM-05Home banners and daily offer carousel with countdownV1

Screens

ScreenNameApp
RA-24Promotions & daily offersRA
RA-25Promotion detailRA

API surface

Endpoint groupOperations
Promotions, banners & packs5

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.

On this page