Zerf home

insights.json

outputs/insights.json

{
  "week_start": "2027-10-18",
  "insights": [
    {
      "property_id": "HOTEL-001",
      "what_changed": "The next 7 days average 66.6% occupancy on the books. The last 7 days averaged 57.3%. That is up 9.3 points.",
      "why": "Most of the gain is Sunday 2027-10-24 at 85.0%. The other six days sit between 60.4% and 66.0%. The 85.0% day uses a derived availability number (see the data note insight).",
      "what_to_look_at": "Read the gain as one strong Sunday, not a strong week. Confirm the Sunday number before you act on it.",
      "evidence": [
        "outputs/report.json: last_7_days (occupancy_avg 0.5727, next_7_days_occupancy_avg 0.6656, change_vs_last_7_days 0.0929)",
        "outputs/report.json: row 2027-10-24 (hotel-001.json, occupancy[13]; derived from inventory)"
      ]
    },
    {
      "property_id": "HOTEL-001",
      "what_changed": "Two dates are below the 63% threshold: Monday 2027-10-18 at 60.4% and Saturday 2027-10-23 at 62.7%.",
      "why": "Group business does not help these dates. On 2027-10-18 the group grid shows 2 rooms allocated and 0 picked up. On 2027-10-23 it shows no group rooms. Today is already the business date, so 2027-10-18 has little room to move.",
      "what_to_look_at": "Saturday 2027-10-23: 461 rooms are still available. Check open rate restrictions and late-booking channels for that night.",
      "evidence": [
        "outputs/report.json: row 2027-10-18 (hotel-001.json, occupancy[7]; availability[0])",
        "outputs/report.json: row 2027-10-23 (hotel-001.json, occupancy[12]; availability[5])"
      ]
    },
    {
      "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 other date has group rooms in the grid.",
      "why": "One block (BLOCK-001) holds these rooms and nothing is picked up. The group grid covers only 1 of the 25 blocks listed in the export, so the real group picture is wider than this.",
      "what_to_look_at": "Ask sales whether BLOCK-001 should release its rooms. Ask why the export has a grid for only 1 of 25 blocks before trusting any group number.",
      "evidence": [
        "outputs/report.json: row 2027-10-18 (hotel-001.json, occupancy[7]; availability[0])",
        "outputs/report.json: row 2027-10-19 (hotel-001.json, occupancy[8]; availability[1])",
        "outputs/normalized/groups.csv: rows BLOCK-001 2027-10-18 and 2027-10-19",
        "outputs/report.json: warnings[1]"
      ]
    },
    {
      "property_id": "HOTEL-001",
      "what_changed": "45 rooms have open maintenance records ahead of the busiest date, Sunday 2027-10-24 at 85.0% with 186 rooms available.",
      "why": "Every maintenance record in the export is still unresolved. Many were created in 2026, more than a year before the business date. Some rooms have dozens of open records. The export has no end dates, so the same 45 rooms count against every date.",
      "what_to_look_at": "Ask engineering which of the 45 rooms are truly out of order on 2027-10-24, and close the old records that are already fixed.",
      "evidence": [
        "outputs/report.json: row 2027-10-24 (hotel-001.json, occupancy[13]; derived from inventory)",
        "outputs/normalized/maintenance.csv: all rows (status UnResolved, created from 2026-04-22 to 2027-10-13)",
        "outputs/report.json: warnings[2]"
      ]
    },
    {
      "property_id": "HOTEL-001",
      "what_changed": "Data note: the 2027-10-24 numbers are less certain than the other dates.",
      "why": "The export has no hotel-level availability row for 2027-10-24. The script derived rooms available (186) from the inventory and the occupancy. The other six dates come from a real availability row.",
      "what_to_look_at": "Check 2027-10-24 in OPERA before quoting the 85.0% or the 9.3 point gain to anyone.",
      "evidence": [
        "outputs/report.json: warnings[0]",
        "outputs/report.json: row 2027-10-24 (hotel-001.json, occupancy[13]; derived from inventory)"
      ]
    }
  ]
}