Ride Management carries forty-eight system requirements grouped into six sets: Ride Request & Upfront Fare (9), Driver Matching (7), Pickup to Completion (11), Cancellations with Fair Fees and Penalties (8), Safety During and After the Ride (7), and Ride Management — Non-Functional (6). Every requirement is an EARS sentence scoped to the RideManagement bounded context. This is the largest and most cross-context-heavy context in RideNow — Ride Management is the central coordinator that orchestrates Geolocation (proximity, ETA, route), Payment (fare estimate, pre-auth, capture, refund, fees), Rider Management (ready-to-ride gate), and Driver Management (suspension on penalty thresholds). The upfront-fare commitment, the symmetric cancellation policy, and the safety bundle are formalized here.


requirements "Ride Request & Upfront Fare" scoped-to RideManagement {
  prd-source "ride-now.prd"

  REQ-RIDE-001 "Ride request" : event-driven
    source "Feature: Request a ride — Story: See the committed fare before I confirm — AC: Fare estimate displayed before confirmation"
    :: "The core transaction — rider wants to go somewhere"
    "When a rider confirms a ride request with pickup and dropoff
     locations, the Ride Management system shall create a ride in
     requested status and initiate driver matching."
    priority must

  REQ-RIDE-002 "Ride request requires ready-to-ride rider" : ubiquitous
    source "Feature: Frictionless rider signup — AC: Account is ready to request a ride once phone is verified and at least one payment method is added"
    :: "Unverified or payment-less riders cannot request rides"
    "The Ride Management system shall reject ride requests from riders
     who do not satisfy the Rider Management ready-to-ride gate."
    priority must

  REQ-RIDE-003 "Upfront fare display" : event-driven
    source "Feature: Request a ride — Story: See the committed fare before I confirm — AC: Fare estimate is displayed within 3 seconds of confirming destination"
    :: "Riders must see the fare before committing — largest funnel leak"
    "When a rider enters a destination, the Ride Management system
     shall request a fare estimate from the Payment system and display
     it to the rider within 3 seconds."
    priority must

  REQ-RIDE-004 "Committed fare is the charged fare" : ubiquitous
    source "Feature: Request a ride — Story: See the committed fare before I confirm — AC: Fare shown at confirm is the fare charged unless the route materially changes mid-ride"
    :: "Upfront fare is the PRD's core trust differentiator vs competitors"
    "The Ride Management system shall charge the rider the fare committed
     at confirmation, unless the actual route materially deviates from
     the requested route, in which case the deviation and its fare
     impact shall be shown to the rider for acceptance mid-ride."
    priority must

  REQ-RIDE-005 "Fare breakdown shown on confirm" : ubiquitous
    source "Feature: Request a ride — Story: See the committed fare before I confirm — AC: Fare breakdown shows base fare, distance, time, and surge if applicable"
    :: "Transparency — fare must be legible, not a single opaque number"
    "The Ride Management system shall present the committed fare with
     a breakdown showing base fare, distance, time, and surge component
     if applicable."
    priority must

  REQ-RIDE-006 "Free cancellation before matching" : state-driven
    source "Feature: Request a ride — Story: See the committed fare before I confirm — AC: Rider can cancel with no fee before a driver is assigned"
    :: "Non-committed rider must be able to abandon without penalty"
    "While the ride is in requested status with no driver assigned,
     the Ride Management system shall permit rider cancellation with
     no fee."
    priority must

  REQ-RIDE-007 "Scheduled ride booking window" : optional
    source "Feature: Request a ride — Story: Schedule a ride for later — AC: Rider can schedule a ride up to 7 days in advance"
    :: "Scheduled rides extend use beyond on-demand — airport/early-morning"
    "Where scheduled rides are supported, the Ride Management system
     shall allow riders to schedule a ride up to 7 days in advance."
    priority could

  REQ-RIDE-008 "Scheduled ride matching start" : complex
    source "Feature: Request a ride — Story: Schedule a ride for later — AC: Matching starts 15 minutes before scheduled pickup"
    :: "Matching lead time tuned for airport and commute scheduling"
    "Where scheduled rides are supported, when the current time is 15
     minutes before a scheduled ride's pickup time, the Ride Management
     system shall initiate driver matching for that ride."
    priority could

  REQ-RIDE-009 "Scheduled ride reminder" : complex
    source "Feature: Request a ride — Story: Schedule a ride for later — AC: Rider receives a confirmation at booking and a reminder 30 minutes before pickup"
    :: "Scheduled riders forget — a reminder prevents no-shows"
    "Where scheduled rides are supported, when the current time is 30
     minutes before a scheduled ride's pickup time, the Ride Management
     system shall send a reminder notification to the rider."
    priority could
}


requirements "Driver Matching" scoped-to RideManagement {
  prd-source "ride-now.prd"

  REQ-RIDE-020 "Nearby driver query" : event-driven
    source "Feature: Driver matching — Story: Driver confirmed within seconds — AC: Eligible drivers are queried from Geolocation on each ride request"
    :: "Fast matching is the core competitive advantage"
    "When a ride enters requested status, the Ride Management system
     shall query the Geolocation system for online, match-eligible
     drivers near the pickup location."
    priority must

  REQ-RIDE-021 "Offer to closest driver" : event-driven
    source "Feature: Driver matching — Story: Driver confirmed within seconds"
    :: "Proximity minimizes pickup time and distance"
    "When the Ride Management system receives the nearby-driver list,
     the Ride Management system shall offer the ride to the closest
     eligible driver."
    priority must

  REQ-RIDE-022 "Offer payload content" : ubiquitous
    source "Feature: Driver matching — Story: See ride offers with full destination and estimated earnings — AC: Offer shows pickup, destination, estimated distance, duration, and estimated earnings"
    :: "Drivers accept informed — incumbent platforms hide destination"
    "The Ride Management system shall include pickup, destination,
     estimated distance, estimated duration, and estimated driver
     earnings in every ride offer."
    priority must

  REQ-RIDE-023 "Offer timeout" : unwanted
    source "Feature: Driver matching — Story: See ride offers with full destination and estimated earnings — AC: Driver has 15 seconds to accept or decline"
    :: "Unresponsive drivers must not block riders"
    "If a driver does not respond to a ride offer within 15 seconds,
     then the Ride Management system shall retract the offer and
     offer the ride to the next closest eligible driver."
    priority must

  REQ-RIDE-024 "No driver available" : unwanted
    source "Feature: Driver matching — Story: Driver confirmed within seconds — AC: If no driver accepts within the search, rider is notified with a clear reason"
    :: "Transparency — rider should know when no one is coming"
    "If no eligible driver accepts the ride within the configured search
     radius and timeout, then the Ride Management system shall cancel
     the ride with reason 'no-driver-available' and notify the rider."
    priority must

  REQ-RIDE-025 "Driver accepts ride" : event-driven
    source "Feature: Driver matching — Story: Driver confirmed within seconds"
    :: "Commitment — driver is now en route to pickup"
    "When a driver accepts a ride offer, the Ride Management system
     shall transition the ride to driver-assigned status, notify the
     rider with driver and vehicle details, and publish a RideAccepted
     event."
    priority must

  REQ-RIDE-026 "Driver acceptance-rate visibility" : ubiquitous
    source "Feature: Driver matching — Story: See ride offers with full destination and estimated earnings — AC: Driver sees their own acceptance rate on the driver home screen"
    :: "Transparency — drivers need to see their own performance"
    "The Ride Management system shall expose the driver's 30-day offer
     acceptance rate on the driver home screen."
    priority should
}


requirements "Pickup to Completion" scoped-to RideManagement {
  prd-source "ride-now.prd"

  REQ-RIDE-040 "Live driver location during assignment" : state-driven
    source "Feature: Pickup to completion — Story: See the live location of my driver en route — AC: Live driver location updates at least every 3 seconds while the ride is active"
    :: "Rider plans when to walk to pickup — stale location undermines trust"
    "While the ride is in driver-assigned or driver-arrived status,
     the Ride Management system shall update the rider-facing driver
     location at least every 3 seconds."
    priority must

  REQ-RIDE-041 "Pickup ETA refresh" : state-driven
    source "Feature: Pickup to completion — Story: See the live location of my driver en route — AC: ETA to pickup is refreshed on each update"
    :: "ETA is only useful when it reflects current conditions"
    "While the ride is in driver-assigned status, the Ride Management
     system shall refresh the rider-facing pickup ETA on each driver
     location update."
    priority must

  REQ-RIDE-042 "Driver arrival" : event-driven
    source "Feature: Pickup to completion — Story: One-tap Start Ride and End Ride — AC: Start Ride is enabled once driver is within 100m of pickup and rider is present"
    :: "Arrival at pickup is a distinct step — triggers boarding"
    "When the driver's location is within 100 meters of the pickup
     point, the Ride Management system shall transition the ride to
     driver-arrived status and notify the rider."
    priority must

  REQ-RIDE-043 "Rider no-show" : complex
    source "Feature: Cancellations with fair fees and penalties — Story: Policy-enforced no-shows and late cancels — AC: Rider who does not board within 5 minutes of driver arrival is treated as no-show and charged"
    :: "Drivers should not wait indefinitely — compensate and free them"
    "While the ride is in driver-arrived status, if the rider does not
     board within 5 minutes, then the Ride Management system shall
     cancel the ride with reason 'rider-no-show', request a cancellation
     fee charge from the Payment system, and free the driver."
    priority must

  REQ-RIDE-044 "Ride start" : event-driven
    source "Feature: Pickup to completion — Story: One-tap Start Ride and End Ride — AC: Start Ride triggers the ride lifecycle"
    :: "Meter starts — the ride is now in progress"
    "When the driver starts the ride, the Ride Management system shall
     transition the ride to in-progress status, record the actual
     pickup location and time, and publish a RideStarted event."
    priority must

  REQ-RIDE-045 "Ride tracking during trip" : state-driven
    source "Feature: Pickup to completion — Story: See the live location of my driver en route — AC: Live location updates at least every 3 seconds while the ride is active"
    :: "Real-time safety — know where every active ride is"
    "While the ride is in progress, the Ride Management system shall
     receive location updates from the Geolocation system at least
     every 3 seconds and track the ride route in real time."
    priority must

  REQ-RIDE-046 "Destination ETA refresh during trip" : state-driven
    source "Feature: ETA and routing — Story: ETA to destination stays accurate during the ride — AC: ETA to destination is refreshed at least every 30 seconds during the ride"
    :: "Rider informs the person they are meeting when they will arrive"
    "While the ride is in progress, the Ride Management system shall
     refresh the destination ETA on the rider app at least every
     30 seconds."
    priority must

  REQ-RIDE-047 "Ride completion" : event-driven
    source "Feature: Pickup to completion — Story: One-tap Start Ride and End Ride — AC: End Ride triggers fare finalization"
    :: "End of trip — trigger fare finalization and payment"
    "When the driver ends the ride, the Ride Management system shall
     transition the ride to completed status, record the actual
     dropoff location and time, and publish a RideCompleted event."
    priority must

  REQ-RIDE-048 "Fare finalization on completion" : event-driven
    depends-on REQ-RIDE-047
    source "Feature: Auto-charge on completion — Story: Clear receipt with fare breakdown immediately after the ride — AC: Receipt is delivered in-app within 60 seconds of ride completion"
    :: "Actual fare may differ from estimate — distance and time now known"
    "When a ride is completed, the Ride Management system shall request
     final fare computation from the Payment system using actual
     distance and duration."
    priority must

  REQ-RIDE-049 "Automatic payment on completion" : event-driven
    depends-on REQ-RIDE-048
    source "Feature: Auto-charge on completion — value-proposition: Cashless, instant, and transparent at the end of every ride"
    :: "Cashless — payment happens without rider action"
    "When the final fare is computed, the Ride Management system shall
     initiate payment capture through the Payment system."
    priority must

  REQ-RIDE-050 "Earnings breakdown latency" : event-driven
    source "Feature: Pickup to completion — Story: One-tap Start Ride and End Ride — AC: End Ride triggers fare finalization and earnings display within 5 seconds"
    :: "Earnings transparency is a PRD-level goal — measured in seconds"
    "When a ride is completed, the Ride Management system shall ensure
     the driver earnings breakdown is displayed in the driver app
     within 5 seconds at p95."
    priority must
}


requirements "Cancellations with Fair Fees and Penalties" scoped-to RideManagement {
  prd-source "ride-now.prd"

  REQ-RIDE-060 "Rider cancellation before assignment" : complex
    source "Feature: Cancellations with fair fees and penalties — Story: Cancel before a driver is assigned at no cost — AC: Cancelling before driver-assigned status incurs no fee"
    :: "Free cancellation while no driver is committed"
    "While the ride is in requested status, when the rider cancels,
     the Ride Management system shall cancel the ride with no fee,
     request release of any payment hold from the Payment system,
     and publish a RideCancelledByRider event."
    priority must

  REQ-RIDE-061 "Rider cancellation after assignment" : complex
    source "Feature: Cancellations with fair fees and penalties — Story: Cancel before a driver is assigned at no cost — AC: Cancelling after driver-assigned status incurs a published cancellation fee"
    :: "Driver already committed — rider pays cancellation fee"
    "While the ride is in driver-assigned or driver-arrived status,
     when the rider cancels, the Ride Management system shall cancel
     the ride, request a cancellation fee charge from the Payment
     system, free the driver, and publish a RideCancelledByRider event."
    priority must

  REQ-RIDE-062 "Cancellation fee transparency" : ubiquitous
    source "Feature: Cancellations with fair fees and penalties — Story: Cancel before a driver is assigned at no cost — AC: Cancelling after driver-assigned status incurs a published cancellation fee"
    :: "Fees must be published — surprise fees erode trust"
    "The Ride Management system shall display the applicable cancellation
     fee policy on the rider app at any time the rider can cancel."
    priority must

  REQ-RIDE-063 "Driver cancellation" : complex
    source "Feature: Cancellations with fair fees and penalties — Story: Policy-enforced no-shows and late cancels"
    :: "Drivers who cancel after committing degrade reliability — track and rematch"
    "While the ride is in driver-assigned status, when the driver
     cancels, the Ride Management system shall cancel the ride with
     no rider charge, increment the driver's cancellation count,
     re-enter the ride into matching, and publish a
     RideCancelledByDriver event."
    priority must

  REQ-RIDE-064 "Excessive driver cancellation penalty" : complex
    source "Feature: Cancellations with fair fees and penalties — Story: Policy-enforced no-shows and late cancels — AC: Driver who cancels more than 3 rides in 24h is suspended for 30 minutes"
    :: "Drivers who cancel too often degrade service quality"
    "While a driver has cancelled more than 3 rides in the last 24 hours,
     if the driver cancels again, then the Ride Management system shall
     temporarily suspend the driver for 30 minutes and notify the Driver
     Management system."
    priority must

  REQ-RIDE-065 "Driver no-show" : complex
    source "Feature: Cancellations with fair fees and penalties — Story: Policy-enforced no-shows and late cancels"
    :: "Drivers who accept then vanish waste rider time"
    "While the ride is in driver-assigned status, if the driver does
     not arrive at the pickup point within the estimated ETA plus 5
     minutes, then the Ride Management system shall cancel the ride
     with reason 'driver-no-show', re-enter the ride into matching,
     and increment the driver's no-show count."
    priority must

  REQ-RIDE-066 "Excessive driver no-show penalty" : complex
    source "Feature: Cancellations with fair fees and penalties — Story: Policy-enforced no-shows and late cancels — AC: Driver who no-shows more than 2 times in 24h is suspended for 1 hour"
    :: "Chronic no-shows are as damaging as cancellations"
    "While a driver has accumulated more than 2 no-shows in the last
     24 hours, if the driver no-shows again, then the Ride Management
     system shall suspend the driver for 1 hour and notify the Driver
     Management system."
    priority must

  REQ-RIDE-067 "Rider rematch after driver no-show" : event-driven
    depends-on REQ-RIDE-065
    source "Feature: Cancellations with fair fees and penalties — Story: Policy-enforced no-shows and late cancels"
    :: "Rider should not restart from scratch when driver fails them"
    "When a ride is cancelled with reason 'driver-no-show', the Ride
     Management system shall notify the rider that a new driver is
     being found and provide an updated pickup ETA."
    priority must
}


requirements "Safety During and After the Ride" scoped-to RideManagement {
  prd-source "ride-now.prd"

  REQ-RIDE-080 "Trip sharing" : event-driven
    source "Feature: Safety during and after the ride — Story: Share live trip status with a contact — AC: Rider can designate emergency contacts and share a live-tracking link in one tap"
    :: "Social safety — let someone trusted know where the rider is"
    "When a rider activates trip sharing, the Ride Management system
     shall send a real-time tracking link to the rider's designated
     emergency contacts showing location and ETA while the ride is
     active."
    priority must

  REQ-RIDE-081 "Emergency button event" : event-driven
    source "Feature: Safety during and after the ride — Story: Emergency button — AC: Emergency event records timestamp, ride context, and current location"
    :: "Rider and driver safety — direct escalation path"
    "When a rider or driver presses the emergency button during a ride,
     the Ride Management system shall record an emergency event with
     timestamp, ride context, and current location and notify the
     safety team."
    priority must

  REQ-RIDE-082 "Emergency acknowledgment SLA" : event-driven
    source "Feature: Safety during and after the ride — Story: Emergency button — AC: Safety team is notified within 60 seconds"
    :: "Emergency response time is the single most important safety metric"
    "When an emergency event is recorded, the Ride Management system
     shall deliver the notification to the safety team within 60 seconds
     at p95."
    priority must

  REQ-RIDE-083 "Emergency location sharing with services" : optional
    source "Feature: Safety during and after the ride — Story: Emergency button — AC: If configured, local emergency services receive the location link"
    :: "Market-by-market integration — not all jurisdictions accept platform notifications"
    "Where emergency services integration is enabled in the rider's
     market, when an emergency event is recorded, the Ride Management
     system shall send a location link to the configured local
     emergency services endpoint."
    priority should

  REQ-RIDE-084 "Unusual stop detection" : complex
    source "Feature: Safety during and after the ride — summary mentions unusual-stop detection during a ride"
    :: "Anomaly detection — flag rides that deviate dangerously"
    "While the ride is in progress, if the vehicle stops for more than
     5 minutes at a location not on the planned route, then the Ride
     Management system shall send a safety check notification to the
     rider."
    priority should

  REQ-RIDE-085 "Post-ride safety report window" : event-driven
    source "Feature: Safety during and after the ride — Story: Post-ride safety reports attached to the ride record — AC: Reports can be filed within 30 days of ride completion"
    :: "Surface incidents that did not trigger real-time alerts"
    "When a rider or driver files a safety report within 30 days of
     ride completion, the Ride Management system shall record the
     report, attach it to the ride record, flag the ride, and escalate
     to the safety queue."
    priority must

  REQ-RIDE-086 "Late safety report handling" : unwanted
    source "Feature: Safety during and after the ride — Story: Post-ride safety reports attached to the ride record — AC: Reports can be filed within 30 days of ride completion"
    :: "Fixed window — late reports go to a separate triage channel"
    "If a safety report is filed more than 30 days after ride completion,
     then the Ride Management system shall route the report to the
     manual-triage queue rather than the automated escalation path."
    priority should
}


requirements "Ride Management — Non-Functional" scoped-to RideManagement {
  prd-source "ride-now.prd"

  REQ-RIDE-NFR-001 "Match latency p50" : event-driven
    source "Goal: Reduce rider wait time and abandonment — metric: p50 time from RideRequested to driver-assigned < 30 seconds"
    :: "Flagship performance commitment — first-order rider experience metric"
    "When a ride is requested, the Ride Management system shall
     achieve a driver-assigned transition within 30 seconds at p50
     and within 90 seconds at p95 per market."
    priority must

  REQ-RIDE-NFR-002 "Fare estimate latency" : event-driven
    source "Feature: Request a ride — AC: Fare estimate is displayed within 3 seconds of confirming destination"
    :: "Upfront fare is the commitment moment — latency must not erode it"
    "When a rider enters a destination, the Ride Management system
     shall display the fare estimate within 3 seconds at p95."
    priority must

  REQ-RIDE-NFR-003 "Ride completion rate" : ubiquitous
    source "Goal: Run rides reliably end-to-end — metric: Ride completion rate > 95%"
    :: "Completion rate is the reliability headline metric"
    "The Ride Management system shall sustain a ride completion rate
     above 95% measured monthly per market."
    priority must

  REQ-RIDE-NFR-004 "Emergency path availability" : ubiquitous
    source "Feature: Safety during and after the ride — AC: Safety team is notified within 60 seconds"
    depends-on REQ-NFR-001
    :: "Emergency flows must survive degraded platform conditions"
    "The Ride Management system shall maintain the emergency button
     and trip sharing features available at 99.99% measured monthly,
     even when non-emergency features are degraded."
    priority must

  REQ-RIDE-NFR-005 "Audit trail for cancellations" : ubiquitous
    source "Constraint: Local ride-hailing operating licences"
    :: "Regulators may audit cancellation and no-show policy enforcement"
    "The Ride Management system shall record every cancellation event
     with rider identity, driver identity, ride state at cancellation,
     reason, fee outcome, and timestamp in an append-only audit log
     retained for at least 7 years."
    priority must

  REQ-RIDE-NFR-006 "Deployment independence" : ubiquitous
    source "Goal: Run rides reliably end-to-end"
    :: "Ride Management is the central coordinator — it must deploy without blocking other BCs"
    "The Ride Management system shall be deployable independently of
     Driver Management, Rider Management, Geolocation, and Payment,
     subject to published inter-context compatibility contracts."
    priority should
}

Summary

Pattern Count
ubiquitous 10
state-driven 5
event-driven 22
unwanted 4
complex 9
optional 2
Total 48 (39 must, 7 should, 4 could)
Set Total Must Should Could
Ride Request & Upfront Fare 9 6 0 3
Driver Matching 7 6 1 0
Pickup to Completion 11 11 0 0
Cancellations with Fair Fees and Penalties 8 8 0 0
Safety During and After the Ride 7 4 3 0
Ride Management — Non-Functional 6 5 1 0

Cross-Context Dependencies

Ride Management is the central coordinator. Almost every requirement set names another bounded context — these are the contracts that hold the platform together.

Requirement Depends on Nature
REQ-RIDE-002 (Ready-to-ride gate) Rider Management RIDE → RDR: query the rider readiness gate before accepting a ride request
REQ-RIDE-003 (Upfront fare display) Payment RIDE → PAY: request fare estimate from Payment within the 3-second budget
REQ-RIDE-020 (Nearby driver query) Geolocation RIDE → GEO: query online, match-eligible drivers by proximity
REQ-RIDE-040 (Live driver location) Geolocation RIDE ↔ GEO: subscribe to driver location stream during assignment
REQ-RIDE-041 (Pickup ETA refresh) Geolocation RIDE → GEO: refreshed pickup ETA on each location update
REQ-RIDE-043 (Rider no-show) Payment RIDE → PAY: charge cancellation fee on rider no-show
REQ-RIDE-045 (Ride tracking during trip) Geolocation RIDE ↔ GEO: subscribe to location updates while in-progress
REQ-RIDE-046 (Destination ETA refresh) Geolocation RIDE ↔ GEO: subscribe to refreshed destination ETA at least every 30s
REQ-RIDE-048 (Fare finalization) Payment RIDE → PAY: request final fare computation on completion
REQ-RIDE-049 (Automatic payment) Payment RIDE → PAY: initiate capture once final fare is computed
REQ-RIDE-060 (Rider cancellation before assignment) Payment RIDE → PAY: release any pre-auth hold on free cancellation
REQ-RIDE-061 (Rider cancellation after assignment) Payment RIDE → PAY: charge cancellation fee on driver-committed cancellation
REQ-RIDE-064 (Driver cancellation penalty) Driver Management RIDE → DRV: request 30-minute suspension after >3 cancellations / 24h
REQ-RIDE-066 (Driver no-show penalty) Driver Management RIDE → DRV: request 1-hour suspension after >2 no-shows / 24h
REQ-RIDE-067 (Rematch after driver no-show) Driver Management RIDE → DRV: publish DriverNoShowRecorded for the driver reliability score
REQ-RIDE-NFR-002 (Fare estimate latency) Payment, Geolocation RIDE → PAY & GEO: 3-second budget includes both surge lookup and price computation

Note: surge transparency at the fare estimate is owned by Geolocation (REQ-GEO-023) and consumed by Ride Management for display; the upfront-fare invariant — surge applied at confirm is not increased afterward (REQ-GEO-024REQ-RIDE-004) — is a cross-context agreement that materializes in the Domain Model page as the RideRequestRideConsistency agreement and as the inter-context contract enforced by PaymentGateway and GeolocationGateway.