1. CollectOur & competitor prices
auto + extension + manual
2. VetRoom matching · QA flags
establish data trust
3. CompareCurated room comparison
site-displayed price
4. AdjustWorkbench suggestions
apply/request within guard
5. TrackSales signals · changes
verify effect → back to 1
🎯 Operating goal: "Stay slightly cheaper than the price the competitor displays on its site, while never breaking the Net margin floor."
🚨 Top-level pricing principle (set by the CEO, 2026-08-15): any figure shown as a price must be one a customer can see for themselves on that site. A hidden price estimated from promotion notice text is not a price and is never used for comparison, suggestions, or transmission. It appears only as a "possible hidden discount −N% (unverified)" notice; a real discount affects price only after it has been measured on the checkout page.
Rate sheet updated · headline from old snapshotOur snapshot disagrees with the rate sheet — normally the page waits for recollection and shows the fresh price; this badge remains only when recollection failed/timed out→ refresh shortly; report if persistent
Possible hidden discountThe competitor's notice mentions a conditional discount, but whether it actually applies is unverified→ a notice only; the competitor low stays the displayed price
+N₩ vs PK (overpriced)We are above the competitor low (per night)→ adjustment candidate
−N₩ vs PK (cheaper)We are cheaper — the target state→ if far too cheap, check margin
⚠ Suspected input errorOur price is under half the competitor low — likely a rate entry mistake→ check the raw rate sheet
⚠ Price outlier / matching suspectMatching/data trust problem→ recheck in Room Matching
△ Condition-mismatched comparisonNo same checkin/nights data — compared via auto-lowest→ recollect to obtain matched conditions
N competitors not collectedSome competitor data missing→ recollect
Not comparable (display only)e.g. competitor capacity below party size — excluded from calculations→ reference only
Sealed · record onlyNon-LIVE hotel — adjustments are not actually sent→ switch to LIVE in policy admin if needed
LIVE · sent upon approvalThis hotel transmits to the real rate API→ always check the preview before applying
🟡 Guard clampThe suggestion hit the Net floor and was raised→ review the policy floor
Parse rulesPK detail pages
long-stay · early-bird · seasons
Risk gateambiguous rules are held
(not shown > over-discount)
Notify"possible −pct% (unverified)" badge
the price does not change
Audit1-night vs N-night unit price
full double-apply verification
| When | What |
Hidden-price notice badge not showing (unrelated to price figures — D-030) | Check in order: ① is check-in inside the rule period ② nights/lead-days satisfied ③ is the rule risk-held (rulesHeld). Refresh rules: node scripts/refresh-hidden-promos.js --apply |
| Hidden price looks wrong | Cross-check with the real booking window (payment step) for extra-discount items like [long-stay benefit] — never judge by the displayed discount rate |
| Periodic check | Keep "already applied" at 0 via scripts/audit-hidden-applied.js. Early-bird-only hotels need manual booking-window checks |