Luca
03cc250b47
feat(accounting): Layer A backend — chart of accounts, VAT codes, Treuhänder export
Prepares picpeak to feed a Treuhänder's double-entry software once a user
crosses the CHF ~500k threshold (LI PGR Art. 1045), without becoming an ERP.
- migration 129: ledger_accounts (seeded Swiss/LI KMU-Kontenrahmen) +
vat_codes (CH/LI MWST 8.1/2.6/3.8/0 + reverse charge), expense_categories
gains ledger_account_id, app_settings default-account + VAT-map seeds
- ledgerService: full CRUD for accounts + VAT codes + mappings; buildPostings()
turns revenue invoices + incoming invoices + expenses into accrual
Buchungssätze (Dr/Cr + VAT code); generic/banana/bexio CSV export
- routes /api/admin/ledger/* (accounting master gated; export also requires
taxReport); 12 unit tests (posting engine + formatters)
Accrual basis only — payment/bank postings are Layer B. Output is a guideline
(Treuhänder caveat on the UI).
2026-06-11 21:37:48 +02:00
..
2026-06-01 21:52:38 +02:00
2025-07-25 13:50:01 +02:00
2025-07-25 14:09:26 +02:00
2025-07-25 11:09:58 +02:00
2026-05-31 21:35:48 +02:00
2025-08-24 23:19:30 +02:00
2025-07-25 11:09:58 +02:00
2026-05-16 23:56:05 +02:00
2025-08-24 11:11:53 +02:00
2025-08-24 11:11:53 +02:00
2025-08-24 23:19:30 +02:00
2025-08-24 23:19:30 +02:00
2025-08-24 23:19:30 +02:00
2025-09-05 23:44:30 +02:00
2025-09-18 12:42:05 +02:00
2025-09-19 16:39:18 +02:00
2025-10-01 16:00:37 +02:00
2025-10-14 16:27:44 +02:00
2025-10-14 18:29:21 +02:00
2025-11-25 20:23:39 +00:00
2025-11-28 17:54:36 +01:00
2026-01-02 09:56:19 +01:00
2026-01-02 09:56:19 +01:00
2026-01-02 09:56:19 +01:00
2026-01-02 09:56:19 +01:00
2026-01-03 23:35:23 +01:00
2026-01-07 17:10:46 +01:00
2026-01-07 17:10:46 +01:00
2026-01-07 17:10:46 +01:00
2026-01-07 17:10:46 +01:00
2026-01-07 17:10:46 +01:00
2026-01-12 13:20:39 +01:00
2026-01-07 17:10:46 +01:00
2026-01-22 13:54:23 +01:00
2026-01-16 09:39:32 +01:00
2026-01-15 21:00:10 +01:00
2026-01-22 13:54:23 +01:00
2026-01-21 16:47:13 +01:00
2026-01-23 22:01:02 +01:00
2026-01-29 23:09:12 +01:00
2026-02-01 22:44:28 +01:00
2026-02-03 10:08:58 +01:00
2026-02-03 10:08:58 +01:00
2026-02-06 23:26:01 +01:00
2026-02-15 22:43:18 +01:00
2026-02-16 16:23:57 +01:00
2026-02-16 16:23:57 +01:00
2026-05-17 00:42:22 +02:00
2026-03-08 15:36:38 +01:00
2026-03-16 17:22:54 +01:00
2026-03-17 13:04:41 +01:00
2026-04-04 17:43:01 +02:00
2026-04-08 11:42:38 +02:00
2026-04-09 15:10:51 +02:00
2026-04-11 07:48:23 +02:00
2026-04-23 16:49:31 +02:00
2026-04-27 22:38:00 +02:00
2026-04-27 22:38:00 +02:00
2026-04-28 10:07:39 +02:00
2026-04-28 10:08:21 +02:00
2026-05-02 00:04:06 +02:00
2026-05-02 22:56:04 +02:00
2026-05-04 16:58:17 +02:00
2026-05-08 09:57:31 +02:00
2026-05-10 20:36:32 +02:00
2026-05-10 21:46:20 +02:00
2026-05-11 00:05:20 +02:00
2026-05-11 00:05:20 +02:00
2026-05-11 00:05:20 +02:00
2026-05-11 00:05:20 +02:00
2026-05-11 00:05:20 +02:00
2026-05-11 09:59:47 +02:00
2026-05-11 09:59:47 +02:00
2026-05-11 16:17:14 +02:00
2026-05-11 20:56:28 +02:00
2026-05-11 20:56:58 +02:00
2026-05-11 21:08:16 +02:00
2026-05-12 01:25:12 +02:00
2026-05-13 13:47:02 +02:00
2026-05-14 20:10:14 +02:00
2026-05-14 22:30:39 +02:00
2026-05-16 23:56:05 +02:00
2026-05-17 00:50:51 +02:00
2026-05-26 18:49:38 +02:00
2026-05-29 21:54:55 +02:00
2026-06-01 00:31:08 +02:00
2026-06-02 01:28:00 +02:00
2026-06-02 01:36:52 +02:00
2026-06-02 09:00:05 +02:00
2026-06-02 11:33:45 +02:00
2026-06-02 13:00:13 +02:00
2026-06-02 13:47:31 +02:00
2026-06-02 17:24:27 +02:00
2026-06-11 00:17:44 +02:00
2026-06-11 00:04:16 +02:00
2026-06-11 00:38:37 +02:00
2026-06-11 00:04:16 +02:00
2026-06-11 12:24:53 +02:00
2026-06-11 16:57:48 +02:00
2026-06-11 15:54:43 +02:00
2026-06-11 21:37:48 +02:00