Ulsav Docs
Passes

Pricing

Offer price, list price, minor units, and why a Pass carries no tax rate of its own

A Pass has one selling price, an optional reference price, and no tax rule. Everything else about money — the currency, the tax, the platform fee — belongs to the Organization and applies to every Event it runs.

That split is why you can copy a Pass between Events without re-deriving GST, and why changing a fee never edits a Pass.

  • Offer price

    What the buyer pays

    Per chargeable unit, before any coupon

  • List price

    Optional strike-through

    Shown as a saving; the buyer never pays it

  • Currency

    The Organization's

    A Pass cannot hold its own

  • Tax rate

    Not on the Pass

    It comes from the Organization tax profile

  • Stored as

    Whole minor units

    Paise for INR; never a decimal

  • Ceiling

    ₹1,000,000,000

    100,000,000,000 paise per unit

Offer price and list price

The offer price is the real price: what one chargeable unit costs before any coupon. The list price is optional and purely a reference — the MRP you show struck through so the buyer sees a saving.

The gap between them is the OrganizerDiscount. It needs no code, applies to everyone, and is stored per line on the Order.

OrganizerDiscount
organizer_discount=(list_unit−offer_unit)×chargeable_units\text{organizer\_discount} = (\text{list\_unit} - \text{offer\_unit}) \times \text{chargeable\_units}

No list price means no strike-through and a zero discount. A list price equal to the offer price is discarded, and a list price below it is rejected.

OrganizerDiscount and CouponDiscount are always reported separately. One is a price you set; the other is a code a buyer redeemed, and they have different funding and tax consequences.

Chargeable units are not always entries

One unit is one thing you charge for, and the Pass's pricing basis decides how many units an entry has:

Pricing basisUnits chargedTypical use
Per individualOne per RegistrationA normal ticket
Per teamOne per team, whatever the roster sizeA flat team fee
Per memberOne per person on the rosterA per-head team fee

A five-person team priced per team is one unit. The same team priced per member is five units. Nothing else about the Order changes.

Money is stored in whole paise

Every amount is a whole number of minor units — paise for rupees — paired with a three-letter currency code. ₹1,500 is stored as 150000.

Computers cannot hold 0.1 exactly in decimal fractions, so storing rupees as decimals slowly loses paise when you add, split, and refund. Whole paise never drift, and a total always equals the sum of its parts.

The engine is exponent-aware, so a zero-decimal currency such as JPY and a three-decimal currency such as KWD both compute correctly. Rounding is half-up, always to the nearest whole minor unit.

The platform fee

Ulsav charges the Organization a platform fee: a percentage plus a fixed amount, set once per Organization. The default is 3.5% plus ₹10.00, borne by the buyer.

The percentage leg is charged per line on the line's price after discounts plus its organizer tax. The fixed leg is charged once per chargeable unit.

Platform fee, per line
line fee=round⁡(fee_bps×(net+organizer tax))+fee_fixed×units\text{line fee} = \operatorname{round}\left(\text{fee\_bps} \times (\text{net} + \text{organizer tax})\right) + \text{fee\_fixed} \times \text{units}

net is the offer price minus the coupon allocation. fee-bps is hundredths of a percent: 350 means 3.5%.

Discounts shrink the percentage leg and never the fixed leg. That is why the two legs are always shown apart on a receipt.

A worked single Pass

One Day Pass, offered at ₹1,500 with a ₹2,000 list price, sold to one person. The Organization is in Karnataka, the venue is in Karnataka, GST is 18%, and the fee is 3.5% plus ₹10 borne by the buyer.

One Day Pass: ₹2,000 list, ₹1,500 offer, GST 18% intra-state
total=offer−coupon+organizer tax+fee+tax on fee\text{total} = \text{offer} - \text{coupon} + \text{organizer tax} + \text{fee} + \text{tax on fee}

List price × 1 unit

₹2,000.00

OrganizerDiscount

₹2,000.00 − ₹1,500.00

−₹500.00

Coupon

none redeemed

₹0.00

Taxable base

the offer price the tax applies to

₹1,500.00

CGST 9%

+₹135.00

SGST 9%

+₹135.00

Platform fee

3.5% of ₹1,770.00 = ₹61.95, plus ₹10.00

+₹71.95

GST on the platform fee

18% of ₹71.95

+₹12.95

Buyer pays

₹1,854.90

All values are whole paise. The percentage leg is charged on ₹1,770.00 — the ₹1,500.00 price plus its ₹270.00 GST — not on the price alone.

The buyer sees a ₹500.00 saving, pays ₹1,854.90, and the Order stores every row above separately. If GST were set to inclusive instead of exclusive, the ₹1,500.00 would already contain the ₹228.81 tax and the buyer total would fall accordingly.

Tax is never a Pass field

A Pass has no tax rate, no tax name, and no tax treatment. The Organization tax profile supplies all three for every Event, and the place of supply decides how the amount splits.

Two consequences matter in practice:

  • A Pass on an online Event is always intra-state, because online participation is treated as supplied where the Organization is registered.
  • A Pass on an in-person Event compares the Organization's state with the venue's state, and a mismatch produces IGST instead of CGST and SGST.

Price changes only apply forward

A confirmed Order keeps the price it was charged, forever. Editing a Pass price would not rewrite it, which is why the edit is refused outright once the Event is published.

A refund reads the stored order line, not today's Pass. Even if you later discount the same Pass to ₹0, a receipt from last month still shows ₹1,500.00 and the GST that went with it.

Failure paths

What you triedWhat happens
A negative priceRejected
A price above 100,000,000,000 paiseRejected
A currency other than the Organization'sRejected
A list price below the offer priceRejected
Changing the price after publishingRejected as a commercial change
A coupon that brings a paid Order to ₹0Rejected at checkout; pay a smaller discount instead

On this page