2.5 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Commands
# Build
dotnet build
# Run (dev server at http://localhost:5225)
cd Schaad.Accounting.UI && dotnet run
# Publish
dotnet publish -c Release
There are no automated tests or lint commands.
Architecture
AccountingNext is a Swiss personal accounting app built with ASP.NET Core 9 + Blazor (interactive server-side rendering) and Microsoft Fluent UI. Data is stored as XML files on disk — no database.
Projects
| Project | Role |
|---|---|
Schaad.Accounting.UI |
Blazor web app — pages, dialogs, layout |
Schaad.Accounting.Services |
Business logic — balances, FX conversion, file import, charts |
Schaad.Accounting.Db |
Repository layer — XML serialization/deserialization |
Schaad.Accounting.Common |
Shared models, DTOs, interfaces |
Data flow
Blazor Pages/Dialogs (UI)
→ Services (ViewService, FileService, ChartService)
→ Repositories (AccountRepository, TransactionRepository, …)
→ XML files: {DataPath}/{year}/{mandator}/Data/*.xml
Data is multi-year and multi-mandator. Each combination has its own directory under DataPath (configured in appsettings.Development.json). When a new year is opened, the previous year's data is copied as the starting point.
Key services
- ViewService — aggregates account balances, applies FX rates, builds datasets for the UI
- FileService — imports bank statements (MT940, CAMT053 via external
Schaad.Finance.dll), parses PDFs, manages backups - ChartService — produces data for Plotly charts (assets, spendings over time)
- SettingsService — manages the active year, mandator, and file paths
UI structure
Pages live in Schaad.Accounting.UI/Components/Pages/. Each page typically has a companion Dialogs/ subfolder with Fluent UI dialog components for CRUD operations. The app is hardcoded to the de-CH culture.
Key external dependencies
Microsoft.FluentUI.AspNetCore.Components— UI components (FluentDataGrid, FluentDialog, etc.)Plotly.Blazor— chartsFreeSpire.PDF— PDF parsing for bank statement importsSchaad.Finance.dll/Schaad.Finance.Api.dll— proprietary DLLs for MT940/CAMT053 parsing and FX rate lookups (FixerIo API key inappsettings.Development.json)
Domain constants
ClassIds in Schaad.Accounting.Common defines the Swiss accounting chart-of-accounts classes: Activa=1000, Passiva=2000, Income=3000, Expenses=4000.