Chapter 2: Product Setup — 2.6 Attribute Setup
Use Attribute Setup to create add-ons and modifiers for your products — like "Less Sugar", "Extra Cheese", or "Size: S / M / L". When a cashier taps a product at the POS, these options pop up for the customer to customize their order.
When to use this: When your products have options like Size, Color, or Sugar Level that customers choose from.

The Attribute list shows all configured Attribute Groups in a data grid. Each group row displays its name, Print on Bill flag (whether the modifier prints on the customer receipt), and soft-delete status. Click a group name to edit it and manage its individual attribute items.
| Element | Type | Function |
|---|---|---|
| + Add New | Green Button | Create a new attribute group |
| Export | Orange Button | Download attribute group list as spreadsheet |
| Search Bar | Text Input | Filter by group name |
| 🔽 Filter | Funnel Icon | Opens the Column Visibility Panel — toggle columns ON/OFF to customize the data grid view |
Click the 🔽 funnel icon (top-right of the toolbar) to open the Column Visibility Panel. Each toggle switches a column ON (visible, blue) or OFF (hidden, grey).
| Toggle | Column | Description |
|---|---|---|
| 🔵 Attribute | Attribute | Attribute group name (clickable → edit form) |
| 🔵 Print on Bill | Print on Bill | Whether attributes in this group appear on the printed receipt |
| 🔵 Deleted | Deleted | Hidden/deleted status |
| Toggle | When ON (Visible) | When OFF (Hidden) |
|---|---|---|
| ⚪ CreatedBy | Shows who created this attribute group | Column hidden |
| ⚪ CreatedOn | Shows when this group was created | Column hidden |
| ⚪ ModifiedBy | Shows who last modified this group | Column hidden |
| ⚪ ModifiedOn | Shows when the last modification occurred | Column hidden |
| Column | Description |
|---|---|
| Attribute | Attribute group name (clickable → edit form) |
| Print on Bill | Whether attributes in this group appear on the receipt |
| Deleted | Hidden/deleted status |

| Field | Type | Required | Description |
|---|---|---|---|
| ID | Text | ✅ Yes | Attribute group code — must be entered manually (e.g., "SIZE", "TOPPING", "SUGAR"). This becomes the AttributesGroupCode in the database. |
| Name | Text | ✅ Yes | Display name shown at POS and in reports (e.g., "Size", "Sugar Level", "Toppings") |
[!NOTE] The ID field must be filled in manually before the first save. It cannot be changed after creation. Use short, uppercase codes like
SIZE,TOPPING,ICELEVEL.
| Toggle | When ON | When OFF |
|---|---|---|
| Can only select 1 option | Cashier must choose exactly one attribute from this group (e.g., Size: Small OR Medium OR Large — not multiple) | Cashier can select multiple attributes from this group (e.g., Toppings: Extra Cheese AND Mushrooms AND Olives) |
| Mandatory | Cashier is forced to select at least one attribute from this group before proceeding with the order | Attribute selection is optional — cashier can skip this group |
[!TIP] Use Can only select 1 option = ON + Mandatory = ON for attributes like "Size" where every order must specify exactly one size. Use both OFF for optional add-ons like "Extra Toppings" where customers can choose multiple or none.
After saving the attribute group, the Attribute Items panel appears on the right side. This is where you define the individual modifiers.

| Button | Function |
|---|---|
| + Add New | Opens a modal to create a new attribute item |
| + Add From Product | Import an existing product as an attribute item (links the attribute to a product record) |
| Reset Color | Resets all POS button colors back to default |
| Column | Type | Description |
|---|---|---|
| Attribute Name | Text | Modifier display name at POS (e.g., "Large", "Extra Cheese", "Less Sugar") |
| Call Type | Dropdown | How the price is modified: Add Amount (fixed) or Percentage |
| Amount | Number | Price modifier value (e.g., 1.00 for +$1.00, 0.5 for +$0.50, 0 for no charge) |
| POS Button Color | Color Swatch | Background color for this attribute's button on the POS touch screen |
Each row also has action icons:
| Call Type | Amount | Effect on Price |
|---|---|---|
| Add Amount | 1.00 | Adds $1.00 to the product price |
| Add Amount | 0.50 | Adds $0.50 to the product price |
| Add Amount | 0 | No price change (purely a modifier label) |
| Percentage | 10 | Adds 10% of the product's base price |
| Add Amount | -0.50 | Subtracts $0.50 from the price (discount modifier) |



Expected Result: The attribute group is saved and can be linked to products.

[!TIP] To make changes, just click the name of any attribute group in the list — the same form opens with everything already filled in. Change what you need and click Save.

The screenshot above shows the completed "Size" attribute group with 3 items:
Each item row has a drag handle (⋮⋮) on the left for reordering items by priority.
| Button | Condition | Function |
|---|---|---|
| Save | Always | Saves the group and all attribute items |
| Save & New | Always | Saves then opens a new blank form |
| Delete | Edit mode | Removes the attribute group |
Attribute Group 1: "Size" (Can only select 1: ON, Mandatory: ON)
| Attribute | Call Type | Amount | Effect |
|---|---|---|---|
| Small | Add Amount | 0 | No extra charge |
| Medium | Add Amount | 0.50 | +$0.50 |
| Large | Add Amount | 1.00 | +$1.00 |
Attribute Group 2: "Sugar Level" (Can only select 1: ON, Mandatory: ON)
| Attribute | Call Type | Amount | Effect |
|---|---|---|---|
| No Sugar | Add Amount | 0 | — |
| 25% Sugar | Add Amount | 0 | — |
| 50% Sugar | Add Amount | 0 | — |
| 100% Sugar | Add Amount | 0 | — |
Receipt Output:
Pearl Milk Tea $4.50
Size: Large +$1.00
Sugar: 50% $0.00
Total: $5.50Attribute Group: "Extra Toppings" (Can only select 1: OFF, Mandatory: OFF)
| Attribute | Call Type | Amount |
|---|---|---|
| Extra Cheese | Add Amount | 2.00 |
| Mushrooms | Add Amount | 1.50 |
| Pepperoni | Add Amount | 2.00 |
| Olives | Add Amount | 1.00 |
| Premium Truffle | Percentage | 20 |
The "Premium Truffle" uses Percentage — if the pizza is $15, truffle adds $3 (20%). Toppings are optional and multiple selections are allowed because Can only select 1 option = OFF.
[!TIP] Use Can only select 1 option = ON + Mandatory = ON for required single-choice attributes like "Size" or "Temperature" (Hot/Cold). Use both OFF for optional multi-choice attributes like "Extra Toppings" where customers can pick none, one, or many.
| Role | View | Create | Edit | Delete |
|---|---|---|---|---|
| Admin | Yes | Yes | Yes | Yes |
| Supervisor | Yes | Yes | Yes | No |
| Cashier | No backend access | — | — | — |
[!NOTE] Exact permissions depend on the Privileges Setup configured for each role. Contact your administrator if you cannot access this page.
2. Click the name or code link (blue text) of the record you want to delete.
3. In the edit form, scroll down to the bottom.
4. Click the Delete button (red button).
5. A confirmation dialog appears — click Yes to confirm deletion.
Expected Result: The record is soft-deleted — it is hidden from the active list and POS terminals but can be restored later using the "Show Deleted" filter.
[!WARNING] Records linked to active transactions or other modules cannot be deleted. The system will display an error if deletion is not allowed.

Click the + Add New button (green button).
Fill in the required fields in the form.

Fill in any optional fields as needed.
Click Save to create the new attribute.

✅ Expected Result: The new attribute appears in the list and is available for use across the system.
Q: Why is my product not showing on the POS? A: The POS needs to sync first. Check Terminal Status to see the last sync time. Also verify the product is not deleted and is assigned to the correct outlet.
Q: Can I delete a product that has sales history? A: You can soft-delete it (it will be hidden from active lists and POS), but it cannot be permanently removed because it is linked to transaction records.
Q: How do I update prices for multiple products at once? A: Use the Data Importer > Product Importer to bulk update. Export the current list, modify prices in the spreadsheet, then re-import.
| Issue | Possible Cause | Solution |
|---|---|---|
| Cannot save the record | Required fields are empty or invalid | Check all fields marked with * and fill in valid data |
| Record not appearing in POS | POS terminal has not synced yet | Wait for the next sync cycle or manually trigger sync from Terminal Status |
| Cannot delete the record | Record is being used by other modules | Check if the record is linked to active transactions, products, or other settings |
| Changes not taking effect | Browser cache showing old data | Refresh the page (Ctrl+F5) or clear browser cache |
| "Duplicate" error on save | A record with the same name/code already exists | Search the list (including deleted records) for duplicates |
| Page not loading | Session expired or network issue | Log out and log back in. Check your internet connection |
[!NOTE] The following items may vary depending on your system version and configuration:
- Exact permission settings depend on your Privileges Setup configuration
- Sync timing to POS terminals depends on network conditions and sync schedule
- Some features may require additional licensing or module activation
- Field behavior may differ between EQuip versions
If you encounter behavior not described in this manual, contact your system administrator or EQuip support team.