Season Comparison
Season Comparison pits any two season codes against each other (for example SS25 vs SS24) and shows total revenue and a per-category revenue breakdown for each, so you can see which categories grew, shrank, or are brand new this season.
Overview
You pick Season A and Season B from a fixed list of eleven season codes (SS25, AW25, SS24, AW24, SS23, AW23, SS22, AW22, SALE, FESTIVE25, FESTIVE24) and click Compare.
The comparison is driven entirely by each sold product's season tag (set on the Product record), not by the date the sale happened — there is no date-range picker on this page at all.
Results show a Total Revenue tile for each season plus a Revenue by Category panel: one row per category with two proportional bars (Season A vs Season B) and a percentage change label, or "New" when a category had zero revenue in the comparison season.
A CSV export button appears once a comparison has run, downloading category, both seasons' revenue, and percentage change as a spreadsheet.
Before You Start
- Requires the "reports" plan feature to be enabled.
- Products must have their
seasonfield set to one of the eleven exact codes in the dropdown (e.g. "SS25") for their sales to be picked up by either side of the comparison — untagged products contribute to neither season. - Season A and Season B must be different; picking the same code for both is blocked with a toast error.
Step-by-Step Guide
1 Run a season-vs-season comparison
- Pick Season A and Season B from the dropdowns (e.g. SS25 vs SS24 to compare this Summer against last Summer).
- Click Compare.
- Review the two Total Revenue tiles and the Revenue by Category panel below.
2 Read the per-category comparison
- Categories are sorted by combined revenue (Season A + Season B) so your biggest categories appear first.
- Each category shows two bars (Season A revenue vs Season B revenue, scaled to the largest bar on the page) and a percentage-change label — green for growth, red for decline, or "New" when Season A had zero revenue in that category.
3 Export the comparison to CSV
- Click CSV (visible once a comparison has run) to download a spreadsheet with Category, Season A Revenue, Season B Revenue, and Change % columns.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
Season A / Season B | Dropdowns of eleven fixed season codes — SS25, AW25, SS24, AW24, SS23, AW23, SS22, AW22, SALE, FESTIVE25, FESTIVE24 — used to filter sold products by their Product.season tag. |
Compare | Runs the comparison; disabled while loading. |
CSV | Downloads the current comparison as season-comparison-{seasonA}-vs-{seasonB}.csv; only shown once results have loaded. |
Total Revenue tile (per season) | Sum of revenue across every category for that season. |
Revenue by Category | One row per category with proportional bars for Season A and Season B revenue and a percentage-change label ("New" if the earlier season had no revenue in that category). |
Tips & Best Practices
- Tag every product's Season field (on the Products page) with one of the exact codes in this dropdown as soon as a new season's stock comes in — untagged or inconsistently tagged products simply will not appear in either side of the comparison.
- Remember this report has no date filter of its own — it is really a "season tag" comparison, not a calendar comparison, so leftover stock from an old season still sold today will keep counting toward that old season's numbers for as long as its tag is unchanged.
- Use the CSV export to keep a season-end snapshot before you start re-tagging products for the next season.
Troubleshooting & FAQ
Clicking Compare does nothing and a "Choose two different seasons" message appears.
"No sales data found for the selected seasons" — but I know I sold that season's stock.
My shop uses a custom season name (e.g. "Diwali24") that is not in the list.
I run multiple branches — does this only compare the branch I'm logged into?
🧑💻 Developer Notes
Source component(s):
frontend-app/pos-app-garment/src/pages/garment/SeasonComparisonPage.jsx
Backend endpoints used:
GET /garment/analytics/season-comparison
Related tables (db-core repositories):
SaleSaleItemProduct
Redux slices:
None — local component state only
Feature flag key: reports
getSeasonComparison (packages/pos-core/src/garment.js) groups every sale item whose linked Product.season equals the requested code, with zero date bounding — it is purely a tag-based aggregation across a tenant's entire sales history, not a period-over-period report in the usual sense. The function does accept an optional storeId to scope to one branch, but SeasonComparisonPage.jsx never sends one, so multi-branch tenants always see combined figures across every store. SEASONS is a hardcoded client-side array with no server-driven or dynamic season list, so adding a new season code requires a frontend change.