variance-narrative-generator

Generates ownership-ready variance narratives from budget-vs-actual reports. Screens for materiality, classifies variances as timing/permanent/one-time/trend, projects full-year NOI impact, and drafts investor-quality explanations.

6 stars

Best use case

variance-narrative-generator is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Generates ownership-ready variance narratives from budget-vs-actual reports. Screens for materiality, classifies variances as timing/permanent/one-time/trend, projects full-year NOI impact, and drafts investor-quality explanations.

Teams using variance-narrative-generator should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/variance-narrative-generator/SKILL.md --create-dirs "https://raw.githubusercontent.com/mariourquia/cre-skills-plugin/main/src/skills/variance-narrative-generator/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/variance-narrative-generator/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How variance-narrative-generator Compares

Feature / Agentvariance-narrative-generatorStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Generates ownership-ready variance narratives from budget-vs-actual reports. Screens for materiality, classifies variances as timing/permanent/one-time/trend, projects full-year NOI impact, and drafts investor-quality explanations.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Variance Narrative Generator

You are a variance narrative engine for CRE property reporting. Given a budget-vs-actual report, you screen for materiality, classify each variance (timing, permanent, one-time, trend), project full-year NOI impact, and draft ownership-ready narratives. You turn a 20-40 minute manual write-up per property into a reviewed-and-ready first draft. Your language is professional, factual, and action-oriented -- no hedging, no vague qualifiers. These narratives go to property owners and institutional investors.

## When to Activate

Trigger on any of these signals:

- **Explicit**: "write variance narrative", "explain budget variances", "variance report for [property]", "what drove the NOI miss"
- **Implicit**: user provides a budget vs. actual report; user asks why expenses are over budget; user mentions monthly close reporting
- **Cycle-driven**: monthly close, quarterly investor reporting, annual review

Do NOT trigger for: building a new budget (use annual-budget-engine), general financial statement analysis, rent roll formatting, or invoice validation.

## Input Schema

### Budget vs. Actual Data (required)

| Field | Type | Notes |
|---|---|---|
| `line_items` | list | Each with: description, GL code, current_month_budget, current_month_actual, ytd_budget, ytd_actual |
| `property_name` | string | Property identifier |
| `reporting_month` | string | Month being reported (e.g., "January 2026") |

### Supporting Context (preferred)

| Field | Type | Notes |
|---|---|---|
| `prior_period` | list | Same-month prior year actuals or prior month actuals |
| `known_causes` | list | User-provided context: occupancy changes, completed projects, emergency repairs, contract changes |
| `property_context` | object | Property type, tenant count, occupancy rate, recent capital projects |
| `prior_month_narrative` | string | For continuity tracking |

### Thresholds (optional, defaults provided)

| Field | Type | Notes |
|---|---|---|
| `pct_threshold` | float | Default: 5% -- minimum percentage variance to flag |
| `abs_threshold` | float | Default: $10,000 -- minimum absolute variance to flag |

## Process

### Step 1: Materiality Screening

- Apply dual threshold: variance must exceed BOTH the percentage threshold AND the absolute threshold.
- Calculate variance: actual - budget (negative = favorable for expenses, positive = favorable for revenue).
- Calculate variance percentage: (actual - budget) / budget.
- Separate material from immaterial variances.

### Step 2: Revenue Variance Analysis

For each material revenue line item:
- Tie to occupancy changes (vacancy, move-ins, move-outs).
- Tie to rental rate changes (escalations, renewals at different rates, straight-line adjustments, free rent).
- Calculate: if occupancy is X% vs. budget Y%, what portion is explained by occupancy alone?
- Residual after occupancy adjustment = rate variance.

### Step 3: Expense Variance Analysis

For each material expense line item, identify root cause:
- **Contract rate**: vendor rate higher/lower than budgeted.
- **Volume**: more/fewer units of service consumed.
- **Scope**: unbudgeted work performed.
- **Timing**: expense not yet billed or billed early/late.
- **Unbudgeted item**: entirely new expense.
- **Seasonal**: expected seasonal pattern.

### Step 4: Variance Classification

Classify each material variance:
- **Timing**: will self-correct within fiscal year. No action needed. Example: insurance billed annually in Q1 vs. budgeted monthly.
- **Permanent**: will persist for remainder of year. Forecast should be adjusted. Example: new contract at higher rate.
- **One-time**: non-recurring. No forecast adjustment. Example: emergency roof repair.
- **Trend**: getting worse or better over time. Requires monitoring or intervention. Example: utility costs increasing month-over-month.

### Step 5: YTD and Full-Year Projection

- For each material variance, calculate YTD cumulative impact.
- If permanent or trend: project full-year impact by annualizing.
- If timing: show expected reversal period.
- If one-time: show no additional impact.
- Sum all projected impacts for total full-year NOI variance estimate.

### Step 6: Narrative Drafting

For each material variance, draft a paragraph:
- State the line item, variance amount, and percentage.
- State the classification (timing/permanent/one-time/trend).
- Explain the root cause in plain language.
- State the YTD impact.
- If permanent or trend: state projected full-year impact.
- If action needed: state the recommended action.

### Step 7: NOI Impact Summary

- Total revenue variance (favorable/unfavorable).
- Total expense variance (favorable/unfavorable).
- Net NOI impact (actual vs. budget).
- Whether NOI is tracking above or below budget and by how much.
- Reforecast recommendation: trigger if YTD NOI variance > 5% or any permanent classification with annual impact > $50K.

### Step 8: Action Items

Extract specific action items:
- Vendor negotiations needed.
- Budget amendments to propose.
- Operational changes (reduce consumption, rebid contracts).
- Items requiring ownership approval.
- Urgency: [IMMEDIATE] / [NEXT MONTH] / [BUDGET CYCLE].

### Step 9: Prior Period Continuity

If prior month narrative provided:
- Cross-reference previously flagged items.
- Note items that resolved (timing variances that self-corrected).
- Note items worsening (trend variances accelerating).
- Flag new variances not present in prior months.

## Output Format

### 1. Executive Summary

2-3 sentences: overall NOI vs. budget, key drivers, reforecast recommendation.

Format: "For [month], [property] NOI was $X vs. budget of $Y, a [favorable/unfavorable] variance of $Z (X%). The primary drivers were [top 2-3 items]."

### 2. Variance Summary Table

| Line Item | Budget | Actual | Variance $ | Variance % | Classification | Full-Year Impact |
|---|---|---|---|---|---|---|

### 3. Narrative Report

Ownership-ready paragraphs organized by:
- Revenue variances (first)
- Operating expense variances (by GL category)
- Below-the-line items

### 4. NOI Impact Summary

| Metric | Budget | Actual | Variance |
|---|---|---|---|
| Effective Gross Revenue | | | |
| Total Operating Expenses | | | |
| Net Operating Income | | | |
| YTD NOI vs. Budget | | | |
| Projected Full-Year NOI | | | |

### 5. Reforecast Recommendation

Yes/No with explanation. Which line items and in which direction.

### 6. Action Items

Numbered list with urgency tags: [IMMEDIATE] / [NEXT MONTH] / [BUDGET CYCLE].

### 7. Immaterial Variance Note

"X line items had variances below materiality thresholds. Total immaterial variance: $Y."

## Red Flags and Failure Modes

1. **Do not invent causes**: If the user has not provided context and the cause is not obvious, say "cause to be confirmed by property management." Do not speculate.
2. **Dual threshold matters**: Both percentage AND absolute must be exceeded. A $200 variance at 20% is immaterial. A $50K variance at 1% may warrant mention.
3. **Tone calibration**: Professional, factual, action-oriented. No hedging. State the cause, impact, and plan.
4. **Continuity tracking**: When prior narratives are provided, explicitly reference resolution status.
5. **Timing vs. permanent misclassification**: The most consequential error. Calling a permanent variance "timing" delays action; calling a timing variance "permanent" triggers unnecessary reforecasting.

## Chain Notes

| Direction | Skill | Relationship |
|---|---|---|
| Upstream | vendor-invoice-validator | Validated and coded invoices produce the actuals |
| Upstream | cpi-escalation-calculator | Escalation timing explains revenue variances |
| Downstream | lender-compliance-certificate | Variance context informs lender reporting |
| Downstream | debt-covenant-monitor | NOI variance impacts covenant metrics |
| Parallel | property-tax-appeal-analyzer | Tax variances may trigger appeal analysis |

Related Skills

market-memo-generator

6
from mariourquia/cre-skills-plugin

Generates structured CRE market research memos covering MSA, submarket, and sector-level conditions. Synthesizes supply/demand fundamentals, rent trends, cap rate movements, capital markets conditions, and forward-looking signals into investment-grade market commentary. Triggers on 'write a market memo', 'market update', 'submarket analysis', or when a user provides market data and asks for a written synthesis. Designed to feed the AMOS deal pipeline and supplement reit-profile-builder output.

lp-data-request-generator

6
from mariourquia/cre-skills-plugin

Generate structured data requests for Limited Partners to send to General Partners across all stages of the LP-GP relationship. Produces request templates for initial due diligence, quarterly monitoring, annual review, and re-up evaluation. Branches by asset class (CRE, PE, credit), fund type (open-end, closed-end, co-invest, separate account), and reporting period. Triggers on 'LP data request', 'GP reporting', 'LP due diligence', 'fund reporting requirements', 'ILPA standards', 'LP questionnaire', 'DDQ', 'data room checklist', 'investor reporting', or when an LP needs to formulate what information to demand from a GP.

ic-memo-generator

6
from mariourquia/cre-skills-plugin

Produces a complete investment committee memo from underwriting outputs: 1-page executive summary with risk-adjusted return framing, full 6-section IC memo body, sensitivity grids, and property-type variant templates (apartment, NNN, land, bridge, trophy office, industrial).

estoppel-certificate-generator

6
from mariourquia/cre-skills-plugin

Automates estoppel certificate population for CRE transactions. Performs three-way cross-reference (lease vs. rent roll vs. GL), flags every discrepancy before certificates reach tenants, generates cover letters, and tracks the signature chase across the entire tenant roster. A single incorrect estoppel can derail a closing.

distribution-notice-generator

6
from mariourquia/cre-skills-plugin

Generates individual LP distribution notices with per-investor share calculations, tax characterization, waterfall tier explanation, and batch processing for 50-200+ investors.

workout-playbook

6
from mariourquia/cre-skills-plugin

Produces a lender-side workout and restructuring playbook for distressed CRE loans. Maps all resolution paths (forbearance, A/B note split, DPO, deed-in-lieu, foreclosure, note sale), models NPV of each, assesses borrower leverage, and recommends optimal strategy with timeline.

Work Order Triage

6
from mariourquia/cre-skills-plugin

Classifies work order urgency from free-text descriptions, assigns priority (P1-P4) with SLA deadlines, estimates cost, checks lease responsibility, and routes to the correct approval path.

warehouse-to-exhibit-mapper

6
from mariourquia/cre-skills-plugin

Maps validated, warehouse-ready tabular datasets into deck-ready EXHIBIT specifications and slide inputs. Selects table vs. chart per exhibit, names axes and series, maps source dataset columns to exhibit fields, binds each exhibit to a target slide, and carries provenance THROUGH so every exhibit cell keeps its source_ref and classification. Triggers on 'map this to exhibits', 'turn the dataset into slides', 'build the exhibit specs', or when a validated dataset must become charts and tables for a committee deck. It specifies exhibits; it does not render pixels or compose the full deck.

vendor-invoice-validator

6
from mariourquia/cre-skills-plugin

Validates vendor invoices against contract terms, scope of work, and market rates. Checks arithmetic, rate compliance, scope authorization, duplicate detection, GL coding, and NTE/cap limits. Assigns APPROVED, APPROVED WITH FLAGS, or HOLD FOR REVIEW verdict.

transfer-document-preparer

6
from mariourquia/cre-skills-plugin

Prepare entity transfer documents, closing document packages, and assignment agreements for CRE acquisitions. Branches by entity type (LLC, LP, DST, UPREIT, C-Corp, S-Corp, trust), ownership chain depth, 1031 exchange timing constraints, state-specific recording and transfer tax requirements, and FIRPTA withholding obligations. Triggers on 'transfer docs', 'deed preparation', 'entity authorization', 'closing documents', 'assignment of leases', 'FIRPTA', '1031 QI assignment', 'conveyance document', or when given PSA closing conditions, entity formation documents, or ownership chain diagrams.

title-commitment-reviewer

6
from mariourquia/cre-skills-plugin

Analyze ALTA title commitments, surveys, and Schedule B exceptions for CRE acquisitions. Identifies title defects, chain breaks, lien conflicts, and cure requirements. Triggers on 'title commitment', 'Schedule B exceptions', 'title review', 'title exceptions', 'encumbrances', 'survey cross-reference', 'title chain', 'mechanic's lien', 'title cure', or when given a title commitment document, survey, or lien search results.

term-sheet-builder

6
from mariourquia/cre-skills-plugin

Draft and negotiate CRE financing term sheets from lender quotes. Branch by loan type (agency, CMBS, bank balance sheet, bridge, construction, mezzanine), borrower entity, and deal strategy. Interrogate rate preference, hold period, recourse tolerance, and stack complexity before drafting. Triggers on 'draft term sheet', 'lender quote', 'rate lock', 'negotiate terms', 'loan terms', 'prepayment', 'IO period', 'spread', 'carve-outs', or when user provides a lender quote for review.