Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Performs financial ratio analysis, DCF valuation, budget variance analysis, and rolling forecast construction for strategic decision-making
.claude/skills/borghei-financial-analyst/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 315% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 400% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 184% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 142% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 204% | 0% |
Production-ready financial analysis toolkit providing ratio analysis, DCF valuation, budget variance analysis, and rolling forecast construction. Designed for financial analysts with 3-6 years experience performing financial modeling, forecasting & budgeting, management reporting, business performance analysis, and investment analysis.
Before the analysis, confirm these inputs. If any is unknown or vague, ASK — do not assume:
Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.
scripts/ratio_calculator.py)Calculate and interpret financial ratios from financial statement data.
Ratio Categories:
bashpython scripts/ratio_calculator.py sample_financial_data.json python scripts/ratio_calculator.py sample_financial_data.json --format json python scripts/ratio_calculator.py sample_financial_data.json --category profitability
scripts/dcf_valuation.py)Discounted Cash Flow enterprise and equity valuation with sensitivity analysis.
Features:
bashpython scripts/dcf_valuation.py valuation_data.json python scripts/dcf_valuation.py valuation_data.json --format json python scripts/dcf_valuation.py valuation_data.json --projection-years 7
scripts/budget_variance_analyzer.py)Analyze actual vs budget vs prior year performance with materiality filtering.
Features:
bashpython scripts/budget_variance_analyzer.py budget_data.json python scripts/budget_variance_analyzer.py budget_data.json --format json python scripts/budget_variance_analyzer.py budget_data.json --threshold-pct 5 --threshold-amt 25000
scripts/forecast_builder.py)Driver-based revenue forecasting with rolling cash flow projection and scenario modeling.
Features:
bashpython scripts/forecast_builder.py forecast_data.json python scripts/forecast_builder.py forecast_data.json --format json python scripts/forecast_builder.py forecast_data.json --scenarios base,bull,bear
| Reference | Purpose | |-----------|---------| | references/financial-ratios-guide.md | Ratio formulas, interpretation, industry benchmarks | | references/valuation-methodology.md | DCF methodology, WACC, terminal value, comps | | references/forecasting-best-practices.md | Driver-based forecasting, rolling forecasts, accuracy |
| Template | Purpose | |----------|---------| | assets/variance_report_template.md | Budget variance report template | | assets/dcf_analysis_template.md | DCF valuation analysis template | | assets/forecast_report_template.md | Revenue forecast report template |
| Metric | Target | |--------|--------| | Forecast accuracy (revenue) | +/-5% | | Forecast accuracy (expenses) | +/-3% | | Report delivery | 100% on time | | Model documentation | Complete for all assumptions | | Variance explanation | 100% of material variances |
All scripts accept JSON input files. See assets/sample_financial_data.json for the complete input schema covering all four tools.
None - All scripts use Python standard library only (math, statistics, json, argparse, datetime). No numpy, pandas, or scipy required.
| Problem | Cause | Solution | |---------|-------|----------| | All ratios return 0.00 | Missing or zeroed financial statement fields in input JSON | Verify income_statement, balance_sheet, and cash_flow keys are populated with non-zero values; check field names match expected schema | | DCF yields negative equity value | Net debt exceeds enterprise value, or WACC is set lower than terminal growth rate | Confirm net_debt is accurate; ensure terminal_growth_rate < WACC (typically 2-3% vs 8-12%); review capital structure assumptions | | Sensitivity table shows "N/A" across entire row | WACC value in that row is less than or equal to every terminal growth rate in the range | Widen the gap between WACC and terminal growth; raise WACC inputs or lower the growth range in assumptions.terminal_growth_rate | | Budget variance analyzer flags every line as material | Materiality thresholds set too low relative to the data scale | Increase --threshold-pct (e.g., from 5 to 10) and --threshold-amt (e.g., from 25000 to 100000) to match organizational materiality policy | | Forecast builder produces flat projections | Historical data has fewer than 2 periods, or revenue_growth_rate is set to 0 | Provide at least 3-4 historical periods in historical_periods; set a non-zero revenue_growth_rate in assumptions | | JSON parsing error on script execution | Malformed JSON input file (trailing commas, unquoted keys, encoding issues) | Validate input with python -m json.tool input_file.json; ensure UTF-8 encoding; remove trailing commas and comments | | Valuation ratios all show "Insufficient data" | Missing market_data section in input JSON (share price, shares outstanding) | Add the market_data object with share_price, shares_outstanding, and earnings_growth_rate fields to the input file |
This skill covers:
This skill does NOT cover:
| Anti-pattern | Failure mode | Fix | |--------------|--------------|-----| | Building a DCF on a single-scenario forecast | False precision; one number presented as a target price | Always run base/bull/bear; present valuation as a range with sensitivity tables | | Terminal growth rate ≥ long-run GDP growth | Valuation dominated by terminal value assuming perpetual above-economy growth | Cap terminal growth at 2-3% (long-run GDP proxy); if comps justify higher, flag explicitly | | WACC inputs more than a quarter old | Rate environment moved; discount rate is wrong; valuation wrong | Refresh risk-free rate, ERP, and beta quarterly; document "last reviewed" date per input | | Benchmarking ratios against a generic "industry average" | Peer set is wrong; conclusions are wrong | Use a specific comparable-company set (size, geography, business model) — see industry benchmarks in references/financial-ratios-guide.md | | Reporting every variance instead of filtering by materiality | Stakeholders tune out; real issues buried | Apply a materiality threshold (absolute $ or % of budget); below threshold goes into an appendix, not the report | | Favorable variance = "good"; unfavorable = "bad" | Misses revenue shortfalls masked by expense underspend; misses over-delivery hiding scope cuts | Always pair the classification with a root-cause note — direction alone is not insight | | Mixing forecast periods (quarterly actuals against annual budget) | Variances that don't reconcile; trust collapses | Run the tools on matched periods only; if a period is partial, annotate and use period-adjusted comparisons | | Treating model output as the answer | Model is a reasoning aid, not a decision | Lead the executive summary with the decision; put the model outputs in support |
| Related Skill | Domain | Integration Use Case | |---------------|--------|---------------------| | c-level-advisor/ceo-advisor | C-Level Advisory | Feed DCF valuation outputs and scenario comparisons into CEO strategic investment decisions and board-ready presentations | | c-level-advisor/cto-advisor | C-Level Advisory | Provide technology investment ROI analysis and CapEx forecasts to support build-vs-buy and infrastructure scaling decisions | | business-growth/revenue-operations | Business & Growth | Connect revenue forecasts and unit-economics metrics (CAC, LTV, payback period) to pipeline and go-to-market planning | | product-team/product-manager | Product Team | Supply budget variance data and RICE-weighted financial projections for feature prioritization and resource allocation | | data-analytics/data-analyst | Data Analytics | Export ratio analysis and forecast outputs as structured JSON for BI dashboard integration and trend visualization | | project-management/project-financial-management | Project Management | Align budget variance analysis with project-level cost tracking, earned value management, and milestone-based funding releases |
scripts/ratio_calculator.pyCalculate and interpret financial ratios across 5 categories with industry benchmarking.
usage: ratio_calculator.py [-h] [--format {text,json}]
[--category {profitability,liquidity,leverage,efficiency,valuation}]
input_file
positional arguments:
input_file Path to JSON file with financial statement data
(must contain income_statement, balance_sheet,
cash_flow, and optionally market_data objects)
options:
-h, --help Show help message and exit
--format {text,json} Output format (default: text)
--category {profitability,liquidity,leverage,efficiency,valuation}
Calculate only a specific ratio category;
omit to calculate all 5 categories (20 ratios)Ratios computed: ROE, ROA, Gross Margin, Operating Margin, Net Margin, Current Ratio, Quick Ratio, Cash Ratio, Debt-to-Equity, Interest Coverage, DSCR, Asset Turnover, Inventory Turnover, Receivables Turnover, DSO, P/E, P/B, P/S, EV/EBITDA, PEG Ratio.
scripts/dcf_valuation.pyDiscounted Cash Flow enterprise and equity valuation with WACC calculation and sensitivity analysis.
usage: dcf_valuation.py [-h] [--format {text,json}]
[--projection-years PROJECTION_YEARS]
input_file
positional arguments:
input_file Path to JSON file with valuation data
(must contain historical and assumptions objects)
options:
-h, --help Show help message and exit
--format {text,json} Output format (default: text)
--projection-years PROJECTION_YEARS
Number of projection years; overrides the value
in the input file (default: 5)Outputs: WACC (CAPM), projected revenue and FCF, terminal value (perpetuity growth + exit multiple), enterprise value, equity value, value per share, and a two-way sensitivity table (WACC vs terminal growth rate).
scripts/budget_variance_analyzer.pyAnalyze actual vs budget vs prior year performance with materiality filtering and executive summaries.
usage: budget_variance_analyzer.py [-h] [--format {text,json}]
[--threshold-pct THRESHOLD_PCT]
[--threshold-amt THRESHOLD_AMT]
input_file
positional arguments:
input_file Path to JSON file with budget data
(must contain line_items array with actual,
budget, and optionally prior_year values)
options:
-h, --help Show help message and exit
--format {text,json} Output format (default: text)
--threshold-pct THRESHOLD_PCT
Materiality threshold as percentage (default: 10.0)
--threshold-amt THRESHOLD_AMT
Materiality threshold as dollar amount (default: 50000.0)Outputs: Executive summary (revenue/expense/net impact), all variances with favorability classification, material variances filtered by threshold, department summary, and category summary.
scripts/forecast_builder.pyDriver-based revenue forecasting with rolling cash flow projection and multi-scenario modeling.
usage: forecast_builder.py [-h] [--format {text,json}]
[--scenarios SCENARIOS]
input_file
positional arguments:
input_file Path to JSON file with forecast data
(must contain historical_periods, drivers,
assumptions, cash_flow_inputs, and scenarios objects)
options:
-h, --help Show help message and exit
--format {text,json} Output format (default: text)
--scenarios SCENARIOS
Comma-separated list of scenarios to model
(default: base,bull,bear)Outputs: Trend analysis (linear regression, growth rates, seasonality index), scenario comparison table, per-period forecast detail (revenue, COGS, gross profit, OpEx, operating income), and 13-week rolling cash flow projection with runway calculation.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 23,266 | 35,525 | +53% | 1 | 1 | 0% | 4,069 | 10,501 | +158% | 0 | 0 | — |
case-02 | fail→fail | 29,728 | 8,283 | -72% | 1 | 1 | 0% | 5,946 | 5,038 | -15% | 0 | 0 | — |
case-03 | fail→fail | 28,348 | 39,466 | +39% | 1 | 1 | 0% | 5,151 | 10,756 | +109% | 0 | 0 | — |
case-04 | pass→pass | 15,536 | 33,371 | +115% | 1 | 1 | 0% | 3,159 | 10,174 | +222% | 0 | 0 | — |
case-05 | pass→pass | 16,297 | 14,961 | -8% | 1 | 1 | 0% | 2,412 | 6,833 | +183% | 0 | 0 | — |
case-06 | pass→pass | 14,301 | 15,748 | +10% | 1 | 1 | 0% | 2,373 | 7,097 | +199% | 0 | 0 | — |
case-07 | fail→pass | 8,164 | 3,242 | -60% | 1 | 1 | 0% | 1,222 | 5,066 | +315% | 0 | 0 | — |
case-08 | pass→pass | 7,006 | 2,351 | -66% | 1 | 1 | 0% | 1,101 | 4,896 | +345% | 0 | 0 | — |
case-09 | fail→pass | 6,086 | 2,123 | -65% | 1 | 1 | 0% | 964 | 4,822 | +400% | 0 | 0 | — |
case-10 | fail→pass | 9,856 | 3,687 | -63% | 1 | 1 | 0% | 1,819 | 5,170 | +184% | 0 | 0 | — |
case-11 | pass→pass | 12,574 | 11,299 | -10% | 1 | 1 | 0% | 1,872 | 6,123 | +227% | 0 | 0 | — |
case-12 | pass→pass | 13,071 | 10,633 | -19% | 1 | 1 | 0% | 2,010 | 6,192 | +208% | 0 | 0 | — |
case-13 | pass→pass | 16,133 | 19,785 | +23% | 1 | 1 | 0% | 2,690 | 7,690 | +186% | 0 | 0 | — |
case-14 | fail→pass | 15,737 | 8,542 | -46% | 1 | 1 | 0% | 2,398 | 5,801 | +142% | 0 | 0 | — |
case-15 | pass→pass | 13,054 | 15,007 | +15% | 1 | 1 | 0% | 1,904 | 6,881 | +261% | 0 | 0 | — |
case-16 | fail→pass | 12,693 | 7,808 | -38% | 1 | 1 | 0% | 1,899 | 5,772 | +204% | 0 | 0 | — |
case-17 | pass→pass | 11,325 | 9,679 | -15% | 1 | 1 | 0% | 1,852 | 5,929 | +220% | 0 | 0 | — |
case-18 | fail→pass | 9,572 | 2,183 | -77% | 1 | 1 | 0% | 1,534 | 4,929 | +221% | 0 | 0 | — |
case-19 | pass→pass | 8,757 | 9,510 | +9% | 1 | 1 | 0% | 1,507 | 6,027 | +300% | 0 | 0 | — |
case-20 | fail→pass | 16,470 | 11,739 | -29% | 1 | 1 | 0% | 2,866 | 6,702 | +134% | 0 | 0 | — |
case-21 | pass→pass | 11,659 | 5,288 | -55% | 1 | 1 | 0% | 1,714 | 5,280 | +208% | 0 | 0 | — |
case-22 | fail→pass | 15,471 | 6,529 | -58% | 1 | 1 | 0% | 1,889 | 5,505 | +191% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +36 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.