Skip to Content
GuidesAdmin SettingsAccounting (Beta)

Accounting Settings

Every Accounting-related toggle and default lives under Settings → Accounting. This tab is the configuration counterpart to the Accounting feature; operational pages (inbox, expenses, tax report) live at /admin/accounting/*, settings live here.

Verify with your Treuhänder before booking real money. The seeded chart of accounts follows the Swiss/LI KMU-Kontenrahmen, the VAT codes assume CH/LI rates, and the default mileage rate (CHF 0.70/km) is a guideline. None of it is legal or tax advice. Your accountant is the source of truth for your jurisdiction.

The tab appears in Settings only when the accounting feature flag is on (Settings → Features → Accounting).

Default rates

Single-line settings that drive the Internal expenses entry form:

SettingDefaultNotes
Mileage rate (CHF / km)0.70Snapshotted onto each mileage expense at entry time — later changes don’t rewrite history
Per-diem rate (CHF / day)0.00Set this to your per-diem amount before logging the first per-diem expense
Require a proof file on every expenseoffWhen on, the expense form refuses to save without an attached receipt / photo

Stored as integer minor units (Rappen) in app_settings; the UI input is in decimal CHF.

VAT registration & reclaim

The single most important block to get right — it drives whether the tax report computes a VAT payable at all, and whether input VAT on costs is reclaimable.

Are you VAT-registered?

Single toggle: VAT-registered (charge output VAT + reclaim input VAT).

  • On — your invoices charge output VAT; supplier input VAT is reclaimable (subject to the reclaim-country list below). The tax report computes vatPayableMinor = output VAT − reclaimable input VAT.
  • Off — small business / under threshold. You charge no VAT; supplier input VAT is a cost (not reclaimable). The tax report reports vatPayableMinor: null and surfaces a “configure VAT registration” warning rather than guessing.

Crossing the registration threshold mid-year needs a manual decision — flip the flag at the right moment, then talk to your Treuhänder about how to declare the split period. picpeak doesn’t model mid-year registration changes natively.

Reclaim countries

When VAT-registered, pick the countries whose input VAT is reclaimable on your tax filing. Typically just your domestic country (CH / LI for a Swiss-based business). Costs from any other country are treated as foreign_vat_non_reclaimable regardless of how they’re categorised on the document.

The picker is multi-select — Cmd/Ctrl-click to add. Stored as an ISO-3166-1 alpha-2 code list in accounting_vat_reclaim_countries.

VAT codes

The full set of VAT codes the system knows about. Seeded with the Swiss/LI MWST codes from migration 129:

CodeNameRateDirectionVAT account
UN81Umsatz Normalsatz 8.1%8.1%output2200
UN26Umsatz reduzierter Satz 2.6%2.6%output2200
UN38Umsatz Beherbergung 3.8%3.8%output2200
UN00Umsatz ohne MWST / befreit0%output
VST81Vorsteuer 8.1%8.1%input1170
VST26Vorsteuer 2.6%2.6%input1170
VST00Keine Vorsteuer0%input
BZBezugsteuer (Reverse Charge) 8.1%8.1%input1170

You can add codes, deactivate codes (instead of deleting — keeps mappings + exports stable for past data), and edit names. Deleting a code that’s been used on documents is refused.

Treatment → code maps

Two mapping settings drive what code gets attached when categorising:

  • Cost tax-treatment → input-VAT code — maps the inbound-document tax-treatment field (domestic / reverse_charge_service / foreign_vat_non_reclaimable / import_goods) to a default input VAT code. Used when you categorise a supplier invoice.
  • Revenue rate → output-VAT code — maps an invoice’s VAT rate (e.g. 8.1) to a default output VAT code (UN81). Used when an invoice is sent; the code is snapshotted onto the invoice (migration 130) so future code-renames don’t retroactively change historical exports.

Both maps live in app_settings (accounting_tax_treatment_vat_code_map, accounting_rate_vat_code_map_output).

Chart of accounts

The full chart of accounts — ledger_accounts rows from migration 129. Seeded with a condensed Swiss/LI KMU-Kontenrahmen suitable for a services / photography SME.

Seeded accounts

NumberNameType
1000Kasseasset
1020Bankasset
1100Forderungen aus Lieferungen und Leistungen (Debitoren)asset
1170Vorsteuer MWSTasset
1300Aktive Rechnungsabgrenzungasset
1500Mobiliar und Einrichtungenasset
1520Büromaschinen, Informatik, Kommunikationasset
2000Verbindlichkeiten aus Lieferungen und Leistungen (Kreditoren)liability
2200Geschuldete MWST (Umsatzsteuer)liability
2300Passive Rechnungsabgrenzungliability
2800Eigenkapitalequity
3000Produktionsertrag (Fotografie)revenue
3200Handelsertragrevenue
3400Dienstleistungsertragrevenue
3940Weiterverrechnete Spesenrevenue
4000Materialaufwandexpense
4400Aufwand für bezogene Dienstleistungenexpense
6000Raumaufwand (Miete)expense
6100Unterhalt und Reparaturenexpense
6200Fahrzeug- und Transportaufwandexpense
6300Sachversicherungen, Abgaben, Gebührenexpense
6500Verwaltungsaufwandexpense
6510Telefon, Internet, Portiexpense
6570Informatikaufwand (Software)expense
6600Werbeaufwandexpense
6640Reise- und Spesenaufwandexpense
6700Sonstiger Betriebsaufwandexpense
6800Abschreibungenexpense

CRUD rules

  • Add any account number — the form validates type (asset / liability / equity / revenue / expense) and uniqueness on the number.
  • Edit name and type. Number is immutable once created (it’s the cross-reference key used by every other mapping).
  • Delete is refused for any account currently referenced by a category mapping, a default-account setting, or a VAT code. Deactivate instead by removing all references first.
  • Default accounts (Debitors 1100, Creditors 2000, output VAT 2200, input VAT 1170, etc.) live in app_settings and can be remapped to a different account number if your accountant uses a different chart layout.

Expense category → ledger account

Each expense category maps to a ledger account. Editable inline from the chart-of-accounts manager:

  • Infrastruktur & Miete → 6000
  • Equipment & Hardware → 6700
  • Software & Lizenzen → 6570
  • Material & Verbrauch → 4000
  • (plus any custom categories — pick an account when you create them)

The mapping is what drives the DebitAccount column in the Treuhänder export for expense rows.

Feature flags vs. Settings

The Accounting settings tab does NOT contain the feature on/off toggles. Those live in Settings → Features:

  • accounting — master (parent of everything below)
  • incomingInvoices — supplier invoice capture
  • incomingMail — IMAP poller
  • expenses — internal expense ledger
  • taxReport — tax report + Treuhänder export

The Accounting settings tab is hidden when accounting is off.

IMAP credentials

IMAP host / user / password for the incoming-mail poller live in Settings → Email, NOT here. They sit alongside the existing SMTP outbound config because they’re the inbound half of the same mail server (typically same host, different port).

Where this maps in the data model

SettingStored inAs
Mileage rateapp_settings.accounting_km_rate_minorInteger minor units
Per-diem rateapp_settings.accounting_per_diem_rate_minorInteger minor units
Require proofapp_settings.accounting_require_proofBoolean
VAT-registeredapp_settings.accounting_vat_registeredBoolean
Reclaim countriesapp_settings.accounting_vat_reclaim_countriesJSON array of ISO-3166-1 alpha-2 codes
Chart of accountsledger_accounts tableOne row per account
VAT codesvat_codes tableOne row per code
Treatment / rate mapsapp_settings.*_vat_code_map*JSON objects
Last updated on