Home / Help Center / pos-app-garment / garment / Style Contribution %
📈 garment

Style Contribution %

Style Contribution % shows what share of your total revenue each product Category earned in a chosen date range — a ranked bar-chart table of revenue, units sold and percentage share, from your single top category down to the smallest, with one-click CSV export.

📍 Menu path: /garment/style-contribution
👤 Who uses it: Owner,Manager

Overview

Despite the "Style" name, this report groups revenue purely by each product's Category field (e.g. "Shirts", "Trousers", "Jackets") — there is no separate "style" or "style code" attribute read anywhere in this feature. If two different styles share the same category, their revenue is combined into one row.

Products with no category set are grouped together under an "Uncategorised" row rather than being dropped.

Only completed sales (payment status COMPLETED, transaction type SALE) within the chosen date range are counted — the default range is January 1st of the current year through today.

Three summary tiles show the number of distinct categories with sales, the total revenue for the period, and the single top category by revenue share with its percentage.

The table below ranks every category by revenue descending, with a proportional coloured bar (cycling through an 8-colour palette) and its exact percentage share alongside units sold.

Before You Start

Step-by-Step Guide

1 Review revenue share by category

  1. Set the From and To dates (defaults to Jan 1st of this year through today) and click Apply.
  2. Check the three summary tiles: number of Categories, Total Revenue, and the Top Category with its percentage share.
  3. Scan the ranked table — each row shows the category, its revenue, units sold, and a proportional bar with its percentage of total revenue.

2 Export the breakdown

  1. Click Export CSV (disabled until at least one category has data for the period) to download a CSV with Category, Revenue, Units Sold and % of Revenue columns.

Every Field & Button, Explained

Field / ButtonWhat it does
From / To + ApplyDate range for the revenue calculation; defaults to Jan 1st of the current year through today; click Apply (or change either date) to reload.
Export CSVDownloads Category, Revenue, Units Sold, % of Revenue as a CSV file; disabled until there is at least one row of data.
Categories tileCount of distinct categories (including "Uncategorised") that had at least one completed sale in the period.
Total Revenue tileSum of revenue across every category in the period.
Top Category tileThe single highest-revenue category and its percentage share of the period's total revenue.
Table — CategoryProduct category name, or "Uncategorised" if the product had no category set; colour dot matches its chart bar colour.
Table — RevenueTotal revenue for that category in the selected period.
Table — UnitsTotal quantity sold for that category in the selected period.
Table — ShareProportional bar (relative to the top category's revenue) plus the exact percentage of total revenue.

Tips & Best Practices

Troubleshooting & FAQ

A product I expected to see broken out by its style number is missing.
This report groups only by the Category field, not a separate style code — if multiple styles share one category, their revenue is combined into a single row for that category. There is currently no per-style/per-SKU breakdown in this feature.
Everything is showing under "Uncategorised".
That means the Category field is blank on those products — set a Category on the Products page for a meaningful breakdown.
The numbers here don't match Sell-Through Report for the same period.
They measure different things: this report is pure revenue/units by category for completed sales only, with no reference to current stock levels; Sell-Through Report blends units sold against current stock on hand to estimate a sell-through rate per product.
Export CSV button is greyed out.
It stays disabled until at least one category has sales data for the selected date range — widen the date range or check a sale exists in that window.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/pos-app-garment/src/pages/garment/StyleContributionPage.jsx

Backend endpoints used:

  • GET /garment/analytics/style-contribution?from=&to=

Related tables (db-core repositories):

  • Sale
  • SaleItem
  • Product

Redux slices:

  • None — local component state only

Feature flag key: reports

Backed by packages/pos-core/src/garment.js getStyleContribution (~line 645), which inner-joins Sale to SaleItem and left-joins Product, filters to paymentStatus COMPLETED / type SALE within the date range (and by tenantId/storeId when provided), and groups purely on Product.category — falling back to "Uncategorised" when null. There is no "style" or "style code" column read anywhere in this function despite the page/nav label; the group-by granularity is exactly whatever value shops put in Products → Category. CSV export is entirely client-side (Blob + object URL), no backend export endpoint.