Skip to main content

BUSINESS.md: Hotel8:Upsell — Business Requirements & Functionality

Audience: product owners, business analysts, and anyone evaluating what Hotel8:Upsell does for the business. For architecture read README.md; for wire-level detail read DESIGN.md.

1. Business Purpose​

  • Convert bookings into higher-value stays: upgrades, early check-in, late check-out, amenities.
  • Make offer strategy tenant-editable (rules as data) with honest A/B measurement.
  • Settle accepted upsells immediately through the payments lane.

2. Business Scope (What the Service Provides)​

CapabilityDescription
Eligibility rulesTenant-authored conditions (stay window, room-type compatibility, guest tier, caps) with a test-preview
Offer generationEvent-driven on booking creation; daily re-eligibility sweep
Dynamic pricingContextual price with provenance (rule, inputs)
A/B testingVariant allocation per offer for conversion comparison
Offer presentationGuest-app offer listing + accept/decline
SettlementAccepted paid offers settle through payments; transaction records reflect results
Frequency governanceDecline memory + frequency caps per stay
Admin consoleRFW pages incl. shared Shield policy admin

What the service does NOT own (business boundary)

ConcernOwning service
Reservation changes (upgrade re-assignment)hotel8:pms
Payment captureBill8:Payments
Room inventory truthhotel8:pms
Loyalty balances/tiershotel8:loyalty
Notification deliverySentin8:Post
Guest identity/consentSentin8:Auth

3. Business Capabilities​

AreaBusiness rule
GenerationAn offer exists only for an eligible booking; eligibility is defined by the tenant's rule set, evaluated without developer involvement.
PricingThe displayed price derives from the rule's pricing policy and the provenance is auditable.
PresentationA guest never sees the same offer class again after declining it during the stay.
A/B testingGuests are assigned to a variant deterministically; conversion compares like-for-like.
AcceptanceAccepting a paid offer records a transaction and settles; the offer cannot be double-charged.
DeclineDeclining is recorded; no further generation for that class.
ExpiryOffers expire per stay timeline — stale offers cannot be accepted.
Modification couplingAccepted upsells that change the stay are reflected back as a reservation modification event.

4. Business Events (Outbound)​

EventFires when
hotel8:upsell:offers:generatedNew offers created from eligibility evaluation
hotel8:upsell:cron:daily_generationDaily sweep ran
hotel8:upsell:offer:accepted / declined / updated / created / configuredOffer lifecycle
hotel8:upsell:offers:expiredOffers passed their window
hotel8:upsell:dynamic_price:computedA dynamic price was computed
hotel8:upsell:payment:processedPayment settled (result reflected)
hotel8:upsell:reservation:modifiedAn accepted offer changed the stay
hotel8:upsell:confirmation:sent, notification:sentGuest communication dispatched
hotel8:upsell:ab_test:created, rule:created, rule:testRule administration

Inbound (consumed): hotel8:pms:reservation:created — triggers offer generation.

5. Business Rules & Invariants​

  1. An offer is presented at most once per (stay, offer class) unless the tenant allows retargeting.
  2. Guest consent gates presentation.
  3. An accepted offer's price never changes after the guest's acceptance.
  4. Payment state is only reflected from the payments lane — never asserted.
  5. Rule changes affect future generation only; existing offers honor their recorded provenance.
  6. Declined offers are remembered for the stay; guests cannot be re-shown.

6. Target-User Roles & Use Cases​

PersonaUse
Revenue/marketing managerAuthor eligibility rules, set A/B tests, review conversion
Front officeBrowse a booking's offers, accept on behalf of the guest at the desk
GuestView and accept/decline offers in their app
Chain adminPolicy admin over the upsell surface

7. KPIs / Success Criteria​

  • Offer conversion (accepted/offered) per variant — measurable and honest.
  • Zero duplicate charges (payment idempotency holds).
  • Zero guest complaints of repeated declined offers (cap memory works).
  • Generation completes inside the booking-moment budget.

8. Dependencies & Reliance on Other Services​

RelianceFor
hotel8:pmsBooking facts (events), stay modifications
hotel8:loyaltyTier-aware eligibility
Bill8:PaymentsSettlement
Sentin8:CronDaily sweep trigger
Sentin8:Auth + ShieldIdentity, ABAC (guest tier), authorization
Sentin8:Busupsell stream + PMS intake
Sentin8:PostOffer notification delivery

9. Acceptance Criteria​

  1. A new PMS booking produces eligible offers without any operator action.
  2. A tenant can author, preview (rule:test), and enable a rule with no code change.
  3. An accepted paid offer settles exactly once and records the transaction.
  4. A declined offer never reappears for the same stay.
  5. A/B variants measure conversion truthfully (assignment is recorded).

10. Open Business Questions​

  • Bandit-style allocation vs fixed A/B.
  • Multi-touch upsell journeys across the stay.

Design attribution: hotel8:upsell and its underlying concepts were designed by Hamid Jahanzad Hamid@Jahanzad.com.