Skip to content

Promotions & Discounts - Product Requirements Document

Version: 2.0 | Status: Final | Date: 2026-01-15

1. Overview

1.1 Purpose

Enable rental companies to create and manage promotional campaigns, discount codes, referral programs, and invoice-level discounts to drive customer acquisition, increase booking conversion, and reward loyalty.

1.2 Problem Statement

Currently, Toprent.app supports:

  • Marketing promotions (banners/announcements) via the promotions table for display purposes only
  • Manual invoice discounts (discount field with discountUnit PERCENT/AMOUNT) applied at billing time
  • Referral tracking links with discount percentages for Billion marketplace customers
  • Source tracking codes for marketing attribution (no functional discount application)

Critical Gaps:

  • No reusable promotional codes for customer checkout
  • No automated campaign management with time/quantity limits
  • No discount validation or application rules
  • No redemption tracking, ROI measurement, or campaign analytics
  • No customer eligibility rules or vehicle targeting
  • No integration between promotional codes and order pricing

1.3 Business Value

Value AreaMeasurable OutcomeMeasurement Method
Revenue Growth15-25% increase in bookings during promoted low-demand periodsBooking volume comparison: promoted vs. non-promoted periods
Customer Acquisition30% reduction in new customer acquisition cost through targeted first-order discountsCAC calculation: marketing spend ÷ new customers via promo codes
Customer Retention20% increase in repeat booking rate through loyalty and referral programsCohort analysis: repeat order rate for promo users vs. non-users
Marketing ROI3:1 or higher attributed revenue to discount cost ratioCampaign analytics: orders generated ÷ discounts given
Inventory Optimization10 percentage point improvement in off-peak vehicle utilizationCategory utilization rates during promotional periods
Operational Efficiency90% reduction in manual discount processing timeTime study: before/after admin discount application workflow
Partner Revenue15% of bookings attributed to partner/affiliate promotional codesPartner attribution tracking in order data

1.4 Success Metrics

MetricDefinitionBaselineTargetMeasurement MethodTimeframe
Promo Code Redemption RateCodes redeemed ÷ codes distributed × 100N/A (new feature)15-25%Redemption logs ÷ distribution records6 months post-launch
Campaign ROIAttributed revenue ÷ total discounts givenN/A≥3:1Order totals with promo codes ÷ discount amountsPer campaign
New Customer Acquisition via PromosFirst-time customers using promo codesN/A40% of new customersCustomer order history analysis6 months
Referral Program ConversionReferred visitors who complete bookingN/A10% conversion rateReferral link clicks → completed orders6 months
Average Discount per OrderMean discount amount appliedManual: ~5% of ordersAutomated: 25% of ordersOrder discount field analysis3 months
Code Validation ErrorsFailed code applications due to eligibilityN/A<5% invalid attemptsError log analysisOngoing
Off-Peak Utilization LiftBooking increase during promoted periods45% utilization55% utilizationAvailability calendar analysisPer campaign
Partner Attribution RateOrders with partner promo codes ÷ total orders0%15%Partner code usage tracking6 months

1.5 Target Users

User RoleBusiness ContextPrimary Needs
Tenant AdminsManage promotional strategy and budgetsCreate campaigns, monitor ROI, control costs
Marketing TeamsExecute promotional campaignsGenerate codes, track attribution, optimize spend
OperatorsProcess customer bookingsValidate codes, explain discounts, handle exceptions
CustomersComplete rental bookingsApply discounts, understand savings, share referrals
Partners/AffiliatesGenerate bookings for commissionDistribute codes, track conversions, earn commissions

1.6 Scope

In Scope:

  • Promotional code lifecycle management (create, edit, activate, deactivate, delete)
  • Multiple discount types: percentage, fixed amount, free extras/services
  • Campaign constraints: date ranges, usage limits, minimum order values
  • Customer eligibility: first-time customers, segments, usage limits per customer
  • Vehicle targeting: categories, specific vehicles, exclusions
  • Discount stacking rules with seasonal pricing
  • Real-time code validation during checkout
  • Automatic discount application to order pricing
  • Redemption tracking and campaign analytics
  • Referral program with unique links and discount inheritance
  • Multi-tenant isolation with company and tenant-wide scopes
  • API endpoints for widget/marketplace integration

Out of Scope:

  • Dynamic/surge pricing (handled by Pricing Engine)
  • Loyalty points accumulation system (future enhancement)
  • AI-driven discount recommendations (future enhancement)
  • Multi-currency discount conversion
  • A/B testing frameworks (future analytics feature)
  • Email/SMS campaign distribution (uses Communications module)
  • Payment provider discount integrations (Stripe coupons, etc.)

2. User Stories

Tenant Admin Stories

PriorityStoryAcceptance Criteria
P0As a tenant admin, I want to create promotional codes with percentage or fixed discounts so that I can run marketing campaignsCode created with unique identifier, discount type/value, saved to tenant scope
P0As a tenant admin, I want to set start/end dates for campaigns so that discounts expire automaticallyCodes rejected outside date range with clear error message
P0As a tenant admin, I want to limit total code usage so that I control campaign costsCode rejects redemption when limit reached with appropriate error
P0As a tenant admin, I want to restrict codes to first-time customers so that I incentivize acquisitionCode validates customer order history and rejects repeat customers
P1As a tenant admin, I want to set minimum order value requirements so that discounts apply to qualified bookingsCode rejects orders below threshold with minimum amount displayed
P1As a tenant admin, I want to target specific vehicle categories so that I promote underutilized segmentsCode validates vehicle category and rejects non-matching bookings
P1As a tenant admin, I want redemption and revenue analytics so that I measure campaign ROIDashboard displays redemption count, discount total, attributed revenue
P1As a tenant admin, I want to deactivate codes mid-campaign so that I respond to changing needsCode status changes immediately; existing orders unaffected
P2As a tenant admin, I want per-customer usage limits so that I prevent abuseCode tracks customer redemptions and enforces limit
P2As a tenant admin, I want to export usage data so that I analyze customer behaviorCSV export with code, customer, order, discount, date fields

Marketing Team Stories

PriorityStoryAcceptance Criteria
P0As a marketer, I want to generate partner referral links so that affiliates promote our servicesUnique link generated with embedded code and referrer attribution
P0As a marketer, I want to track which codes drive bookings so that I optimize spendAnalytics show redemption count, conversion rate, revenue per code
P1As a marketer, I want custom code names so that I track multi-channel attributionCode accepts custom alphanumeric names, validates uniqueness
P1As a marketer, I want to clone campaigns so that I replicate successful promotionsClone creates new code with copied settings, new unique identifier
P2As a marketer, I want to schedule campaigns in advance so that I plan seasonal promotionsStart date can be set in future; code activates automatically

Operator Stories

PriorityStoryAcceptance Criteria
P0As an operator, I want to validate promotional codes so that I confirm discount eligibilityReal-time validation returns success/error with specific reason
P0As an operator, I want clear error messages so that I explain issues to customersError messages specify reason: expired, limit reached, not eligible, etc.
P0As an operator, I want automatic discount application so that pricing is accurateDiscount calculated and applied to order total without manual entry
P1As an operator, I want to see active discounts on orders so that I explain savingsOrder details display discount code, type, and amount
P2As an operator, I want to override restrictions in exceptional cases so that I handle service issuesAdmin override available with audit logging

Customer Stories

PriorityStoryAcceptance Criteria
P0As a customer, I want to enter promotional codes during checkout so that I receive discountsCode input field available before payment; discount applies on submission
P0As a customer, I want immediate feedback on code validity so that I know if it workedSuccess shows discount amount; error shows specific reason
P0As a customer, I want to see discount deducted from my total so that I understand savingsOrder summary shows subtotal, discount line, final total
P1As a customer, I want to share referral links so that friends and I both benefitUnique referral link generated; discount applied to friend’s first order
P2As a customer, I want to see eligible promotions so that I maximize savingsAvailable promotions displayed during checkout if criteria met

Partner/Affiliate Stories

PriorityStoryAcceptance Criteria
P0As a partner, I want custom promotional codes so that I track referrals and earn commissionsUnique partner code created with referrer ID attribution
P1As a partner, I want to see bookings from my codes so that I measure marketing impactPartner dashboard shows redemption count and attributed bookings
P2As a partner, I want notifications when codes are used so that I follow up with customersNotification sent on redemption with order details

3. Functional Requirements

IDRequirementPriorityBusiness Outcome
FR-001Create, read, update, and delete promotional codesP0Marketing can launch and manage campaigns
FR-002Enforce unique, case-insensitive code identifiersP0Prevents customer confusion from duplicate codes
FR-003Support percentage, fixed amount, and free service discount typesP0Flexible promotional strategies for different campaigns
FR-004Validate codes are active before applyingP0Controlled campaign lifecycle
FR-005Enforce campaign date range constraintsP0Automatic campaign expiration without manual intervention
FR-006Track usage and enforce maximum redemption limitsP0Budget control and campaign cost management
FR-007Enforce per-customer usage limitsP1Prevents abuse and ensures fair distribution
FR-008Validate minimum order value before applying discountP1Ensures discounts apply to qualified purchases
FR-009Restrict codes to first-time customers when configuredP1Targeted customer acquisition
FR-010Filter by vehicle category eligibilityP1Promote specific fleet segments
FR-011Support company-specific and tenant-wide code scopesP0Multi-company promotional flexibility
FR-012Configure stacking rules with seasonal pricingP1Clear discount combination policies
FR-013Record redemption history with order and customer attributionP0Campaign performance tracking
FR-014Calculate and apply discounts to order pricingP0Accurate automated pricing
FR-015Display discount as separate line item on orders/invoicesP0Customer transparency and accounting clarity
FR-016Prevent code application after order confirmationP0Revenue protection
FR-017Generate referral links with embedded promotional codesP1Partner and affiliate program support
FR-018Track referrer attribution for referral redemptionsP1Commission and reward calculation
FR-019Provide code validation with detailed error responsesP0Clear customer communication
FR-020Expose redemption analytics for campaign reportingP1ROI measurement and optimization
FR-021Support bulk generation of unique single-use codesP2Mass distribution campaigns
FR-022Calculate discount before deposit to ensure accurate paymentsP0Correct payment processing

4. Acceptance Criteria

AC-001: Promotional Code Creation

Given I am a tenant admin
When I create a promotional code with code “SUMMER25”, type PERCENTAGE, value 25%, start 2026-06-01, end 2026-08-31, max usage 500
Then the code is saved with inactive status by default, scoped to my tenant, ready for activation

AC-002: Valid Code Application

Given an order for $200 within the valid date range
When customer applies active code “SUMMER25” (25% discount)
Then discount of $50 is calculated, order total becomes $150, redemption is recorded

AC-003: Expired Code Rejection

Given an order created on 2026-09-15
When customer applies code “SUMMER25” (expired 2026-08-31)
Then error “Promotional code has expired” is returned, no discount applied

AC-004: Usage Limit Enforcement

Given code “LAUNCH100” has reached 100/100 usage limit
When customer attempts to apply the code
Then error “Promotional code usage limit reached” is returned

AC-005: Minimum Order Value Enforcement

Given code “VIP50” requires minimum $300 order value
When customer applies to $250 order
Then error “Order must be at least $300 to use this code” is returned

AC-006: First-Time Customer Restriction

Given code “WELCOME20” restricted to first-time customers
When customer with 2 completed orders applies the code
Then error “This code is valid for first-time customers only” is returned

AC-007: Vehicle Category Targeting

Given code “LUXURY15” valid only for “luxury” category
When applied to “economy” vehicle
Then error “This code is not valid for the selected vehicle” is returned
When applied to “luxury” vehicle
Then discount is applied successfully

AC-008: Stacking Rule - Disallowed

Given code “STACK10” disallows stacking, order has seasonal surcharge
When customer applies the code
Then error “This code cannot be combined with other discounts” is returned

AC-009: Stacking Rule - Allowed

Given code “EXTRA5” (5%) allows stacking, order is $200 base + 20% seasonal ($240)
When customer applies the code
Then discount applies to $240, final total is $228

Given I am a partner
When I request a referral link with 10% discount
Then unique link generated (e.g., /book?ref=PARTNER_ABC123), code created with my referrer ID

AC-011: Referral Redemption

Given new customer clicks referral link and completes first booking
Then promotional code auto-applied, discount calculated, referrer ID recorded, commission credited

AC-012: Invoice Display

Given order with “SAVE30” applied ($300 base, $90 discount)
When viewing order or invoice
Then line items show: Subtotal $300.00, Promotional Discount (SAVE30) -$90.00, Total $210.00

AC-013: Mid-Campaign Deactivation

Given active code “FLASH24H” with 50 redemptions
When admin deactivates the code
Then new applications rejected, existing orders unchanged, redemption count frozen at 50

AC-014: Analytics Dashboard

Given viewing promotions dashboard for 2026-07-01 to 2026-07-31
Then each code shows: redemption count, total discount amount, attributed revenue, average order value, conversion rate; CSV export available

AC-015: Per-Customer Limit Enforcement

Given code “MONTHLY10” allows 1 use per customer
When customer A applies to second order after first successful use
Then error “You have already used this promotional code” is returned

5. Business Rules

Discount Calculation

  1. Calculate base vehicle price from tariff matrix
  2. Apply seasonal pricing adjustments
  3. Add extra services and delivery fees (subtotal)
  4. Apply promotional code discount to subtotal
  5. Calculate final total with VAT

Discount Constraints

  • Percentage discounts: 1% to 100%
  • Fixed amount: Cannot reduce total below zero
  • Only one promotional code per order

Code Lifecycle

  • Draft: Created, not redeemable
  • Active: Available for redemption
  • Paused: Temporarily disabled
  • Expired: Past end date, read-only
  • Exhausted: Usage limit reached
  • Deleted: Soft-deleted, history retained

Usage Tracking

  • Usage increments on order confirmation
  • Canceled orders don’t count toward limits
  • Refunded orders decrement usage count

Customer Eligibility

  • First-time customer = zero completed orders
  • Eligibility checked at code application time

Multi-Company Behavior

  • Company-specific codes: vehicles in specified company only
  • Tenant-wide codes: all companies in tenant

Referral Rules

  • Referral codes prefixed “REF_” + unique ID
  • Invitee receives discount on first order only
  • Self-referrals blocked

Code Security

  • Minimum 4 characters
  • Alphanumeric plus hyphens and underscores only
  • Case-insensitive matching
  • Rate-limited validation attempts

Validation Order

  1. Code exists and not deleted
  2. Code is active
  3. Within date range
  4. Usage limit not exceeded
  5. Customer eligibility met
  6. Vehicle eligibility met
  7. Minimum order value met
  8. Stacking rules compatible

6. Dependencies

DependencyIntegration PointImpact
Dynamic Pricing EngineDiscount applied after seasonal adjustmentsRequired for accurate pricing
Order/Reservation SystemCode validation and application during checkoutRequired for redemption flow
Payment ProcessingDeposit calculated on discounted totalRequired for correct payments
Customer ManagementOrder history for first-time validationRequired for eligibility rules
CommunicationsPromotional code distributionOptional for marketing
Analytics/ReportingCampaign performance dashboardsRequired for ROI tracking
AuthenticationRole-based access to promotion managementRequired for security

7. Glossary

TermDefinition
Promotional CodeAlphanumeric string customers enter to receive discounts
CampaignMarketing initiative with promotional codes and defined objectives
RedemptionSuccessful application of promotional code to an order
StackingCombining promotional discount with seasonal pricing
Referral LinkURL with embedded promotional code for tracking referrals
Usage LimitMaximum redemptions allowed (global or per-customer)
Attributed RevenueTotal order value from orders using a promotional code
ROIAttributed revenue ÷ discount amount given
First-Time CustomerCustomer with zero completed orders

Document History:

  • v1.0 (2026-01-09): Initial draft
  • v2.0 (2026-01-15): Converted to business-focused format with measurable outcomes, success metrics, consolidated requirements, prioritized user stories