Project Finance
Shared financial analysis engine for project-manager and delivery-manager. Handles data ingestion, column mapping, standard PM financial analyses, and multi-format output.
When to Use / When Not
Use this skill for:
- Budget vs actual variance analysis
- Earned Value Management (EVM) metrics and interpretation
- Spend trend analysis, burn rate calculation, S-curve tracking
- Cost breakdown structures (CBS)
- Financial forecasting (trend-based, EVM-based, manual)
- Processing CSV/Excel files containing financial data
- Any request from
project-manager or delivery-manager involving financial numbers
Do NOT use for:
- Live dashboards or real-time financial monitoring
- Accounting, invoicing, or payroll processing
- Tax calculations or regulatory financial reporting
- General data analysis unrelated to project financials (use
python-data-engineer)
Operating Mode: Draft-and-Confirm
Claude always produces analysis and artifacts. The user always reviews before acting on them.
- User provides a CSV/Excel file or describes their budget structure
- Skill runs recon, maps columns (with user confirmation), performs analysis
- Output: markdown report with tables, charts, and plain-English interpretation
- Always explains what each metric means and suggests actions to consider
- Always states assumptions and flags data quality issues
Workflow
Follow this seven-step pipeline for every financial analysis request.
Step 1: Intake
Receive the data source:
- File path (CSV, XLSX, XLS, TSV, JSON)
- Inline data pasted in chat
- Project data files from a known location
Detect file type by extension. If file exceeds 2000 rows, apply patterns from large-file-analysis.
Step 2: Reconnaissance
Before loading the full file, examine its shape:
# Row and column count
wc -l /path/to/file.csv
head -5 /path/to/file.csv
tail -5 /path/to/file.csv
Report to the user:
- Row count, column count, file size
- Sample of first 5 and last 5 rows
- Detected delimiter, encoding, date formats
- Currency format detection ($, EUR, GBP, plain numbers)
Step 3: Column Mapping
Map file columns to financial concepts using three-layer resolution. Read references/column-mappings.md for the synonym dictionary and detection heuristics.
Confidence levels and actions:
| Confidence |
Action |
| HIGH (exact synonym match) |
Apply mapping, inform user of all mappings made |
| MEDIUM (fuzzy match, single candidate) |
Apply with warning, ask to confirm |
| LOW (multiple candidates or no match) |
Present options, require user selection |
| NONE (no plausible match) |
Ask user which column maps to which concept |
Check for a cached mapping file at <project>/.project-finance/column-mappings.json. If found and file pattern matches, offer to reuse. Always show the mapping to the user regardless of confidence.
Step 4: Data Validation
Before calculating, run validation checks and report findings:
- Null/empty cell counts per column
- Duplicate row detection
- Mixed currency detection
- Date format consistency
- Negative values where positives expected
- Cumulative vs periodic data detection (monotonically increasing values suggest cumulative)
Present each issue found and require user decision on how to handle it (fill with zero, interpolate, exclude, keep as-is). Never silently resolve data quality issues.
Step 5: Load and Prepare
Load data using pandas (or bash fallback for basic CSV):
import pandas as pd
# File type detection
df = pd.read_csv(path) # .csv
df = pd.read_excel(path) # .xlsx (requires openpyxl)
df = pd.read_csv(path, sep='\t') # .tsv
Parse dates, convert currencies to numeric, handle encoding (try utf-8, then latin-1, then cp1252).
Required Python libraries:
| Library |
Purpose |
Required? |
| pandas |
Core data manipulation |
Yes |
| openpyxl |
Read/write .xlsx |
Yes (for Excel) |
| matplotlib |
Chart generation |
Recommended |
| numpy |
Numerical calculations |
Yes (for forecasting) |
Auto-detect availability and offer to install if missing. Never install without asking. Provide bash fallback for basic CSV analysis using awk/sort.
Step 6: Analyze
Select analysis type based on available columns or user request. Read references/analysis-templates.md for template details and references/evm-formulas.md for EVM calculations.
Analysis type routing:
| Available Data |
Suggested Analysis |
| Budget + Actual columns |
Budget vs Actual variance |
| EV + PV + AC + BAC columns |
Full EVM analysis |
| Actual cost by period |
Spend trend / burn rate |
| Cost data with categories |
Cost Breakdown Structure |
| Historical actuals + total budget |
Financial forecasting |
Auto-detect available analyses from mapped columns, present options, let user choose.
Five built-in analysis types:
- Budget vs Actual -- variance in $ and %, RAG status thresholds (configurable)
- EVM -- full suite: SV, SPI, CV, CPI, EAC (4 variants), ETC, VAC, TCPI (2 variants). All divisions guarded against zero. Read
references/evm-formulas.md for formulas and interpretation.
- Spend Trend -- S-curve, burn rate, burn rate trend, budget exhaustion projection
- Cost Breakdown Structure -- hierarchical cost decomposition with % of total, top-N cost drivers
- Financial Forecasting -- trend-based (linear regression), EVM-based (BAC/CPI), manual. Confidence tags: LOW (<3 data points), MEDIUM (3-5), HIGH (6+). Always include "projection, not prediction" caveat.
Step 7: Output and Interpret
Output formats:
- Markdown tables (always produced) -- used in reports, status updates, chat responses
- Charts (if matplotlib available) -- read
references/chart-patterns.md for standard financial charts. Create session temp dir: PF_WORK=$(mktemp -d /tmp/pf-XXXXXXXXXX). Save to ${PF_WORK}/charts/, or <project>/.project-finance/charts/ if project context available
- CSV export (if requested) -- for users who want to take data into Excel
- Slide-ready data (if invoked via
presentation-builder chain) -- follow presentation-datavis patterns
Interpretation (always included):
- Add plain-English interpretation of each metric
- Flag items needing attention (over budget, behind schedule, trend worsening)
- Suggest actions to consider based on metric values
- Present all as draft recommendations for user review
Mapping Cache
Store confirmed column mappings for reuse:
<project>/.project-finance/
column-mappings.json # Cached mappings per file pattern
charts/ # Generated chart images
Cache schema:
{
"file_pattern": "monthly_budget_*.csv",
"mappings": {
"budget": "Allocated Amount",
"actual": "Spend to Date",
"task": "Cost Element",
"period": "Reporting Month"
},
"confirmed_by_user": true,
"last_used": "2026-03-30"
}
Integration Points
- project-manager -- routes budget, variance, EVM, spend requests here. PM provides project context (name, period, governance level); this skill returns analysis, charts, interpretation.
- delivery-manager -- routes delivery cost analysis here. DM provides delivery context; this skill returns financial metrics.
- presentation-builder -- for chart generation in slide decks. Follow
presentation-datavis patterns (insight titles, accent colors, source lines). Save to .presentations/output/assets/.
- large-file-analysis -- apply chunked reading patterns for files exceeding 2000 rows. Pre-process with bash to reduce dataset before pandas load.
Anti-Patterns
| Anti-Pattern |
Why It's Wrong |
Do This Instead |
| Loading file without recon |
Wrong assumptions about structure, wasted effort |
Always run Phase 0 reconnaissance first |
| Silent column mapping |
User trusts wrong mapping, analysis is meaningless |
Report ALL mappings, confirm medium/low confidence |
| Silently filling null values |
Hides data quality issues, corrupts analysis |
Report nulls, ask user how to handle each |
| Division by zero in EVM |
Crash or misleading infinity values |
Guard all divisions, report "N/A -- no data yet" |
| Forecast from <3 data points |
Unreliable trend line presented as fact |
Tag confidence as LOW, add explicit warning |
| Presenting numbers without method |
User cannot verify or challenge results |
Always show formula and input values used |
| Treating cumulative as periodic |
Double-counting inflates totals |
Detect monotonic increase, ask user to confirm |
| Ignoring mixed currencies |
Meaningless aggregations across currencies |
Detect multiple symbols, require user resolution |
Reference Files
Read these on demand when performing specific analysis types:
~/.claude/skills/project-finance/references/column-mappings.md -- synonym dictionary, detection heuristics, cache schema
~/.claude/skills/project-finance/references/evm-formulas.md -- all EVM formulas with worked examples and interpretation
~/.claude/skills/project-finance/references/analysis-templates.md -- budget vs actual, spend trend, CBS, forecasting templates
~/.claude/skills/project-finance/references/chart-patterns.md -- matplotlib code for S-curve, variance bar, EVM dashboard
1---2name: project-finance3description: Use when analyzing project financial data — budget vs actual variance, Earned Value Management (EVM) metrics (CPI, SPI, EAC, ETC, TCPI), cost breakdown structures, spend trends, financial forecasting, or processing CSV/Excel files containing budget, cost, or spend data. Shared financial engine for project-manager and delivery-manager. Trigger on: budget, actual cost, variance, EVM, earned value, CPI, SPI, EAC, ETC, cost breakdown, spend analysis, burn rate, financial forecast, budget vs actual, project financials, analyze budget, analyze spend, cost tracking.4---56# Project Finance78Shared financial analysis engine for `project-manager` and `delivery-manager`. Handles data ingestion, column mapping, standard PM financial analyses, and multi-format output.910<HARD-RULE>11Never make autonomous decisions about scope, priorities, resource allocation, or risk responses.12Always present recommendations for user approval. Draft-and-confirm, not decide-and-act.13</HARD-RULE>1415<HARD-RULE>16Always state assumptions explicitly. When input data is incomplete, list what's assumed and17what's missing. Never silently fill gaps.18</HARD-RULE>1920<HARD-RULE>21Never present financial numbers without showing the calculation method and input data used.22Confidently wrong financial analysis is worse than no analysis.23</HARD-RULE>2425<HARD-RULE>26Column mapping is NEVER silent. Even high-confidence exact matches are reported to the user.27Medium/low confidence requires explicit confirmation before proceeding.28</HARD-RULE>2930<HARD-RULE>31Always run reconnaissance before analysis. Read file shape (rows, columns, headers, sample data)32before loading. Follows `large-file-analysis` Phase 0 pattern.33</HARD-RULE>3435---3637## When to Use / When Not3839**Use this skill for:**40- Budget vs actual variance analysis41- Earned Value Management (EVM) metrics and interpretation42- Spend trend analysis, burn rate calculation, S-curve tracking43- Cost breakdown structures (CBS)44- Financial forecasting (trend-based, EVM-based, manual)45- Processing CSV/Excel files containing financial data46- Any request from `project-manager` or `delivery-manager` involving financial numbers4748**Do NOT use for:**49- Live dashboards or real-time financial monitoring50- Accounting, invoicing, or payroll processing51- Tax calculations or regulatory financial reporting52- General data analysis unrelated to project financials (use `python-data-engineer`)5354---5556## Operating Mode: Draft-and-Confirm5758Claude always produces analysis and artifacts. The user always reviews before acting on them.5960- User provides a CSV/Excel file or describes their budget structure61- Skill runs recon, maps columns (with user confirmation), performs analysis62- Output: markdown report with tables, charts, and plain-English interpretation63- Always explains what each metric means and suggests actions to consider64- Always states assumptions and flags data quality issues6566---6768## Workflow6970Follow this seven-step pipeline for every financial analysis request.7172### Step 1: Intake7374Receive the data source:75- File path (CSV, XLSX, XLS, TSV, JSON)76- Inline data pasted in chat77- Project data files from a known location7879Detect file type by extension. If file exceeds 2000 rows, apply patterns from `large-file-analysis`.8081### Step 2: Reconnaissance8283Before loading the full file, examine its shape:8485```bash86# Row and column count87wc -l /path/to/file.csv88head -5 /path/to/file.csv89tail -5 /path/to/file.csv90```9192Report to the user:93- Row count, column count, file size94- Sample of first 5 and last 5 rows95- Detected delimiter, encoding, date formats96- Currency format detection ($, EUR, GBP, plain numbers)9798### Step 3: Column Mapping99100Map file columns to financial concepts using three-layer resolution. Read `references/column-mappings.md` for the synonym dictionary and detection heuristics.101102**Confidence levels and actions:**103104| Confidence | Action |105|------------|--------|106| HIGH (exact synonym match) | Apply mapping, inform user of all mappings made |107| MEDIUM (fuzzy match, single candidate) | Apply with warning, ask to confirm |108| LOW (multiple candidates or no match) | Present options, require user selection |109| NONE (no plausible match) | Ask user which column maps to which concept |110111Check for a cached mapping file at `<project>/.project-finance/column-mappings.json`. If found and file pattern matches, offer to reuse. Always show the mapping to the user regardless of confidence.112113### Step 4: Data Validation114115Before calculating, run validation checks and report findings:116- Null/empty cell counts per column117- Duplicate row detection118- Mixed currency detection119- Date format consistency120- Negative values where positives expected121- Cumulative vs periodic data detection (monotonically increasing values suggest cumulative)122123Present each issue found and require user decision on how to handle it (fill with zero, interpolate, exclude, keep as-is). Never silently resolve data quality issues.124125### Step 5: Load and Prepare126127Load data using pandas (or bash fallback for basic CSV):128129```python130import pandas as pd131132# File type detection133df = pd.read_csv(path) # .csv134df = pd.read_excel(path) # .xlsx (requires openpyxl)135df = pd.read_csv(path, sep='\t') # .tsv136```137138Parse dates, convert currencies to numeric, handle encoding (try utf-8, then latin-1, then cp1252).139140**Required Python libraries:**141142| Library | Purpose | Required? |143|---------|---------|-----------|144| pandas | Core data manipulation | Yes |145| openpyxl | Read/write .xlsx | Yes (for Excel) |146| matplotlib | Chart generation | Recommended |147| numpy | Numerical calculations | Yes (for forecasting) |148149Auto-detect availability and offer to install if missing. Never install without asking. Provide bash fallback for basic CSV analysis using awk/sort.150151### Step 6: Analyze152153Select analysis type based on available columns or user request. Read `references/analysis-templates.md` for template details and `references/evm-formulas.md` for EVM calculations.154155**Analysis type routing:**156157| Available Data | Suggested Analysis |158|---------------|--------------------|159| Budget + Actual columns | Budget vs Actual variance |160| EV + PV + AC + BAC columns | Full EVM analysis |161| Actual cost by period | Spend trend / burn rate |162| Cost data with categories | Cost Breakdown Structure |163| Historical actuals + total budget | Financial forecasting |164165Auto-detect available analyses from mapped columns, present options, let user choose.166167**Five built-in analysis types:**1681691. **Budget vs Actual** -- variance in $ and %, RAG status thresholds (configurable)1702. **EVM** -- full suite: SV, SPI, CV, CPI, EAC (4 variants), ETC, VAC, TCPI (2 variants). All divisions guarded against zero. Read `references/evm-formulas.md` for formulas and interpretation.1713. **Spend Trend** -- S-curve, burn rate, burn rate trend, budget exhaustion projection1724. **Cost Breakdown Structure** -- hierarchical cost decomposition with % of total, top-N cost drivers1735. **Financial Forecasting** -- trend-based (linear regression), EVM-based (BAC/CPI), manual. Confidence tags: LOW (<3 data points), MEDIUM (3-5), HIGH (6+). Always include "projection, not prediction" caveat.174175### Step 7: Output and Interpret176177**Output formats:**178179- **Markdown tables** (always produced) -- used in reports, status updates, chat responses180- **Charts** (if matplotlib available) -- read `references/chart-patterns.md` for standard financial charts. Create session temp dir: `PF_WORK=$(mktemp -d /tmp/pf-XXXXXXXXXX)`. Save to `${PF_WORK}/charts/`, or `<project>/.project-finance/charts/` if project context available181- **CSV export** (if requested) -- for users who want to take data into Excel182- **Slide-ready data** (if invoked via `presentation-builder` chain) -- follow `presentation-datavis` patterns183184**Interpretation (always included):**185- Add plain-English interpretation of each metric186- Flag items needing attention (over budget, behind schedule, trend worsening)187- Suggest actions to consider based on metric values188- Present all as draft recommendations for user review189190---191192## Mapping Cache193194Store confirmed column mappings for reuse:195196```197<project>/.project-finance/198 column-mappings.json # Cached mappings per file pattern199 charts/ # Generated chart images200```201202Cache schema:203204```json205{206 "file_pattern": "monthly_budget_*.csv",207 "mappings": {208 "budget": "Allocated Amount",209 "actual": "Spend to Date",210 "task": "Cost Element",211 "period": "Reporting Month"212 },213 "confirmed_by_user": true,214 "last_used": "2026-03-30"215}216```217218---219220## Integration Points221222- **project-manager** -- routes budget, variance, EVM, spend requests here. PM provides project context (name, period, governance level); this skill returns analysis, charts, interpretation.223- **delivery-manager** -- routes delivery cost analysis here. DM provides delivery context; this skill returns financial metrics.224- **presentation-builder** -- for chart generation in slide decks. Follow `presentation-datavis` patterns (insight titles, accent colors, source lines). Save to `.presentations/output/assets/`.225- **large-file-analysis** -- apply chunked reading patterns for files exceeding 2000 rows. Pre-process with bash to reduce dataset before pandas load.226227---228229## Anti-Patterns230231| Anti-Pattern | Why It's Wrong | Do This Instead |232|-------------|----------------|-----------------|233| Loading file without recon | Wrong assumptions about structure, wasted effort | Always run Phase 0 reconnaissance first |234| Silent column mapping | User trusts wrong mapping, analysis is meaningless | Report ALL mappings, confirm medium/low confidence |235| Silently filling null values | Hides data quality issues, corrupts analysis | Report nulls, ask user how to handle each |236| Division by zero in EVM | Crash or misleading infinity values | Guard all divisions, report "N/A -- no data yet" |237| Forecast from <3 data points | Unreliable trend line presented as fact | Tag confidence as LOW, add explicit warning |238| Presenting numbers without method | User cannot verify or challenge results | Always show formula and input values used |239| Treating cumulative as periodic | Double-counting inflates totals | Detect monotonic increase, ask user to confirm |240| Ignoring mixed currencies | Meaningless aggregations across currencies | Detect multiple symbols, require user resolution |241242---243244## Reference Files245246Read these on demand when performing specific analysis types:247248- `~/.claude/skills/project-finance/references/column-mappings.md` -- synonym dictionary, detection heuristics, cache schema249- `~/.claude/skills/project-finance/references/evm-formulas.md` -- all EVM formulas with worked examples and interpretation250- `~/.claude/skills/project-finance/references/analysis-templates.md` -- budget vs actual, spend trend, CBS, forecasting templates251- `~/.claude/skills/project-finance/references/chart-patterns.md` -- matplotlib code for S-curve, variance bar, EVM dashboard