Home / Help Center / pos-app-garment / garment / Season Comparison
⚖️ garment

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.

📍 Menu path: /garment/season-comparison
👤 Who uses it: Owner,Manager

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

Step-by-Step Guide

1 Run a season-vs-season comparison

  1. Pick Season A and Season B from the dropdowns (e.g. SS25 vs SS24 to compare this Summer against last Summer).
  2. Click Compare.
  3. Review the two Total Revenue tiles and the Revenue by Category panel below.

2 Read the per-category comparison

  1. Categories are sorted by combined revenue (Season A + Season B) so your biggest categories appear first.
  2. 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

  1. 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 / ButtonWhat it does
Season A / Season BDropdowns 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.
CompareRuns the comparison; disabled while loading.
CSVDownloads 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 CategoryOne 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

Troubleshooting & FAQ

Clicking Compare does nothing and a "Choose two different seasons" message appears.
Season A and Season B must be different codes — pick two distinct seasons and try again.
"No sales data found for the selected seasons" — but I know I sold that season's stock.
This report only counts sales of products whose Product.season field exactly matches one of the fixed dropdown codes (e.g. "SS25") — check that the products in question actually have that season tag set, since the comparison never looks at the sale date itself.
My shop uses a custom season name (e.g. "Diwali24") that is not in the list.
The season list is a fixed, hardcoded set of eleven codes in this page — there is currently no way to add a custom season to the dropdown without a product/code change; use one of the existing codes for tagging instead.
I run multiple branches — does this only compare the branch I'm logged into?
No — this page never sends a branch/store filter with its request, so the comparison always combines sales from every branch under your account, even though the underlying report can be scoped to one store.

🧑‍💻 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):

  • Sale
  • SaleItem
  • Product

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.