feat: expand price automation contract
This commit is contained in:
@@ -10,35 +10,158 @@
|
||||
},
|
||||
"trackedSources": [
|
||||
{
|
||||
"id": "packages-hotels",
|
||||
"label": "Packages and Hotels",
|
||||
"categories": ["hotel"]
|
||||
"id": "hotel-packages",
|
||||
"label": "Flight + Hotel Packages",
|
||||
"categories": ["hotel"],
|
||||
"bookingType": "package",
|
||||
"requiredChecks": [
|
||||
"Costco Travel package results",
|
||||
"Apple Vacations package search",
|
||||
"CheapCaribbean package search",
|
||||
"other date-matched package providers found during research"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "standalone-hotels",
|
||||
"label": "Standalone Hotels",
|
||||
"categories": ["hotel"],
|
||||
"bookingType": "standalone",
|
||||
"requiredChecks": [
|
||||
"KAYAK hotel search",
|
||||
"official hotel booking engine when public rates are visible",
|
||||
"other OTA hotel-only rates found during research"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "flights",
|
||||
"label": "Standalone Flights",
|
||||
"categories": ["flight"],
|
||||
"bookingType": "standalone",
|
||||
"requiredChecks": [
|
||||
"LAX to SJD date-matched round trip",
|
||||
"ONT to SJD date-matched round trip",
|
||||
"capture airline, stops, schedule window, baggage caveats, and total price per traveler"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "golf",
|
||||
"label": "Golf",
|
||||
"categories": ["golf"]
|
||||
"categories": ["golf"],
|
||||
"bookingType": "standalone",
|
||||
"requiredChecks": [
|
||||
"official course tee-time pages when available",
|
||||
"public tee-time marketplaces",
|
||||
"resort/package golf inclusions when attached to hotel packages"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "nightlife",
|
||||
"label": "Nightlife and Day Clubs",
|
||||
"categories": ["nightlife"]
|
||||
"categories": ["nightlife"],
|
||||
"bookingType": "standalone",
|
||||
"requiredChecks": [
|
||||
"VIP table packages",
|
||||
"bottle service minimums",
|
||||
"day-club and beach-club package pricing",
|
||||
"cover charges or ticketed events when visible"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "excursions",
|
||||
"label": "Excursions and Water Activities",
|
||||
"categories": ["excursion"]
|
||||
"categories": ["excursion"],
|
||||
"bookingType": "standalone",
|
||||
"requiredChecks": [
|
||||
"yacht and private charter quotes",
|
||||
"whale-watch and sunset sail pricing",
|
||||
"ATV/off-road packages",
|
||||
"bachelor-party-relevant group excursions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "budget",
|
||||
"label": "Budget Tracks",
|
||||
"categories": ["budget"]
|
||||
"id": "derived-itineraries",
|
||||
"label": "Derived Itineraries",
|
||||
"categories": ["itinerary"],
|
||||
"bookingType": "calculated",
|
||||
"requiredChecks": [
|
||||
"recalculate budget, balanced, and splurge itinerary totals from the current hotel/package, flight, golf, nightlife, and excursion results",
|
||||
"include component breakdowns and assumptions for each itinerary"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "derived-budgets",
|
||||
"label": "Derived Budget Tracks",
|
||||
"categories": ["budget"],
|
||||
"bookingType": "calculated",
|
||||
"requiredChecks": [
|
||||
"recalculate 8, 10, and 12 person totals from current results",
|
||||
"prefer exact package prices when the itinerary uses a flight+hotel package",
|
||||
"avoid double-counting flights or hotels already included in package prices",
|
||||
"include per-person and group-total math plus assumptions"
|
||||
]
|
||||
}
|
||||
],
|
||||
"bookingTypeRules": {
|
||||
"package": "Use for bundled products such as flight+hotel packages or hotel+transfer packages. Include included components and do not mix directly with standalone room-only rates.",
|
||||
"standalone": "Use for individual bookings such as hotel-only rates, flights, golf tee times, nightlife tables, yacht charters, and excursions.",
|
||||
"calculated": "Use for automation-derived itinerary and budget totals built from current package or standalone components."
|
||||
},
|
||||
"outputSchema": {
|
||||
"optionPrices": [
|
||||
{
|
||||
"seedKey": "stable app option key when available",
|
||||
"price": "numeric price only, or null when unavailable",
|
||||
"displayLabel": "human-readable price label",
|
||||
"category": "hotel | flight | golf | nightlife | excursion | itinerary | budget",
|
||||
"source": "travel site or vendor",
|
||||
"sourceUrl": "exact result or source URL",
|
||||
"bookingType": "package | standalone | calculated",
|
||||
"priceBasis": "perTraveler | perNight | perPerson | perGroup | totalPackage | perRound | perTable",
|
||||
"includedComponents": ["flight", "hotel", "transfer", "golf", "nightlife", "excursion"],
|
||||
"excludedComponents": ["components that must be budgeted separately"],
|
||||
"origin": "airport code for flight/package quotes when applicable",
|
||||
"destination": "airport or destination code when applicable",
|
||||
"availability": "available | unavailable | sold-out | login-required | request-quote",
|
||||
"features": ["structured decision features"],
|
||||
"amenities": ["hotel or venue amenities"],
|
||||
"inclusions": ["included items"],
|
||||
"limitations": ["tradeoffs, caveats, restrictions"],
|
||||
"decisionNote": "short decision note"
|
||||
}
|
||||
],
|
||||
"derivedItineraries": [
|
||||
{
|
||||
"seedKey": "itinerary-budget | itinerary-balanced | itinerary-splurge | itinerary-concierge or new stable key",
|
||||
"tier": "Budget | Balanced | Splurge | Concierge",
|
||||
"perPerson": "numeric calculated per-person total",
|
||||
"groupTotal": "numeric calculated group total when group size is known",
|
||||
"groupSize": "8 | 10 | 12 or selected party size",
|
||||
"components": ["component price keys used"],
|
||||
"assumptions": ["calculation assumptions"],
|
||||
"summary": "short recommendation summary"
|
||||
}
|
||||
],
|
||||
"budgetScenarios": [
|
||||
{
|
||||
"id": "stable scenario id",
|
||||
"tier": "Budget | Balanced | Splurge",
|
||||
"groupSize": "numeric group size",
|
||||
"perPerson": "numeric calculated per-person total",
|
||||
"groupTotal": "numeric calculated group total",
|
||||
"summary": "short scenario summary",
|
||||
"notes": ["component breakdown and assumptions"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"notes": [
|
||||
"Use seed-data.js as the current baseline for names, links, and budget assumptions.",
|
||||
"Check hotels, flights, golf, nightlife, and excursions on every run before updating itinerary or budget recommendations.",
|
||||
"Differentiate bundled package prices from standalone booking prices using bookingType and priceBasis on every price point.",
|
||||
"For package quotes, list the included and excluded components so budgets do not double-count flights, hotels, transfers, or resort credits.",
|
||||
"For standalone quotes, list the exact unit being priced: per night, per traveler, per person, per group, per round, or per table.",
|
||||
"Itinerary and budget options are calculated outputs. Recompute them from the freshest current package and standalone component prices instead of treating seed-data.js totals as current.",
|
||||
"Write a human-readable report to price-watch/latest-report.md on every run.",
|
||||
"Append one machine-readable summary line per run to price-watch/history.jsonl, including per-option price points keyed by stable option ids or seed keys.",
|
||||
"Append one machine-readable summary line per run to price-watch/history.jsonl, including per-option price points, derivedItineraries, and budgetScenarios keyed by stable option ids or seed keys.",
|
||||
"Capture structured option details when available: current price, availability, source, sourceUrl, highlights, features, amenities, inclusions, limitations, and a short decision note.",
|
||||
"If a source is gated behind login or membership, note that clearly in both outputs."
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user