GM Daily Ops Email, Proposed Format

One email per property, every morning after the night audit closes. To: the GM. CC: ownership. Everything we already know is pre-filled; the GM only answers the exceptions. Below: a full sample rendered from Zabir's actual Friday 08/07/26 brief for FREEDOM (Home2 Suites Dallas North Park), then exactly how his AI email gets used.
Generated 2026-08-13 by Woz · Primary source: Zabir's forwarded "[Brief] Morning brief 8/8/26" (Spark message 348908, ace@texashotelmgt.com) · Existing scaffold: scripts/daily-ops-email.mjs (preview to Ace + Alyssa only)
Also here: the HOURP version with this morning's real data (business date 08/12, pulled live from production).
Part 1 · The sample email
Every number tagged from Zab 08/07 is lifted straight from message 348908 (business date Fri 08/07/26). Sections tagged sample show the format with placeholder values, because Zab's brief has no labor, AP, or cash data; ours pulls those from Homebase, the RPP AP board, and GM self-report.
Part 2 · How I'd use Zab's email
Three distinct uses: steal its best design, use its data as the proving fixture, and eventually onboard his four properties onto the same pipeline.
1. The noise problem, measured
Zab's brief alerts on a flat $109 floor and prints every row. Counted from message 348908, business date 08/07:
140
rate-alert rows printed across 4 properties
40/49
of Cowboy's rows are the same two airline crew contracts (23 G-ATAU/ATJU at $105, 17 OMNN at $104) the email itself calls "normal direct bill"
156
nightly alerts one long-stay guest (Dhalla, $77.42, Hookem) will generate over his stay under the current rule
$0.32
smallest "alert" printed: Aggie rm 431, 32 cents under BAR, same visual weight as a $0.00 comp override
Under our filter (code whitelist + authorization status + ~$15 variance floor + first-occurrence-only for contracts and long stays), the whole portfolio's 140 rows reduce to roughly a dozen genuine questions, and his own "Action Needed" section already found most of them. That section is the email; the rest is packaging.
2. Section-by-section mapping
What each part of Zab's brief becomes in ours.
Zab's sectionVerdictTreatment in our format
"Action Needed" bullets (comp authorized? paired $147.18 HAP discount + $147.18 refund a double credit? no-show billed?) KEEP Becomes the "Answer today" engine, nearly verbatim. We add what it lacks: a named owner, reason codes, a deadline, and carry-forward until answered.
High-balance folios (43 > $300; Cowboy folio 0409 Tham at $2,823.30 vs $3,136.82 card auth, ~$313 headroom on a 30-night stay) KEEP Best idea in the brief I hadn't listed: a Credit Exposure watch. We flag only folios near their auth limit or aging direct-bill routings, not all 43. Needs a check that our Agilysys/HotelKey packs carry folio detail.
Data-quality notes (folio detail degraded by 08/03 template change; Opera comparatives 3 days deep) KEEP Same philosophy as our parse-run guards: degraded data renders as a visible banner, never as a clean-looking blank.
Rate Alerts full listing (140 rows, flat $109 floor) FIX Whitelist contracted/loyalty/employee codes, alert on overrides and missing authorization, ~$15 variance floor, first-occurrence-only for long stays. Full listing moves behind an RPP link.
Performance Summary (four 6-column tables: Actual/MTD/YTD/SDLY/LY MTD/LY YTD) FIX Collapses to the 3-tile KPI strip plus one MTD line. History and YTD live in RPP where they belong.
Night Audit Summary narrative ("watch item" per property) FIX Good instinct, but items land in Answer Today with an owner instead of prose nobody has to act on.
Not present in Zab's brief at all ADD Labor (Homebase: OT by name, unapproved cards, MTD cost per occupied room), AP queue aging (read-only), cash/deposit + chargeback + incident self-report, the carry-forward ledger, and the reply-all answer loop. His brief is a report; nobody owes it anything.
3. Fixture now, pipeline later