{
"trip": "bad-ems-therme",
"name": "Bathrobe corridor, imperial morning",
"where": "Bad Ems, Germany",
"task": "Finish planning this trip. Fill every entry in `unresearched` with sourced figures in the same shape.",
"assumptions": {
"travellers": 2,
"rooms": 1,
"dinner_for": 2
},
"fx": {
"base": "EUR",
"rates": {
"EUR": 1,
"CHF": 1.0681
},
"checked": "2026-08-24",
"note": "Reference rates, updated by hand. Do not call a currency service."
},
"readiness_percent": 94,
"planning_state": "Ready to book",
"claims": [
{
"field": "travel.duration",
"status": "estimate",
"value": [
3.25,
3.75
],
"unit": "hours by car from Antwerp",
"basis": "Planning range with traffic buffer; the research baseline was about 296 km and 3 h 04.",
"checked": "2026-08-25"
},
{
"field": "cost.room-package",
"status": "fact",
"value": [
235,
235
],
"currency": "EUR",
"unit": "Sun–Fri double, breakfast, spa and sauna",
"source": "https://www.emser-thermenhotel.de/zimmer-and-preise",
"checked": "2026-08-25"
},
{
"field": "cost.funicular",
"status": "fact",
"value": [
14,
14
],
"currency": "EUR",
"unit": "Kurwaldbahn returns for two",
"source": "https://staatsbad-badems.de/kurwaldbahn/",
"checked": "2026-08-25"
},
{
"field": "room.choice",
"status": "our_choice",
"value": "Published Sunday–Friday double-room rate for two, including breakfast, spa and sauna; exact date still requires confirmation."
},
{
"field": "choice",
"status": "our_choice",
"value": "Treat this as Sunday–Monday or another weekday night."
},
{
"field": "choice",
"status": "our_choice",
"value": "Use the hotel guest spa window and keep the next morning gentle."
},
{
"field": "verify",
"status": "must_verify",
"note": "One-night room on the selected weekday."
},
{
"field": "verify",
"status": "must_verify",
"note": "Parking, visitor tax, dinner and cancellation."
},
{
"field": "verify",
"status": "must_verify",
"note": "Kurwaldbahn operation; Wednesday has a maintenance pause."
}
],
"unresearched": [
"cost.tax",
"cost.parking",
"cost.dinner",
"cost.fuel"
],
"blocks_total_cost": true,
"cost_total_rule": "A whole-trip total is published only when every cost component is sourced. Never a partial total, never 'from', never an estimated total.",
"itinerary": [
{
"day": 1,
"label": "Sunday",
"title": "Park once, put on a bathrobe",
"activities": [
{
"label": "Drive Antwerp → Bad Ems",
"hours": [
3.25,
3.75
],
"status": "estimate"
},
{
"label": "Hotel-connected Therme",
"hours": null,
"status": "unresolved",
"note": "Access runs from check-in; no fixed visit duration is chosen."
},
{
"label": "Dinner",
"hours": null,
"status": "unresolved",
"note": "Meal arrangement remains to book."
}
]
},
{
"day": 2,
"label": "Monday",
"title": "Quiet water, then the spa town",
"activities": [
{
"label": "Hotel-guest morning spa",
"hours": null,
"status": "unresolved",
"note": "Use is possible from 08:00, but we have not imposed a duration."
},
{
"label": "Kurwaldbahn return",
"hours": 0.07,
"status": "fact",
"source": "https://staatsbad-badems.de/kurwaldbahn/"
},
{
"label": "Drive Bad Ems → Antwerp",
"hours": [
3.25,
3.75
],
"status": "estimate"
}
]
}
],
"itinerary_mode": "days",
"open_questions": [
"A live one-night Sunday–Friday room and cancellation terms.",
"Hotel parking, spa tax and dinner arrangement.",
"Exact riverside walk and any funicular maintenance."
],
"itinerary_contract": "Every trip page uses this shape. Timings are rough and may be wrong unless calendar_event is true, which identifies the one activity fixed by trip.calendar. Fill day -> activities[] -> {label, hours, status, calendar_event?}, or say why a day is empty. hours may be a number, a [min,max] range, or null when no figure is published - never invent one. status is fact (sourced timing), estimate (reasoned) or unresolved (something must be decided or booked first). Do not invent waking, breakfast or transfer time, and do not compute how full a day is - just list what we want to do and roughly how long it takes.",
"discovery_query": "Emser ThermenHotel bathrobe corridor one night review"
}