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

126 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
type: reference
tags: [parking, domain, business, pricing, research]
sources: []
updated: 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
- FHWA, *Contemporary Approaches to Parking Pricing: A Primer* — <https://ops.fhwa.dot.gov/publications/fhwahop12026/sec_2.htm>
- Arivo, *The Right Parking Tariff* (practitioner taxonomy) — <https://arivo.co/en/blog/optimal-parking-pricing>
- Pitane, *Per-minute parking creates chaos* (Leuven rollback) — <https://pitane.blue/en/2025/01/16/Parking-rates-in-garages-per-minute-parking-causes-chaos-according-to-experts/>
- Secure Parking, *Early Bird Parking* (entry/exit conditions) — <https://www.secureparking.com.au/en-au/parking-solutions/early-bird-parking/>
- ParkWhiz help, *What is Early Bird* — <https://help.parkwhiz.com/support/solutions/articles/60001010507-what-is-early-bird->
- Parking BOXX, *Validation programs guide* — <https://blog.parkingboxx.com/industry/parking-validation-programs-guide/>
- Amano McGann, *Validation solutions* (discount shapes incl. re-rate) — <https://amanomcgann.com/our-solutions-parking-management/validation/>
- ITS DOT evaluation of SFpark — <https://www.itskrs.its.dot.gov/2024-b01818>
- UCLA ITS, *Pricing Parking by Demand (SFpark)* — <https://www.its.ucla.edu/publication/pricing-parking-by-demand-sfpark/>
- IDeaS, *Airport parking dynamic pricing* — <https://ideas.com/airport-parking-dynamic-pricing/>
- SKIDATA, mobility & parking solutions (tariff axes) — <https://www.skidata.com/en-us/solutions/mobility-parking>
- City of Tampa / MPLS Parking / RDU T&Cs (published rate-card examples) —
<https://www.tampa.gov/parking/info/parking-hourly-and-daily-rates>,
<https://www.mplsparking.com/parking-rates>, <https://www.rdu.com/terms-conditions/>