AccountingNext/CLAUDE.md
Claudio Schaad a16aedcfd8
Display transactions and balances in account currency
- Transaction amounts, totals, and sidebar badges in the Transactions page now show in the account's native currency (EUR, USD, etc.) instead of always CHF
- Fixed FX conversion in SaveTransaction/GetTransaction to fire when either the origin or target account is a foreign-currency account, not only the origin side

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 16:08:01 +02:00

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 — charts
  • FreeSpire.PDF — PDF parsing for bank statement imports
  • Schaad.Finance.dll / Schaad.Finance.Api.dll — proprietary DLLs for MT940/CAMT053 parsing and FX rate lookups (FixerIo API key in appsettings.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.