Back to overview
OUT-3231

Updated internal view for Eligible Stays

In Progress
Medium
anit
Mystery ShoppingFeatureCreated Feb 27, 2026 · Updated Mar 12, 2026

Description

Let's introduce a view and route for internal users when looking at the Eligible Stays app.

  • Currently the Eligible Stays app is just set up as an embed, not a custom app. This will have to change so we can specify internal and client urls and only show internal content when IU is viewing the app (from session token).

AC

With the internal view for Eligible Stays, IUs should be able to:

  • View all properties in the current table view regardless if they are eligible or not

    • Ineligible properties should appear in the table but the text color in the row should be grey / other visual difference to indicate that they are ineligible.
  • When hovering over an ineligible row, IUs should see a button appear on the right sight of the row that says "Override"

    • When clicked, a modal appears asking the user to confirm if they want to override the property and make it eligible again, making it visible for all Mystery Shoppers. Also present the date it was last shopped.
    • Save in the db that this property was overridden and made eligible by an internal user, include a timestamp and their IU id so we have full record.
  • Scenarios where admins can overrride:

    1. Pending request for the property
    2. Property has < 5 bookings in the Hopper volume spreadsheet
    3. Property is on pause
    4. SLH -- already shopped this year and received a warn/fail score on a previous shop evaluation
    5. SLH Status is unknown
    6. Property was shopped in the last 6 months
    7. Appendix form is not approved
      1. Use case: Hotel submitted their appendix form, it was declined by Isy because they answered the Experienced Credit Question without an F&B option, hotel needs to go back in and update but they are not actioning this after several follow ups. We still need to be able to send a mystery shopper to the hotel.
  • Scenarios where admins cannot override (most are unlikely to happen & are protections against bad data):

    1. Missing hotel name
    2. Missing country data
    3. Missing market data
    4. Missing collection
    5. Invalid collection type
    6. No appendix form submitted
    7. Hotel shopped twice in a calendar year
      1. For example if a hotel is shopped Jan 10 and they get a WARN/FAIL and we push them to be Eligible again on March 10. They should not be eligible for another shop that year. Should never exceed 2. (And if SLH w/ Pass it should never exceed 1)
    8. SLH -- already shopped AND received a PASS on evaluation
      1. ^because this one is contractual I don't want to accidentally push them live and put us in violation of of our terms. (Versus the 6-month gap for context was something decided by our team and is not contractual)

Comments (8)

schwartz12d ago

[team member] please pick up the after completing OUT-3230

anit3d ago

[team member] Very glad that this is being planned. This should help IU rely less on us. But I'd like to flag about possible regression: Are we linking to this app from anywhere eg. Message to IU or CU? In which case adding a new app as custom app would have new id right?

anit3d ago

[team member] To allow IU to override the eligibility I want to first understand what kind of inelegibiliy do we want to override?

export const ineligibilityReasonLabels: Record<IneligibilityReason, string> = {
  [IneligibilityReason.PENDING_BOOKING]: 'Pending booking',
  [IneligibilityReason.INSUFFICIENT_BOOKINGS]: 'Less than 5 bookings',
  [IneligibilityReason.ON_PAUSE]: 'On pause',
  [IneligibilityReason.SLH_NULL]: 'SLH status unknown',
  [IneligibilityReason.SLH_BLOCKED_THIS_YEAR]: 'SLH — already shopped this year',
  [IneligibilityReason.SHOPPED_WITHIN_6_MONTHS]: 'Shopped within last 6 months',
};

There certainly are other conditions, but I think those are valid reason that should not be overridded.


  [IneligibilityReason.MISSING_NAME]: 'Missing hotel name',
  [IneligibilityReason.MISSING_COUNTRY]: 'Missing country',
  [IneligibilityReason.MISSING_MARKET]: 'Missing market',
  [IneligibilityReason.INVALID_COLLECTION]: 'Invalid collection type',
  [IneligibilityReason.NO_APPENDIX_SUBMISSION]: 'No appendix form submitted',
  [IneligibilityReason.MISSING_COLLECTION]: 'Missing collection type on submission',
  [IneligibilityReason.APPENDIX_NOT_APPROVED]: 'Appendix form not approved',

My plan here is to set the bookingForcefullyEnabledAt timestamp which will be set to null after another request.

schwartz3d ago

[team member] what does "SLH status unknown" mean? Do we prevent a hotel from appearing if we aren't sure if it is or is not apart of the SLH group?

schwartz3d ago

The grouping you proposed makes sense, will confirm with C1

schwartz2d ago

Ok confirme with C1. They requested a couple of changes, see the final grouping I added to this ticket description

anit2d ago

[team member] Can we delete the override for the property when it is approved again. eg. We override On Pause for example, And user then makes a booking, can we remove the override in that case. Same for other overrides like 6 months booking. Otherwise the property will always be bookable under 6 month. What do you think? IU has to override it after approval if they want to make it eligible again.

schwartz1d ago

Hmm yes. That makes sense to me, meaning this override generally is just a one time override and expires after the next booking. Good callout