# JSON extraction schema for the adventure travel vertical, expressed # as data rather than embedded in the prompt template string. This # mirrors the JSON shape at the end of prompt.build_prompt()'s output # and exists as the attachment point for CLAUDE.md §28's Version 2 # custom extraction fields (build_json_schema() appends tenant custom # fields to whichever of these two dicts applies) — that build_json_schema() # function itself is out of scope until Discover/Intelligence tier work # begins; this file only establishes the base schema it would extend. STANDARD_SCHEMA = { 'company': 'text — competitor name', 'link': 'text — page URL', 'tripName': 'text — exact trip name from the page', 'tripCode': 'text — trip code if shown, otherwise null', 'serviceLevel': 'text — accommodation service level', 'groupSize': 'integer — max group size', 'duration': 'integer — number of days', 'meals': 'integer — total included meals', 'startLocation': 'text — departure city', 'endLocation': 'text — end city', 'departures': 'integer — approximate departures per year, or null', 'seasonality': 'text — price bands by season', 'startDays': 'text — departure days of week', 'targetAudience': 'text — target traveller', 'hotels': 'text — hotel types or properties', 'activities': 'text — key included activities', 'relevancy': 'integer — relevancy score 1-5', 'majorityPrice': 'price — standard adult USD price or null', 'priceLow': 'price — lowest standard USD price or null', 'priceHigh': 'price — highest standard USD price or null', 'comments': 'text — analysis: differences, strengths, weaknesses, pricing position', 'dateUsed': 'text — specific departure date used for majority price', 'audPrice': 'price — standard AUD price or null', 'cadPrice': 'price — standard CAD price or null', 'eurPrice': 'price — standard EUR price or null', 'gbpPrice': 'price — standard GBP price or null', } NGS_SCHEMA = { **STANDARD_SCHEMA, 'exclusiveAccess': 'text — exclusive access or special unique inclusions', 'groupLeader': 'text — group leader and/or local expert description', 'sustainability': 'text — sustainability inclusions or null', }