Version: 2.0 | Status: Business Review | Date: 2026-01-15
Previous Version: 1.0 (Technical Draft) | Author: Product Team
Change Log
| Version | Date | Changes |
|---|
| 2.0 | 2026-01-15 | Converted to business-focused format; added measurable outcomes and success metrics; consolidated 105 technical requirements to 18 business requirements |
| 1.0 | 2026-01-09 | Initial technical draft |
1. Executive Summary
1.1 Purpose
Enable rental companies to accept online payments, manage deposits, process refunds, and generate invoices through Stripe integration—all while maintaining PCI compliance and complete financial separation between companies.
1.2 Business Value
| Value Area | Measurable Outcome | Timeframe |
|---|
| Revenue Collection | Increase online payment adoption from 0% to 70%+ of total transactions | Within 6 months |
| Faster Payments | Reduce average collection time from 7+ days (bank transfer) to <24 hours | Within 3 months |
| Reduced Manual Work | Eliminate 90% of manual payment reconciliation through automated webhook updates | Within 3 months |
| Payment Security | Maintain zero PCI compliance violations or card data breaches | Ongoing |
| Platform Revenue | Generate $25K+/month in application fees from connected account transactions | Within 12 months |
| Deposit Efficiency | Reduce deposit return processing from 5-7 days to same-day release | Within 3 months |
| Invoice Accuracy | Achieve 100% invoice numbering accuracy with zero duplicates or gaps | Immediate |
1.3 Target Users
| User Type | Business Context |
|---|
| Company Admins | Configure payment processing, manage Stripe integration, process refunds |
| Rental Staff | Create payment requests, record offline payments, generate invoices |
| Customers | Pay via shareable payment links, view payment status |
| Partners | Track payments and revenue for marketplace vehicle rentals |
1.4 Scope
Included:
- Stripe Connect integration for independent payment processing per company
- Payment link generation for remote customer payments
- Deposit pre-authorization with manual capture/release
- Full and partial refund processing
- Invoice generation with sequential numbering
- Manual offline payment recording (cash, bank transfer)
- Real-time payment status via webhook automation
- Platform application fee collection
Excluded:
- Alternative payment processors (PayPal API, crypto API)
- Invoice email delivery (see Communication System PRD)
- PDF invoice rendering (see PDF Documents PRD)
- Subscription billing for platform plans
- Multi-currency conversion
- Fraud detection and chargeback management
2. Success Metrics
| Metric | Definition | Baseline | Target | Measurement Method |
|---|
| Online Payment Adoption | % of orders paid via Stripe vs. offline methods | 0% (new) | 70% within 6 months | Payment method analysis |
| Payment Collection Speed | Average hours from invoice to payment received | 168 hrs (est. bank transfer) | <24 hrs | Timestamp analysis |
| Payment Success Rate | % of payment attempts completing successfully | N/A (new) | >95% | Stripe dashboard |
| Refund Processing Time | Hours from refund request to customer receipt | 5-7 days manual | Same-day initiation | Refund timestamp logs |
| Reconciliation Automation | % of payments updated via webhooks vs. manual | 0% | >95% | Webhook vs. manual update ratio |
| Invoice Numbering Accuracy | Invoices with correct sequential numbering | N/A (new) | 100% | Invoice audit |
| Application Fee Revenue | Monthly platform fees from connected accounts | $0 | $25K/month within 12 months | Stripe reports |
| PCI Compliance | Data breach or compliance violation incidents | 0 | 0 (maintain) | Security audits |
| Payment Support Tickets | Monthly support tickets related to payment issues | N/A (new) | <10/month per 100 tenants | Help desk categorization |
| Deposit Capture Rate | % of pre-authorized deposits successfully captured | N/A (new) | >98% | Capture success logs |
3. User Stories
Company Admins (P0 - Critical)
| ID | Story | Acceptance Criteria |
|---|
| US-01 | As an admin, I want to connect my company’s Stripe account so payments go directly to my bank | Given I complete OAuth flow, when connection succeeds, then my Stripe account is active and test payments work within 1 hour |
| US-02 | As an admin, I want to process refunds so I can resolve customer issues promptly | Given a completed payment, when I request full/partial refund, then customer receives funds within Stripe’s standard timeline (5-10 days) |
| US-03 | As an admin, I want my payment records isolated from other companies so financial data remains confidential | Given I’m logged in, when I view payments, then only my company’s transactions are visible |
Company Admins (P1 - Important)
| ID | Story | Acceptance Criteria |
|---|
| US-04 | As an admin, I want to see Stripe integration status so I know my payment system is operational | Given Stripe is connected, when I view settings, then connection status, account ID, and enabled features are displayed |
| US-05 | As an admin, I want to disconnect Stripe if I change payment providers | Given I request disconnection, when confirmed, then integration is disabled and settings cleared within 1 minute |
Rental Staff (P0 - Critical)
| ID | Story | Acceptance Criteria |
|---|
| US-06 | As an operator, I want to generate payment links so customers can pay remotely | Given an order with amount, when I create payment link, then shareable URL is generated and can be sent to customer |
| US-07 | As an operator, I want to hold deposits without immediate charge so customers have funds reserved | Given deposit amount, when I create pre-authorization, then funds are held (not captured) and can be captured or released later |
| US-08 | As an operator, I want to see real-time payment status so I know when customers have paid | Given customer completes payment, when webhook is received, then order status updates within 30 seconds |
Rental Staff (P1 - Important)
| ID | Story | Acceptance Criteria |
|---|
| US-09 | As an operator, I want to record cash/bank transfer payments so all transactions are tracked | Given offline payment received, when I record it manually, then payment appears in order history with method noted |
| US-10 | As an operator, I want to create invoices with proper numbering so documents are professional | Given order details, when I create invoice, then sequential number is assigned with no gaps or duplicates in series |
| US-11 | As an operator, I want to charge saved cards for repeat customers so checkout is faster | Given customer with saved card, when I create payment intent, then charge processes without customer re-entering details |
Customers (P0 - Critical)
| ID | Story | Acceptance Criteria |
|---|
| US-12 | As a customer, I want to pay via a link without creating an account so payment is convenient | Given payment link URL, when I click and enter card, then payment processes and I see confirmation |
| US-13 | As a customer, I want to see my payment status so I know my reservation is confirmed | Given I’ve paid, when I view order details, then payment status shows “completed” and order shows “confirmed” |
Customers (P1 - Important)
| ID | Story | Acceptance Criteria |
|---|
| US-14 | As a customer, I want my card saved for future rentals so I don’t re-enter details | Given I opt to save card, when I pay, then card is stored securely and available for future use |
| US-15 | As a customer, I want notification when deposits are refunded so I know funds are returning | Given deposit is released, when refund processes, then I receive notification |
Partners (P1 - Important)
| ID | Story | Acceptance Criteria |
|---|
| US-16 | As a partner, I want to see payments for my marketplace vehicles so I can track revenue | Given my vehicle was rented, when payment completes, then I see payment details and profit calculation |
4. Functional Requirements
| ID | Requirement | Priority | Business Rationale |
|---|
| FR-01 | Companies connect their own Stripe accounts for independent payment processing | P0 | Financial isolation, direct payouts to each business |
| FR-02 | Payment links are shareable URLs for remote customer payments | P0 | Enables online payments without in-person card swipe |
| FR-03 | Pre-authorization holds funds without capture for up to 7 days | P0 | Enables damage deposits that can be released or captured |
| FR-04 | Instant payment captures funds immediately with application fee | P0 | Standard payment flow for confirmed bookings |
| FR-05 | Full and partial refunds return funds to customers | P0 | Resolves cancellations and customer disputes |
| FR-06 | Payment status updates automatically via Stripe webhooks | P0 | Eliminates manual reconciliation, real-time accuracy |
| FR-07 | Manual payments (cash, bank transfer) can be recorded | P0 | Tracks all revenue regardless of collection method |
| FR-08 | Invoices are created with sequential numbering per series | P0 | Professional documents, audit compliance |
| FR-09 | Stripe customers are created to save payment methods | P1 | Enables repeat customer convenience |
| FR-10 | Order status updates to “confirmed” on successful payment | P1 | Automates confirmation workflow |
| FR-11 | Multiple payment methods supported per order | P1 | Flexibility for split payments, deposits + final payment |
| FR-12 | Vehicle-level profit/expense tracking | P1 | Financial visibility per asset |
| FR-13 | Platform collects application fees on connected transactions | P1 | Platform revenue model |
| FR-14 | Payment variants configure order payment flow | P1 | Business flexibility (no payment, pre-auth, instant) |
| FR-15 | Invoice series support multiple numbering formats | P2 | Supports different document types (invoice, proforma) |
| FR-16 | Card verification validates card without charging | P2 | Confirms card validity for no-payment reservations |
| FR-17 | Dispute events are tracked when chargebacks occur | P2 | Visibility into payment disputes |
| FR-18 | Payment expiration dates limit payment link validity | P2 | Controls payment window |
5. Business Rules
| ID | Rule | Business Rationale |
|---|
| BR-01 | Payment statuses follow lifecycle: pending → completed/pre_authorized → refunded/disputed | Accurate financial reporting, audit trail |
| BR-02 | Pre-authorizations expire after 7 days if not captured | Stripe limitation, prevents stale holds |
| BR-03 | Application fees only apply to automatic capture payments | Fair fee collection on completed transactions |
| BR-04 | Refunds cannot exceed original payment amount | Prevents over-refunding errors |
| BR-05 | Invoice numbers are sequential within series, no gaps or duplicates | Audit compliance, professional standards |
| BR-06 | Payment links can be canceled if unpaid; completed payments are refunded | Different workflows for different states |
| BR-07 | Currency is company-specific and consistent across order payments | Financial accuracy, no conversion complexity |
| BR-08 | Webhooks are processed idempotently to prevent duplicate updates | Data integrity on network retries |
| BR-09 | Customer card data is never stored locally (Stripe only) | PCI DSS compliance |
| BR-10 | Each company’s Stripe credentials are isolated | Financial separation, regulatory compliance |
6. Acceptance Criteria
AC-01: Stripe Account Connection
Given an admin with valid Stripe account
When OAuth connection completes
Then company can create payment links and intents
And test payment succeeds within 1 hour
AC-02: Payment Link Generation
Given an order with amount specified
When operator creates payment link
Then shareable URL is generated
And customer can complete payment without account creation
AC-03: Successful Payment Processing
Given customer completes payment link
When Stripe processes payment
Then payment status updates to “completed” within 30 seconds
And order status updates to “confirmed”
AC-04: Pre-Authorization Hold
Given deposit amount and manual capture selected
When payment is authorized
Then funds are held but not transferred
And operator can capture or release within 7 days
AC-05: Refund Processing
Given a completed payment
When admin requests full/partial refund
Then Stripe processes refund
And payment status reflects refund state
AC-06: Invoice Sequential Numbering
Given invoice series “INV-2024-” with last number 100
When new invoice is created
Then number is 101
And no gaps or duplicates exist in series
AC-07: Offline Payment Recording
Given cash payment received
When operator records manual payment
Then payment appears in order history
And payment method shows “cash”
AC-08: Saved Card Payment
Given customer with saved payment method
When operator charges saved card
Then payment processes without customer action
And confirmation is sent to customer
AC-09: Account Deauthorization
Given merchant deauthorizes app in Stripe dashboard
When webhook is received
Then integration is disabled within 5 minutes
And settings are cleared
AC-10: Data Isolation
Given user from Company A
When querying payment records
Then only Company A payments are visible
And Company B data returns “not found”
7. Dependencies
7.1 Depends On
| Dependency | Requirement |
|---|
| Multi-Tenant Architecture | Tenant isolation, company settings storage |
| Authentication | User identity for payment creator, role-based access |
| Customer Management | Customer data for Stripe customer creation |
| Order System | Order data, totals, status updates |
7.2 Depended By
| Feature | Dependency |
|---|
| Communication System | Payment confirmation emails, refund notifications |
| PDF Documents | Invoice PDF generation |
| External Integrations | Marketplace payment distribution |
7.3 External Services
| Service | Purpose | Impact if Unavailable |
|---|
| Stripe API | All payment processing | Payments cannot be processed |
| Stripe Webhooks | Real-time status updates | Manual reconciliation required |
8. Glossary
| Term | Business Definition |
|---|
| Payment Link | Shareable URL where customers enter card details to pay |
| Pre-Authorization | Holding funds on customer’s card without transferring (for deposits) |
| Instant Payment | Immediate fund capture and transfer |
| Application Fee | Platform’s percentage of each transaction for revenue |
| Connected Account | Rental company’s own Stripe account for receiving payments |
| Invoice Series | Numbering format for invoices (e.g., “INV-2024-001”) |
| Payment Variant | Order setting determining payment flow (none, instant, deposit hold) |
| Webhook | Automatic notification from Stripe when payment events occur |
| Charge | Completed money transfer that can be refunded |
| Refund | Return of funds to customer (full or partial) |
9. Approval
| Role | Name | Date | Status |
|---|
| Product Owner | | | Pending |
| Engineering Lead | | | Pending |
| Finance Stakeholder | | | Pending |
10. Unresolved Questions
- Application fee percentage? Current “defaultFee” value - confirm rate with finance
- Multi-currency timeline? When to support companies in different currencies?
- Chargeback handling? Process for disputed payments - manual or automated?
- Payment link expiry default? Standard expiration for unused payment links?
- Refund fee policy? Refund application fees by default or require opt-in?
- Alternative payment methods? PayPal/crypto integration priority and timeline?