Files
parking_solution/wiki/concepts/tariff-industry-survey.md
T
julian 14638c2e13
Build desktop / desktop (push) Successful in 4m14s
CI / check (push) Successful in 43s
Build & push images / images (push) Successful in 2m49s
docs(wiki): industry survey of parking tariff systems + session log
New reference page tariff-industry-survey.md (2026-07 web research):
field taxonomy — per-started-increment hourly (per-minute tried and
rolled back in practice), degressive ladders, day caps, up-to matrices,
day tickets, evening/overnight packages, event rates, early bird
(entry-time-conditioned), day/night + weekend/holiday/seasonal windows,
category pricing, contracts, merchant validations (amount/percent/
time-credit/re-rate), SFpark-style dynamic pricing. Coverage map: our
engine expresses everything a staffed single lot advertises; real gaps =
early bird (the pick-table-by-entry-time future design, same mechanism
as weekend menus) and validation overlays; anti-features = per-minute
billing + dynamic pricing. Indexed + logged.

Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
2026-07-05 16:37:53 +02:00

8.1 KiB
Raw Blame History

type, tags, sources, updated
type tags sources updated
reference
parking
domain
business
pricing
research
2026-07-05

Tariff systems in the parking industry — survey (2026-07)

Web research (2026-07-05) into the tariff/pricing structures the parking industry actually uses, to sanity-check the tariff engine's coverage and rank the gaps. Sources at the end; legacy cross-check in parksql2017-legacy-schema.

The taxonomy — what operators run in the field

1. Time-based accrual (the bread and butter everywhere)

  • Linear hourly — €/hr per started hour; billing increments of 30/60 min dominate. Per-minute billing is rejected in practice: garages that tried it (e.g. Leuven) rolled it back within months — customers couldn't predict the price and complaints rose. Vindicates our incrementMin default of 60.
  • Degressive ladder — marginal price FALLS with duration (€2.50 first hour, €0.50/30min after): the standard shape for hospitals, city-centre garages, anywhere encouraging longer stays. Exactly our V1/V2 blocks.
  • Progressive ladder — marginal price RISES with duration: rarer, used to force turnover (short-stay curbside). Same blocks primitive, ascending.
  • Daily / weekly caps — a ceiling regardless of accrual ("day max €7"). Universal in commercial garages. Our dailyCapMinor.
  • Free grace period — 15–30 min free at entry (airports: pickup/dropoff support). Our gracePeriodEntryMin.

2. Whole-stay prices (not accrual)

  • Flat rate / day ticket — one price for the day (Delft inner city: €29/day). Our stepped ("up-to") table with one row, or a flat V1.
  • Up-to matrices — "stay up to N hours costs TOTAL" tables: the region's habit (legacy ParkSQL confirms). Our steps.
  • Evening/overnight package — "€8 after 18:00 until 06:00", whole window one price. VERY common municipally. Exactly our packageMinor (built 2026-07-05).
  • Event rate — flat premium price during a known event window, set in advance. Expressible today as a date-ranged windowed card (flat or package).

3. Entry-time-conditioned rates (the notable GAP)

  • Early bird — a discounted all-day flat for cars that ENTER before a cutoff (typically 09:00–10:00), sometimes with an exit-window condition too; no forgiveness for missing the cutoff. A CBD-commuter staple worldwide. The defining trait: the rate is selected by the ENTRY instant and governs the whole stay — which is precisely the pick-table-by-entry-time design we identified as the sound future shape (also solves weekend menus). Anti-arbitrage conditions (min stay / exit window) exist to stop short-stay parkers grabbing the flat.

4. Calendar windows — day/night rates, weekday vs weekend/holiday, seasonal date ranges (Berlin: free nights + Sundays in some zones). Our V2 windowed cards cover all of these.

5. Category pricing — by vehicle type (car/bus/truck) and by customer class (resident/visitor — SKIDATA advertises residency + vehicle-type tariffs). Our card.category + frozen session category.

6. Contracts / recurring — weekly/monthly fixed rates for commuters; steady-revenue anchor everywhere. Ours lives outside the tariff: subscription plans.

7. Discount overlays (validations) — the second GAP

  • Merchant validation — a sponsor (shop/hotel/cinema) reduces the parker's fee: mechanisms range from stamped/barcoded tickets to one-use codes to LPR-keyed auto-validation. Discount shapes in PARCS products: fixed amount, percentage (up to 100% comp), TIME CREDIT ("first 2h free"), or a full re-rate to a different rate table. Fully vs partially sponsor-subsidised.
  • Channel discounts — cheaper pre-booked/online/app rates (airports especially).

8. Dynamic / demand-based — price moves with occupancy. SFpark (the canonical study): target 60–80% block occupancy, ±$0.25 adjustments, → −43% search time, −30% GHG; average rate actually FELL. Airports run revenue-management engines inside operator-set floor/ceiling. Almost exclusively municipal-curbside + large-airport territory, needs demand telemetry + price-communication infrastructure — not single-lot booth territory.

9. Fees/penalties — lost ticket = worst-case exposure (max daily × assumed duration): ours (lostTicketMinor). Post-payment exit grace, then overstay repricing: ours.

Coverage map — our engine vs the industry

Industry structure Status in our engine
Linear hourly, per-started-increment ✅ V1/V2 blocks + incrementMin
Degressive / progressive ladder ✅ blocks
Daily cap, entry grace, exit grace ✅
Up-to matrix / day ticket ✅ steps (defaultCard)
Day/night, weekend/holiday, seasonal ✅ V2 windowed cards
Night/evening whole-window package ✅ packageMinor (2026-07-05)
Event rate ✅ expressible (date-ranged card)
Vehicle/customer category ✅ card.category (capture seam pending)
Monthly/weekly contracts ✅ subscription plans (separate)
Lost ticket, overstay reprice ✅
Early bird / entry-time-conditioned ❌ gap — needs pick-table-by-entry-time (see tariff up-to/tiers incompatibility discussion)
Validations / merchant discounts ❌ gap — no discount overlay mechanism; would need signed discount events + sponsor accounting
Pre-book/online channel rates ❌ out of scope (no online channel; offline-first)
Dynamic/demand pricing ❌ deliberately out — municipal/airport scale, needs telemetry; conflicts with printed-price predictability at a booth lot

Takeaways for the roadmap

  1. Coverage is already strong: everything a single staffed lot typically advertises is expressible today. The 2026-07-05 package mode closed the last everyday gap (real night price).
  2. Early bird is the highest-value missing structure and shares its mechanism with the weekend-menu ask: select the ENTIRE rate table by entry instant (window → table), instead of pricing per wall-clock slice. One future mechanism, two market features. Include min-stay / exit-window conditions if built (anti-arbitrage is part of the product, not a nicety).
  3. Validations are the second candidate once merchants near the site matter: time-credit + percent + full-comp shapes, as signed appended events (fits the ledger model); sponsor settlement stays outside the app (like drawer-review denials).
  4. Do not build: per-minute billing (industry tried it, customers rejected it), dynamic pricing (wrong scale + breaks price predictability at a booth).

Sources