PRD: Sale Categories
| Module | Commerce | PRD ID | PRD-CAT-001 |
| Status | Ready to dev | FEAT | CAT |
| Epic | — | Plane | BANA-1531 |
| Date | 2026-05-18 | Version | v1.0 |
| Packages | @nx/commerce | URD | CAT |
| Surface | Client · Owner/Mgr | ||
| Owner | Phát Nguyễn | ||
What sale categories are
Categories are a merchant's product groups - a coffee merchant has "Coffee", "Milk tea", "Pastries". When creating a category in the Client app, the user picks an icon and a color for the group: about 40 industry suggestions are ready, or search the whole library for more. On the POS, the category shows up as a colored tile the cashier recognizes at a glance instead of reading text.
Tree arrangement and a shared picker
Categories nest as parent - child, up to 8 levels; tree arrangement is done on the Categories screen in the Client app. The icon-color picker is packaged as a shared control - other forms drop it in and use it right away, already adopted by the finance-category and helpdesk ticket-category forms.
This PRD covers sale categories only. Material categories for the warehouse are a different screen, to be designed in the Inventory module.
Why icon and color
The category form used to be just a name field: on a busy touch-screen POS every group looked like identical plain text, so cashiers had to read each label - slow scanning and easy mis-taps. There was also no way to express nested groups - everything was one flat list.
This increment gives every category an icon and a color, adds a parent-group selector to build a tree, and packages the icon-color picker as a control other forms can reuse.
One category, from creation to the POS
Open the Categories screen → create or edit a group → pick an icon and a color, the preview updates instantly → optionally pick a parent group to arrange the tree → save → the group shows up as an icon-carrying, color-coded tile on the POS and in the admin app.
The easiest thing to get wrong
The Edit-merchant screen has no parent selector
Categories are manageable through two paths: the dedicated Categories screen, or right inside the Edit-merchant screen. Creating a category on the Edit-merchant screen still saves normally, but that form has no parent-group selector - arranging the tree requires opening the dedicated Categories screen.