Professional financial statement generator for German accounting standards (SKR04). Transform your Excel General Ledger into interactive Balance Sheet and P&L reports for instant error detection (without Buhl WISO / Lexware / DATEV subscription or having to wait to hear back from tax consultants).
- Instant Excel Import β Upload DATEV-formatted Excel ledgers (see Hauptbuch.xlsx to get started) and get instant processing
- Dual Financial Views β Interactive Bilanz (Balance Sheet) and GuV (P&L Statement) with hierarchical drilling
- Complete Account List β Summe/Salden tab shows all accounts with balances and clickable details
- Smart Account Mapping β Visual account assignment tool
- Real-time Balance Validation β Automatic detection of discrepancies
- Expandable Hierarchies β Collapse/expand any or all detail levels
- Complete Journal View β Browse full transaction records with date, account, and amount details
- Print-Ready Export β Generate PDF-ready reports optimized for professional presentation
- Custom Account Assignment β Override defaults with user-defined mappings
- Unassigned Account Alerts β Clear warnings for accounts not matching standard SKR04 structure
- Account Details Panel β Click any account to view full transaction history and details
- German Localization β All formatting follows DE standards (EUR currency, date format, decimal points)
- Responsive Design β Works seamlessly on desktop and tablet devices
Choose one of the two simple ways below. For most users, downloading a prebuilt installer is the easiest and recommended option.
-
Go to the project's GitHub Releases page:
https://github.com/paprika27/Bilanztool-SKR04/releases -
Download the installer for your platform from the latest Release assets.
-
Windows: download the
*.exe(NSIS) installer and run it β follow the on-screen installer steps.- If an
*.msiis preferred you can also use that. - If a
*-portable.exeis preferred you can use that.
- If an
-
macOS: download the
*.dmg, open it, and drag the app into/Applications.- Important: the macOS app may be unsigned (no Apple Developer key configured in CI). If macOS refuses to open it, right-click the app and choose Open, or run the quarantine removal command below.
-
Linux (Debian/Ubuntu): download the
*.debpackage and either double-click it in your file manager or run:
sudo dpkg -i BilanzTool_SKR04_<version>_amd64.deb
sudo apt-get install -f- Docker (alternative for advanced / server users): a prebuilt image is published to GitHub Container Registry (
ghcr.io/paprika27/bilanztool-skr04:latest). Pull and run with:
docker pull ghcr.io/paprika27/bilanztool-skr04:latest
docker run --rm -p 3000:3000 ghcr.io/paprika27/bilanztool-skr04:latest# Right-click the app and choose Open, or use this terminal command:
sudo xattr -r -d com.apple.quarantine /Applications/BilanzTool\ SKR04.appIf you want to run the development server or build the web UI yourself, use Node.js. This is optional β regular users do not need to do this.
- Install Node.js 18+ (download).
- Clone the repo and install dependencies:
git clone https://github.com/paprika27/Bilanztool-SKR04.git
cd Bilanztool-SKR04
npm install- Start the development server:
npm run dev- Open your browser at
http://localhost:3000(or the URL shown in the terminal).
- Click the "Datei wΓ€hlen" button on the welcome screen
- Select your Excel file (SKR04 format, feel free to use Hauptbuch.xlsx as a template)
- Wait for processing (typically <2 seconds)
- AKTIVA (Left) and PASSIVA (Right) columns show your asset and liability structure
- Green badge shows "Bilanz ausgeglichen" (balanced) or displays the discrepancy amount
- Click any row to expand/collapse that section or view detailed accounts
- Switch to GuV tab to see revenue and expense breakdown
- Same expansion/collapse functionality for detailed drilling
- Switch to Summe/Salden tab to see all accounts with their balances in a sortable list
- Click any account row to view its full transaction details in the side panel
- Useful for quick account lookup and transaction analysis without the hierarchical structure
- If yellow warning box appears, accounts couldn't be auto-mapped and may thus be unbalanced
- Switch to Kontenplan tab to assign these accounts to proper categories or fix in your excel ledger (usually more likely)
- Changes to mapping immediately recalculate all reports
- Click "Export / Druck" to trigger browser print dialog
- Tables automatically expand for complete PDF export
- Optimized layout for A4 paper with sometimes proper page breaks
- Switch to Journal tab to audit individual transactions
- Browse full ledger with dates, accounts, and amounts
- Shows first 500 transactions (full data available in source Excel)
Bilanztool-SKR04/
βββ components/
β βββ AccountDetails.tsx # Transaction detail panel for selected account
β βββ AccountManager.tsx # UI for custom account mapping
β βββ FileUpload.tsx # File input and validation component
β βββ ReportTable.tsx # Hierarchical expandable table renderer
βββ services/
β βββ excelService.ts # XLSX parsing and account extraction
β βββ skr04Service.ts # SKR04 mapping and financial report generation
βββ App.tsx # Main application layout and state management
βββ types.ts # TypeScript interfaces for financial data
βββ index.tsx # React DOM entry point
βββ vite.config.ts # Vite build configuration
βββ package.json # Dependencies and scripts
| Layer | Technology | Version |
|---|---|---|
| UI Framework | React | 19.2+ |
| Language | TypeScript | 5.8+ |
| Build Tool | Vite | 6.2+ |
| Excel Processing | XLSX | 0.18+ |
| Icons | Lucide React | 0.556+ |
| Styling | Tailwind CSS | 3.x |
- Extracts account master data and transaction journal from DATEV compatible Excel ledger
- Calculates running balances per account
- Handles German date formats and decimal conventions
- Maps parsed accounts to German SKR04 standard chart of accounts
- Categories: AKTIVA, PASSIVA, AUFWAND (expense), ERTRAG (revenue)
- Builds hierarchical reporting structure with totals
- Validates balance sheet equilibrium
- Supports custom user overrides via mapping tool
- Hierarchical table with state-managed expansion
- Drill-down from totals β subtotals β detail accounts β transactions
- Dynamic recalculation when mappings change
- Print mode forces all expansions for complete export
The app requires no environment configuration. All processing happens client-side.
npm run buildOutputs optimized bundle to dist/ directory. Ready to deploy to any static hosting (Vercel, Netlify, etc.).
npm run preview| Issue | Solution |
|---|---|
Empty page on npm run dev |
Ensure index.tsx script tag is in index.html |
| Excel won't upload | File must be DATEV SKRIB04 format with standard column headers. Copy your data into the provided Hauptbuch.xlsx template and try with that. |
| Bilanz not balanced | Check yellow warning box for unassigned accounts; map them in Kontenplan tab or fix your ledger (more likely) |
| Wrong account categories | Use Kontenplan tab to override auto-mapping for specific accounts |
| Print looks wrong | Use "Export / Druck" button which properly expands all sections |
| Sums seem weird | Throw your ledger at a (private) LLM to see if it can help. |
This tool implements the German Skontrorahmen 04 (SKR04) chart of accounts structure:
- 0xxxx β Fixed assets
- 1xxxx β Current assets
- 2xxxx β Equity
- 3xxxx β Liabilities
- 4xxxx β Revenue
- 5xxxx β Cost of sales
- 6xxxx β Operating expenses
- 7xxxx β Other income/expenses
- 8xxxx β Tax and profit allocation
- 9xxxx β Internal/clearing accounts
Found a bug or have a feature request? Feel free to open an issue or submit a pull request!
This repository builds desktop installers (Windows .exe, Linux .deb, macOS .dmg) and a Docker image via GitHub Actions. The CI workflows are defined in .github/workflows/rust.yml (builds the native bundles and creates the Release) and .github/workflows/publish-ghcr.yml (builds & pushes a Docker image to GitHub Container Registry).
This repository builds desktop installers and several distributable bundle types via GitHub Actions. The relevant CI workflows are:
.github/workflows/rust.ymlβ builds native bundles on Linux, Windows and macOS runners and creates the GitHub Release (collects artifacts from the build matrix)..github/workflows/publish-ghcr.ymlβ builds and pushes the Docker image to GitHub Container Registry (GHCR).
CI-produced artifacts and recommended usage:
- Docker (GHCR):
ghcr.io/<owner>/bilanztool-skr04:latest(seepublish-ghcr.yml). Pull & run:
docker pull ghcr.io/paprika27/bilanztool-skr04:latest
docker run --rm -p 3000:3000 ghcr.io/paprika27/bilanztool-skr04:latest-
Windows
.exe(NSIS setup): Standard installer for end users β run the installer and follow prompts..msi: Enterprise-friendly installer suitable for automated deployments via SCCM or other management tools.*-portable.exe(portable): Standalone executable that runs without installation β place it in a folder and run directly.
-
macOS
.dmg: Standard disk image installer β open and drag the app to/Applications..app.tar.gz: A compressed.appbundle (useful for advanced/manual installation or advanced users who want the raw app bundle). GitHub Release contains a compressed.appbecause Releases do not accept folders.- Note: I do NOT have an Apple Developer signing key configured in CI. Unsigned
.dmg/.appbundles may be blocked by Gatekeeper. If macOS prevents opening the app, the user can right-click the app and choose Open, or run the quarantine removal workaround.
-
Linux
.deb: Debian/Ubuntu installer β install viadpkg -ior double-click in a file manager..rpm: RPM package for Fedora/Red Hat/SUSE family distributions..AppImage: A portable, distro-agnostic single-file executable great for many desktop Linux users.
All of the above artifacts are attached to the GitHub Release by the create-release job in rust.yml (the job uploads everything found under the release-assets folder). The release body generated by CI includes a simple table describing each file type and recommended audience.
Example install / run commands (copy-paste):
# Debian/Ubuntu
sudo dpkg -i BilanzTool_SKR04_<version>_amd64.deb
sudo apt-get install -f
# Run portable Windows exe (on Windows PowerShell / cmd just run the .exe)
# Docker (Linux/any):
docker run --rm -p 3000:3000 ghcr.io/paprika27/bilanztool-skr04:latestmacOS Gatekeeper workaround (if app is blocked):
# Right-click the app and choose Open, or use:
sudo xattr -r -d com.apple.quarantine /Applications/BilanzTool\ SKR04.appWhere to get releases
- Visit the project's Releases page on GitHub:
https://github.com/paprika27/Bilanztool-SKR04/releasesand download the platform-appropriate file(s) listed in the assets.
Vibe coded by Gemini 3 Pro, enhanced by Claude Haiku 4.5 (which also wrote this Readme).
- Quick Overview: Use the "Alle ausklappen / einklappen" toggle in the header to show/hide all detail levels instantly
- Account Drill-Down: Click any account in the hierarchical table to view its complete transaction history
- Print Strategy: Use browser's print settings (margins, scaling) to adjust PDF output before saving
- Data Privacy: All processing happens locally in your browser β no data is sent to any server
- Spreadsheet Format: Ensure your Excel export matches DATEV standard format before uploading
For questions or issues specific to SKR04 accounting standards, consult:
- DATEV Documentation
- German Chamber of Commerce accounting guidelines
Built with β€οΈ for German business professionals