cfo-briefing
Generate daily CFO briefing for Ashley Murphy covering absence stats, department tickets, legislative fiscal updates, and K-12 finance news. Delivered via HTML email with absence infographic and podcast attachment.
What this skill does
# CFO Daily Briefing Workflow ## Overview Generates a daily briefing for CFO Ashley Murphy and delivers it via: 1. **Terminal**: Summary displayed immediately 2. **Email**: HTML briefing with inline absence infographic + podcast attachment **No Obsidian vault writing.** This skill produces email-only output. ## Location - **Gig Harbor, WA** - Use for weather queries ## Audience - **Ashley Murphy** - Chief Financial Officer, Peninsula School District - Framing: Financial impact, staffing costs, departmental operations, fiscal legislation --- ## Phase 1: Gather Data Execute these data gathering steps: ### 1.1 Red Rover - All Staff Absences ```bash bun /Users/hagelk/non-ic-code/geoffrey/skills/redrover-manager/scripts/get_daily_summary.js today ``` Returns: `total_absences`, `filled`, `unfilled`, `fill_rate`, `by_school`, `by_reason`, `by_position_type`, `unfilled_positions[]` ### 1.2 Red Rover - Certificated Only ```bash bun /Users/hagelk/non-ic-code/geoffrey/skills/redrover-manager/scripts/get_certificated_summary.js today ``` Returns: same shape as 1.1 but filtered to Teacher, ESA - Certificated, CTE - Teacher position types. ### 1.3 Classified (Derived) **Do not run a script.** Subtract certificated values from all-staff values in the orchestration layer: - `classified_absences = all_absences - cert_absences` - `classified_filled = all_filled - cert_filled` - `classified_unfilled = all_unfilled - cert_unfilled` - `classified_fill_rate = classified_filled / classified_absences * 100` (handle divide-by-zero) ### 1.3b Red Rover - Weekly Trends ```bash bun /Users/hagelk/non-ic-code/geoffrey/skills/redrover-manager/scripts/get_weekly_summary.js 0 ``` Provides 5-day trend context: daily averages, peak/slow days, fill rate trends. Used for "compared to this week's average" framing in the briefing. ### 1.4 FreshService - Transportation Tickets ```bash bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/search_tickets.js "status:2 OR status:3" 9 ``` **Workspace ID**: 9 (Transportation) Returns: `count`, `tickets[]` (id, subject, status, priority, created_at, due_by) ### 1.5 FreshService - Maintenance Tickets ```bash bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/search_tickets.js "status:2 OR status:3" 6 ``` **Workspace ID**: 6 (Maintenance) Returns: same shape as 1.4 ### 1.6 FreshService - Employee Support Services Tickets ```bash bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/search_tickets.js "status:2 OR status:3" 3 ``` **Workspace ID**: 3 (Employee Support Services) Returns: same shape as 1.4 ### 1.7 Legislative - Fiscal Focus ```bash bun /Users/hagelk/non-ic-code/geoffrey/skills/legislative-tracker/scripts/get_recent_bill_activity.js --last-business-day ``` **Workflow:** 1. Get the output from `get_recent_bill_activity.js` 2. WebFetch each bill URL (batch 5-6 in parallel for speed) 3. Extract latest action date from each bill page 4. Filter to bills where latest_action_date >= lookback_start 5. **Prioritize bills with FISCAL impact type** - these get detailed treatment 6. Other bill types get brief mention only Also pull Tier 2 finance committee bills: ```bash bun /Users/hagelk/non-ic-code/geoffrey/skills/legislative-tracker/scripts/get_bills.js --tier 2 --format briefing ``` **On Monday**: Lookback starts on Friday (or earlier if Friday was a holiday), so includes all weekend activity. ### 1.8 K-12 Financial News Use WebSearch with these queries (replace [MONTH YEAR] with current month/year): 1. `K-12 school district finance budget funding news past 24 hours [MONTH YEAR]` 2. `Washington state education funding levy bond news [MONTH YEAR]` 3. `WASBO Washington school business officials news [MONTH YEAR]` 4. `OSPI fiscal budget allocation Washington state [MONTH YEAR]` WebFetch top 3-4 articles. Extract 2-3 sentence synopses for each: - What happened / what's new - Why it matters for K-12 finance - Key takeaway for a CFO **Freshness check**: Verify article dates. Only include articles published within the last 48 hours. Skip older articles even if they appear in results. ### 1.9 Weather Use WebSearch: ``` Gig Harbor WA weather today forecast ``` Extract: - Current conditions - High/low temperature - Precipitation chance - Any alerts ### 1.10 Calendar/Email (Simulated) **No API calls.** This is a placeholder for future integration. Display in the briefing: ``` Calendar and email integration pending. Check Outlook/Google Calendar directly. ``` --- ## Phase 2: Generate Content ### 2.1 Markdown Briefing Build the briefing with these sections in order: ```markdown # CFO Daily Briefing - [DATE] ## Weather [Current conditions, high/low, precipitation] ## CFO Calendar *Calendar integration pending. Check Outlook/Google Calendar directly.* ## Staff Absences Dashboard | Metric | All Staff | Certificated | Classified | |--------|-----------|--------------|------------| | Total Absences | X | Y | Z | | Filled | X | Y | Z | | Unfilled | X | Y | Z | | Fill Rate | X% | Y% | Z% | ## Weekly Absence Trends - This week's daily average: X absences - Today vs average: [above/below/at average] - Peak day this week: [day] with X absences - Fill rate trend: [improving/declining/stable] (X% avg this week) ## Unfilled Positions [If unfilled > 5, display attention alert] [List unfilled positions with school, position type, and reason] ## Absences by School | School | Total | Filled | Unfilled | |--------|-------|--------|----------| | ... | ... | ... | ... | ## Absences by Reason | Reason | Count | |--------|-------| | ... | ... | ## Absences by Position Type | Position Type | Count | |---------------|-------| | ... | ... | ## Department Tickets ### Transportation (Workspace 9) - [count] open [List top tickets by priority with subject, status, created date] ### Maintenance (Workspace 6) - [count] open [List top tickets by priority] ### Employee Support Services (Workspace 3) - [count] open [List top tickets by priority] ## Legislative Fiscal Update ### FISCAL Impact Bills (Detailed) [For each FISCAL bill with recent activity:] **[Bill ID] - [Short Title]** Action: [What happened] Fiscal Impact: [Budget/funding implications] Summary: [1-2 sentences] ### Other Education Bills (Brief) - [Bill ID]: [Action] - [One line] ### Finance Committee Bills (Tier 2) [Tier 2 bills from finance committees] ## K-12 Finance & WASBO/OSPI News ### [Article Title] - [Source] [2-3 sentence synopsis with financial framing] ## Quick Stats - Total absences: X (Cert: Y, Classified: Z) - Fill rate: X% (Cert: Y%, Classified: Z%) - Unfilled positions: X - Department tickets: Transportation (X), Maintenance (Y), ESS (Z) - Legislative bills with activity: X (Y fiscal impact) - Finance articles: X ``` ### 2.2 Podcast Script (~1400 words, ~9 min) Transform the briefing into a conversational audio script. Address Ashley directly. **Required Sections (in order):** 1. **Opening** (~80 words) - "Good morning, Ashley." - Day, date, weather summary - Quick preview: "Today we have X absences with a Y% fill rate, Z department tickets, and some legislative movement on education funding." 2. **Absences Dashboard** (~350 words) - Total absences, fill rate, unfilled count - Certificated vs classified breakdown - Weekly trend context: "Compared to this week's average of X, today is [above/below]..." - Schools with highest absence counts - Top absence reasons - Any unfilled positions requiring attention - Financial framing: "X unfilled positions means Y classrooms without coverage today" 3. **Department Tickets** (~200 words) - Transportation: count + any urgent items - Maintenance: count + any urgent items - Employee Support Services: count + any urgent items - Highlight anything overdue or high-priority 4. **Legislative Fiscal Update** (~300 words) - Bills with FISCAL impact that had recent activity - Budget implication
Related in Web Dev
generating-lwc-components
IncludedLightning Web Components with PICKLES methodology and 165-point scoring. Use this skill when the user creates or edits LWC components, builds wire service patterns, or writes Jest tests for LWC. TRIGGER when: user creates/edits LWC components, touches lwc/**/*.js, .html, .css, .js-meta.xml files, or asks about wire service, SLDS, or Jest LWC tests. DO NOT TRIGGER when: Apex classes (use generating-apex), Aura components, or Visualforce.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Set up queries with useQuery, mutations with useMutation, configure QueryClient caching strategies, implement optimistic updates, and handle infinite scroll with useInfiniteQuery. Use when: setting up data fetching in React projects, migrating from v4 to v5, or fixing object syntax required errors, query callbacks removed issues, cacheTime renamed to gcTime, isPending vs isLoading confusion, keepPreviousData removed problems.
document-processor-api
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
nutrient-document-processing
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Covers useMutationState, simplified optimistic updates, throwOnError, network mode (offline/PWA), and infiniteQueryOptions. Use when setting up data fetching, fixing v4→v5 migration errors (object syntax, gcTime, isPending, keepPreviousData), or debugging SSR/hydration issues with streaming server components.
accelint-nextjs-best-practices
IncludedNext.js performance optimization and best practices. Use when writing Next.js code (App Router or Pages Router); implementing Server Components, Server Actions, or API routes; optimizing RSC serialization, data fetching, or server-side rendering; reviewing Next.js code for performance issues; fixing authentication in Server Actions; or implementing Suspense boundaries, parallel data fetching, or request deduplication.