financial-analysis
This skill should be used when the user asks to "analyze finances", "financial position", "German tax", "pension analysis", "real estate purchase Germany", "expat finances Berlin", "Steuerklasse", "Kapitalertragsteuer", "investment comparison", "net worth overview", "savings rate", "Steuererklarung", "Grunderwerbsteuer", "retirement projection", "financial snapshot", "how much am I worth", or "budget review". Core knowledge skill providing German financial system context for an English-speaking expat in Berlin.
What this skill does
# Financial Analysis — Core Context
Provide quantitative, German-regulation-grounded financial analysis for an English-speaking expat living in Berlin. All output in English. All currency in EUR. All tax law references based on current German Einkommensteuergesetz (EStG) and related statutes.
## User Profile (Baseline Assumptions)
Apply these assumptions to every analysis unless overridden by data in `finance/data/`:
| Parameter | Value |
|---|---|
| Residence | Berlin, Germany |
| Tax residency | Germany — unbeschrankte Steuerpflicht (unlimited tax liability) |
| Steuerklasse | I (single, no dependents) |
| Household | Single, no children |
| Citizenship status | In progress (Einburgerung) |
| Real estate status | Currently renting; exploring purchase in Berlin and Brandenburg |
| Financial literacy | Beginner for German-specific topics; skip universally obvious concepts |
| Language | Source documents in German; all output in English |
## Analysis Principles
### Be Quantitative
Never state "this is expensive" or "returns are low" without numbers. Calculate actual amounts. Compare against benchmarks. Show projections over 5, 10, 20, and 30-year horizons where relevant. Express percentages to two decimal places and absolute amounts to the nearest euro.
Present every financial comparison as a numbered scenario analysis. For example, when comparing rent vs. buy: label Scenario A (continue renting) and Scenario B (purchase), then calculate the net position at year 10, 20, and 30 under each. Include opportunity cost — capital not spent on Kaufnebenkosten could be invested elsewhere.
When analyzing pension products, always compute the internal rate of return (IRR) net of all fees and taxes. Compare against a benchmark: a low-cost MSCI World ETF accumulating at an assumed 7% gross nominal return, minus Abgeltungsteuer on realization. This benchmark makes the true cost of insurance wrappers and guarantee fees visible.
For savings rate analysis, express the savings rate as a percentage of Nettoeinkommen (not gross). Break down where savings flow: emergency fund, ETF-Sparplan, pension, Bausparvertrag, or other vehicles. Flag when the total savings allocation exceeds available Nettoeinkommen minus fixed costs.
### Show Math
Include formulas and state assumptions explicitly. State every assumption in a dedicated "Assumptions" block at the top of each calculation section. Flag which assumptions are user-provided data and which are estimates or defaults.
For tax calculations, write out each step:
```
Gross salary: €X
- Sozialversicherungsbeitrage: €Y
= Bruttoeinkommen (taxable): €Z
- Income tax (per EStG tariff): €A
- Solidaritatszuschlag: €B
= Nettoeinkommen: €C
```
When projecting investment growth, state the assumed return rate, inflation rate, and fee drag separately. Use compound interest formula: `FV = PV * (1 + r)^n` and show intermediate values at key milestones (year 5, 10, 15, 20, 25, 30).
For real-value projections, always present both nominal and inflation-adjusted (real) figures. Use the ECB target inflation rate of 2% as default unless a different rate is specified or retrieved via web search. Label columns clearly: "Nominal EUR" vs. "Real EUR (2026 purchasing power)."
### Cross-Check Results
After every major calculation, perform a sanity check. Compare the result against known benchmarks or rules of thumb:
- Net salary should be approximately 55–65% of gross for Steuerklasse I at typical Berlin salaries
- Total Kaufnebenkosten in Berlin should be 8–12% of purchase price (depending on broker involvement)
- A Riester contract with fees above 1.5% Effektivkosten per year is expensive relative to market average
- Savings rate above 20% of Nettoeinkommen is above the German median; below 10% warrants a budget review
If results deviate significantly from these ranges, re-examine the inputs and flag the discrepancy.
### Use Current Data
Use web search to retrieve current figures before every analysis. Do not rely on cached or training data for:
- Mortgage interest rates (Bauzinsen) — check Interhyp, Dr. Klein, or Europace
- Berlin and Brandenburg property prices per square meter — check Immoscout24 Preisatlas or Guthmann
- ETF total expense ratios and performance — check justETF or extraETF
- German tax thresholds and social insurance contribution ceilings (Beitragsbemessungsgrenze) — check Bundesfinanzministerium or Haufe
- Inflation rates — check Destatis (Statistisches Bundesamt)
### Apply German Tax Law
Reference the following tax parameters in calculations:
**Income Tax (Einkommensteuer)**
- Apply the current EStG tariff (progressive rates from 14% to 45%)
- Grundfreibetrag (basic tax-free allowance): look up current year value via web search
- Solidaritatszuschlag (Soli): 5.5% of income tax, but only when income tax exceeds the Freigrenze
- Kirchensteuer: not applicable unless the user states church membership (assume none)
**Capital Gains Tax (Kapitalertragsteuer / Abgeltungsteuer)**
- Flat rate: 25%
- Plus Solidaritatszuschlag: 5.5% of the 25% = 1.375%
- Effective rate without Kirchensteuer: 26.375%
- Sparerpauschbetrag (saver's lump sum): EUR 1,000 for singles
- Apply Freistellungsauftrag before calculating tax on investment income
- For Gunstigerprufung: if the marginal income tax rate is below 25%, apply the lower rate instead
**Real Estate Transfer Tax (Grunderwerbsteuer)**
- Berlin: 6.0%
- Brandenburg: 6.5%
- Include in total purchase cost calculations alongside notary fees (~1.5%), land registry fees (~0.5%), and optional broker commission (Maklerprovision, typically 3.57% including VAT, split buyer/seller in Berlin)
**Savings Incentives**
- Wohnungsbauprämie: available for income below threshold; contribute to Bausparvertrag
- Arbeitnehmersparzulage: employer vermogenswirksame Leistungen (VL) contribution; check eligibility based on income limits
- Riester-Zulage: EUR 175 basic allowance; check if the user qualifies based on pension insurance membership
## Data Sources
### Input Data
Read financial data from the following locations within the Obsidian vault:
- **`finance/data/`** — structured markdown files: `pension.md`, `bank-accounts.md`, `employment.md`, `monthly-budget.md`, `property-goals.md`
- **`finance/docs/`** — raw German document transcriptions: Standmitteilungen, Kontoauszuge, Arbeitsvertrag, Nebenkostenabrechnungen
Parse markdown tables and key-value pairs from these files. When a data file is missing or incomplete, flag the gap and state what assumptions were made.
### Reference Material
Load the German financial system reference from `${CLAUDE_PLUGIN_ROOT}/skills/financial-analysis/references/german-financial-system.md` for term definitions, tax bracket details, and regulatory background.
For specific analyses, use the dedicated skills: `retirement-readiness` for three-pillar pension projections and Versorgungslücke analysis, `capital-allocation` for integrated pension vs. real estate allocation recommendations, and `evaluate-pension` for single-product pension evaluation.
### Output Destination
Write all generated reports to `finance/reports/` using the naming pattern:
```
[analysis-type]-YYYY-MM.md
```
Examples: `pension-evaluation-2026-04.md`, `real-estate-readiness-2026-04.md`, `tax-check-2026-04.md`, `net-worth-2026-04.md`.
## Output Format
### Obsidian-Compatible Markdown
Generate all reports as Obsidian-compatible markdown with the following structure:
**YAML Frontmatter (required):**
```yaml
---
title: "[Analysis Type] — [Month Year]"
date: YYYY-MM-DD
type: financial-report
status: draft
tags:
- finance
- [analysis-type]
---
```
**Wiki-Links:** Use `[[double-bracket]]` links when referencing other vault files, e.g., `[[pension]]`, `[[bank-accounts]]`, `[[glossary]]`.
**Callouts:** Use Obsidian callout syntax for inline explanations and warnings:
```markdown
> [!info] Kapitalertragsteuer (Capital Gains Tax)
> Related in Code Review
gstack
IncludedFast headless browser for QA testing and site dogfooding. Navigate pages, interact with elements, verify state, diff before/after, take annotated screenshots, test responsive layouts, forms, uploads, dialogs, and capture bug evidence. Use when asked to open or test a site, verify a deployment, dogfood a user flow, or file a bug with screenshots. (gstack)
startup-due-diligence
IncludedLegal due diligence review for seed-stage and Series A startups (US, Delaware C-Corp focus). Supports both investor and founder perspectives. Capabilities include: (1) Interactive document review and issue spotting; (2) Document request list generation; (3) Cap table and SAFE/convertible note analysis; (4) Red flag identification with severity ratings; (5) Diligence report generation. TRIGGERS: due diligence, DD, startup investment, cap table review, Series A, seed round, investor diligence, legal review startup, SAFE analysis, convertible note, 409A, founder vesting.
interview-master
IncludedThis skill should be used when the user asks to "generate interview questions", "prepare for interview", "optimize resume", "conduct mock interview", "analyze git commits for resume", "generate resume from code", "review my resume", or mentions interview preparation, career assistance, or extracting project experience from git history. Provides comprehensive interview and career development guidance for both job seekers and interviewers.
fix-issue
IncludedFixes GitHub issues using parallel analysis agents for root cause investigation, code exploration, and regression detection. Reads issue context from gh CLI, searches codebase and memory for related patterns, generates a fix with tests, and links the resolution back to the issue via PR. Includes prevention analysis to avoid recurrence. Use when debugging errors, resolving regressions, fixing bugs, or triaging issues.
sf-apex
IncludedGenerates and reviews Salesforce Apex code with 150-point scoring. TRIGGER when: user writes, reviews, or fixes Apex classes, triggers, test classes, batch/queueable/schedulable jobs, or touches .cls/.trigger files. DO NOT TRIGGER when: LWC JavaScript (use sf-lwc), Flow XML (use sf-flow), SOQL-only queries (use sf-soql), or non-Salesforce code.
swift-development
IncludedComprehensive Swift development for building, testing, and deploying iOS/macOS applications. Use when Claude needs to: (1) Build Swift packages or Xcode projects from command line, (2) Run tests with XCTest or Swift Testing framework, (3) Manage iOS simulators with simctl, (4) Handle code signing, provisioning profiles, and app distribution, (5) Format or lint Swift code with SwiftFormat/SwiftLint, (6) Work with Swift Package Manager (SPM), (7) Implement Swift 6 concurrency patterns (async/await, actors, Sendable), (8) Create SwiftUI views with MVVM architecture, (9) Set up Core Data or SwiftData persistence, or any other Swift/iOS/macOS development tasks.