2 What she produced
The real run of this version: It's Monday. Do the Monday work described in CLAUDE.md, using the OPERA export in data/opera.
deck-OWN-001.json
{
"owner_id": "OWN-001",
"week_start": "2027-10-18",
"property_ids": ["HOTEL-001"],
"subject": "Demo Hotel 001: week of 2027-10-18",
"body": "Hi,\n\nThe deck for the week of 2027-10-18 is attached. The next 7 days average 66.6% occupancy on the books, up from 57.3% last week. Two nights are below target: 2027-10-18 and 2027-10-23. The 85% on 2027-10-24 still needs a check in OPERA.\n\nBest regards",
"placeholders": {
"title": "Monday report: Demo Hotel 001",
"week": "Week of 2027-10-18 (next 7 days: 2027-10-18 to 2027-10-24)",
"headline_1": "Next 7 days: 66.6% on the books, up 9.3 points from 57.3% last week.",
"headline_2": "Two nights below target: 2027-10-18 (60.4%) and 2027-10-23 (62.7%).",
"headline_3": "Sunday 2027-10-24 shows 85%, but that number needs a check in OPERA.",
"property_name": "Demo Hotel 001 (fictional)",
"property_line": "66.6% average for the week. Highest night 2027-10-24 at 85%. Lowest night 2027-10-18 at 60.4%. Group pickup 0 of 2 rooms. 45 rooms have open maintenance.",
"weak_nights": "2027-10-18: 60.4%, 490 rooms open. 2027-10-23: 62.7%, 461 rooms open.",
"next_steps": "Review rates for Saturday 2027-10-23. Confirm the 2027-10-24 number. Ask sales about the 2 group rooms on 2027-10-19. Ask engineering which of the 45 rooms return before the weekend."
}
}
insights.json
{
"week_start": "2027-10-18",
"insights": [
{
"property_id": "HOTEL-001",
"what_changed": "Occupancy on the books for the next 7 days averages 0.6656, up 0.0929 from 0.5727 in the last 7 days (2027-10-11 to 2027-10-17).",
"why": "Most of the week sits between 0.6274 and 0.66. The lift leans on 2027-10-24 at 0.85, the highest date of the week. Rooms available for that date are derived from the inventory, because the export has no hotel-level availability row for it.",
"what_to_look_at": "Confirm 2027-10-24 in OPERA before telling anyone the week is up. If that date is lower, most of the gain goes away.",
"evidence": [
"outputs/report.json last_7_days (source hotel-001.json)",
"hotel-001.json occupancy[13]; derived from inventory (report row 2027-10-24)",
"Warning: rooms_available for 2027-10-24 is derived from the inventory and the occupancy."
]
},
{
"property_id": "HOTEL-001",
"what_changed": "Two nights are below the occupancy threshold in the report: 2027-10-18 at 0.6043 with 490 rooms available, and 2027-10-23 at 0.6274 with 461 rooms available.",
"why": "The export does not say why. No group rooms are picked up on either night, so groups add nothing to these dates.",
"what_to_look_at": "2027-10-18 is the business date, so only same-day sales can help it. 2027-10-23 is a Saturday five days out: review rates and channel availability for that night now.",
"evidence": [
"hotel-001.json occupancy[7]; availability[0] (report row 2027-10-18)",
"hotel-001.json occupancy[12]; availability[5] (report row 2027-10-23)"
]
},
{
"property_id": "HOTEL-001",
"what_changed": "Four midweek nights sit just above the threshold: 2027-10-19 at 0.66, 2027-10-20 at 0.6478, 2027-10-21 at 0.6342 and 2027-10-22 at 0.6355.",
"why": "2027-10-21 and 2027-10-22 are the closest to the line. A few cancellations would push them below it.",
"what_to_look_at": "Watch pickup and cancellations on 2027-10-21 and 2027-10-22 during the week.",
"evidence": [
"hotel-001.json occupancy[8]; availability[1] (report row 2027-10-19)",
"hotel-001.json occupancy[9]; availability[2] (report row 2027-10-20)",
"hotel-001.json occupancy[10]; availability[3] (report row 2027-10-21)",
"hotel-001.json occupancy[11]; availability[4] (report row 2027-10-22)"
]
},
{
"property_id": "HOTEL-001",
"what_changed": "Group pickup is 0 of 2 allocated rooms on 2027-10-18 and 0 of 2 on 2027-10-19. No group rooms are allocated for the rest of the week.",
"why": "The block has not picked up any rooms. The group grid covers only 1 of the 25 blocks listed in the export, so these numbers do not show all group business.",
"what_to_look_at": "Ask sales whether the 2 rooms on 2027-10-19 will be used or released, and why the other 24 blocks are missing from the group grid.",
"evidence": [
"hotel-001.json occupancy[7]; availability[0] (report row 2027-10-18, group_rooms_allocated, group_rooms_picked_up)",
"hotel-001.json occupancy[8]; availability[1] (report row 2027-10-19, group_rooms_allocated, group_rooms_picked_up)",
"Warning: the group grid covers 1 of 25 blocks listed in the export."
]
},
{
"property_id": "HOTEL-001",
"what_changed": "45 rooms have open maintenance records. The busiest date, 2027-10-24 at 0.85, has 186 rooms available.",
"why": "The maintenance records have no end dates, so the report shows the same 45 rooms on every date. It cannot tell which ones will be fixed before the weekend.",
"what_to_look_at": "Ask engineering which of the 45 rooms will be back in service before 2027-10-24.",
"evidence": [
"hotel-001.json occupancy[13]; derived from inventory (report row 2027-10-24, rooms_with_open_maintenance)",
"Warning: rooms_with_open_maintenance is one count for every date: the export has no end dates for maintenance records."
]
}
]
}
report.csv
property_id,week_start,date,occupancy_on_books,rooms_available,below_threshold,group_rooms_allocated,group_rooms_picked_up,rooms_with_open_maintenance,source_file,source_row
HOTEL-001,2027-10-18,2027-10-18,0.6043,490,true,2,0,45,hotel-001.json,occupancy[7]; availability[0]
HOTEL-001,2027-10-18,2027-10-19,0.66,421,false,2,0,45,hotel-001.json,occupancy[8]; availability[1]
HOTEL-001,2027-10-18,2027-10-20,0.6478,436,false,0,0,45,hotel-001.json,occupancy[9]; availability[2]
HOTEL-001,2027-10-18,2027-10-21,0.6342,453,false,0,0,45,hotel-001.json,occupancy[10]; availability[3]
HOTEL-001,2027-10-18,2027-10-22,0.6355,451,false,0,0,45,hotel-001.json,occupancy[11]; availability[4]
HOTEL-001,2027-10-18,2027-10-23,0.6274,461,true,0,0,45,hotel-001.json,occupancy[12]; availability[5]
HOTEL-001,2027-10-18,2027-10-24,0.85,186,false,0,0,45,hotel-001.json,occupancy[13]; derived from inventory
report.json
{
"business_date": "2027-10-18",
"property_id": "HOTEL-001",
"threshold": 0.63,
"rows": [
{
"date": "2027-10-18",
"occupancy_on_books": 0.6043,
"rooms_available": 490,
"below_threshold": true,
"group_rooms_allocated": 2,
"group_rooms_picked_up": 0,
"rooms_with_open_maintenance": 45,
"source_file": "hotel-001.json",
"source_row": "occupancy[7]; availability[0]"
},
{
"date": "2027-10-19",
"occupancy_on_books": 0.66,
"rooms_available": 421,
"below_threshold": false,
"group_rooms_allocated": 2,
"group_rooms_picked_up": 0,
"rooms_with_open_maintenance": 45,
"source_file": "hotel-001.json",
"source_row": "occupancy[8]; availability[1]"
},
{
"date": "2027-10-20",
"occupancy_on_books": 0.6478,
"rooms_available": 436,
"below_threshold": false,
"group_rooms_allocated": 0,
"group_rooms_picked_up": 0,
"rooms_with_open_maintenance": 45,
"source_file": "hotel-001.json",
"source_row": "occupancy[9]; availability[2]"
},
{
"date": "2027-10-21",
"occupancy_on_books": 0.6342,
"rooms_available": 453,
"below_threshold": false,
"group_rooms_allocated": 0,
"group_rooms_picked_up": 0,
"rooms_with_open_maintenance": 45,
"source_file": "hotel-001.json",
"source_row": "occupancy[10]; availability[3]"
},
{
"date": "2027-10-22",
"occupancy_on_books": 0.6355,
"rooms_available": 451,
"below_threshold": false,
"group_rooms_allocated": 0,
"group_rooms_picked_up": 0,
"rooms_with_open_maintenance": 45,
"source_file": "hotel-001.json",
"source_row": "occupancy[11]; availability[4]"
},
{
"date": "2027-10-23",
"occupancy_on_books": 0.6274,
"rooms_available": 461,
"below_threshold": true,
"group_rooms_allocated": 0,
"group_rooms_picked_up": 0,
"rooms_with_open_maintenance": 45,
"source_file": "hotel-001.json",
"source_row": "occupancy[12]; availability[5]"
},
{
"date": "2027-10-24",
"occupancy_on_books": 0.85,
"rooms_available": 186,
"below_threshold": false,
"group_rooms_allocated": 0,
"group_rooms_picked_up": 0,
"rooms_with_open_maintenance": 45,
"source_file": "hotel-001.json",
"source_row": "occupancy[13]; derived from inventory"
}
],
"last_7_days": {
"start_date": "2027-10-11",
"end_date": "2027-10-17",
"days": 7,
"occupancy_avg": 0.5727,
"next_7_days_occupancy_avg": 0.6656,
"change_vs_last_7_days": 0.0929
},
"warnings": [
"rooms_available for 2027-10-24 is derived from the inventory and the occupancy: the export has no hotel-level availability row for that date.",
"The group grid covers 1 of 25 blocks listed in the export. Group numbers cover only the blocks in the grid.",
"rooms_with_open_maintenance is one count for every date: the export has no end dates for maintenance records."
]
}