Commit graph

16 commits

Author SHA1 Message Date
a1c2af6027 Close audit issues (books-ley, books-0xk, books-cws, books-k95)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 21:35:40 +01:00
8e05171b66 Full product audit: fix security, compliance, UX, and wire broken features
Security (Phase 1):
- Add authentication middleware on /graphql endpoint
- Filter company queries by user access (prevent IDOR)
- Add role-based authorization on mutations (owner/accountant)
- Reduce API key cache TTL from 24h to 5 minutes
- Hide exception details in production GraphQL errors
- Fix RBAC in frontend companyStore (was hardcoded)

Wiring broken features (Phase 2):
- Wire Kassekladde submit/void/copy to GraphQL mutations
- Wire Kontooversigt account creation to createAccount mutation
- Wire Settings save to updateCompany mutation
- Wire CreateFiscalYearModal and CloseFiscalYearWizard to mutations
- Replace Momsindberetning mock data with real useVatReport query
- Remove Dashboard hardcoded percentages and fake VAT deadline
- Fix Kreditnotaer invoice selector to use real data
- Fix mutation retry from 1 to 0 (prevent duplicate operations)

Accounting compliance (Phase 3):
- Add balanced entry validation (debit==credit) in JournalEntryDraftAggregate
- Add fiscal year boundary enforcement (status, date range checks)
- Add PostedAt timestamp to posted events (Bogføringsloven §7)
- Add account number uniqueness check within company
- Add fiscal year overlap and gap checks
- Add sequential invoice auto-numbering
- Fix InvoiceLine VAT rate to use canonical VatCodes
- Fix SAF-T account type mapping (financial → Expense)
- Add DraftLine validation (cannot have both debit and credit > 0)

UX improvements (Phase 4):
- Fix Danish character encoding across 15+ files (ø, æ, å)
- Deploy DemoDataDisclaimer on pages with mock/incomplete data
- Adopt PageHeader component universally across all pages
- Standardize active/inactive filtering to Switch pattern
- Fix dead buttons in Header (Help, Notifications)
- Remove hardcoded mock data from Settings
- Fix Sidebar controlled state and Kontooversigt navigation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 21:35:26 +01:00
7d819ace28 Remove mock data and connect frontend to backend GraphQL
- CompanySwitcher: Use useMyCompanies() hook instead of mockCompanies
- FiscalYearSelector: Use useFiscalYears() hook instead of mockFiscalYears
- Kontooversigt: Use useAccounts() and useAccountBalances() hooks
- Kassekladde: Use useActiveAccounts() and useJournalEntryDrafts() hooks
- Bankafstemning: Use useActiveBankConnections() and usePendingBankTransactions()
- Dashboard: Calculate metrics from useAccountBalances(), useInvoices(), useVatReport()

All components now show loading skeletons and empty states appropriately.

Closes books-ljg

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 22:42:10 +01:00
116b54ee0e Close books-0rs (whitescreen fix)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 22:24:40 +01:00
1f75c5d791 Add all backend domain, commands, repositories, and tests
This commit includes all previously untracked backend files:

Domain:
- Accounts, Attachments, BankConnections, Customers
- FiscalYears, Invoices, JournalEntryDrafts
- Orders, Products, UserAccess

Commands & Handlers:
- Full CQRS command structure for all domains

Repositories:
- PostgreSQL repositories for all read models
- Bank transaction and ledger repositories

GraphQL:
- Input types, scalars, and types for all entities
- Mutations and queries

Infrastructure:
- Banking integration (Enable Banking client)
- File storage, Invoicing, Reporting, SAF-T export
- Database migrations (003-029)

Tests:
- Integration tests for GraphQL endpoints
- Domain tests
- Invoicing and reporting tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 22:19:42 +01:00
b552a6e29f Close books-cdf (skipped - vague description)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 17:45:10 +01:00
1d0ea32452 Close tasks books-8lo, books-ced, books-1rp
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:47:57 +01:00
8bf3141ba3 Improve Kontooversigt UX and add missing CVR validation
UX improvements (books-8lo):
- Use PageHeader component for consistent header with breadcrumbs
- Add responsive mobile breakpoints
- Improve accessibility with aria-labels
- Better information hierarchy

Fixes (books-1rp):
- Add missing validateCVRModulus11 function to formatters
- Fixes TypeScript errors in Kunder.tsx and CompanySetupWizard.tsx

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:47:45 +01:00
49971b3265 Close tasks books-wzq and books-byl
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:40:50 +01:00
b450c94a7e Add demo data disclaimers to Dashboard and Loenforstaelse pages
Uses the DemoDataDisclaimer component to inform users that data
shown on these pages is for demonstration purposes only.

Closes books-wzq

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:40:40 +01:00
846711de04 Close completed tasks (books-hzt, books-5tg)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:37:16 +01:00
9b5ed27776 Fix encoding bug and add role helpers for user management
- Add decodeHtmlEntities function to formatters.ts for handling HTML entity decoding
- Add CompanyRole type and role helper functions (getRoleLabel, getRoleColor)
- Add useActiveCompanyRole hook for getting current user's company role
- Add Ledger.Core and QuestPDF project references to backend
- Add additional fields to CompanyReadModelDto

Closes books-hzt

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:36:27 +01:00
b60f26a449 Close task books-8ea: Remove username from profile icon
The username text next to the profile icon in the header was already
removed in a previous commit.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:24:27 +01:00
f1bbccbf52 Remove username text from header profile icon
The user's name/email is no longer displayed next to the profile avatar
in the header. The avatar dropdown menu remains functional for accessing
user settings and logout.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:22:44 +01:00
f826794990 Remove Hurtig Bogforing feature
Delete the quick booking page, components, and store:
- HurtigBogforing.tsx page
- simple-booking/ components (AccountQuickPicker, BankTransactionCard, QuickBookModal, SplitBookModal)
- simpleBookingStore.ts

Remove related navigation and shortcuts:
- Route from routes.tsx
- Menu item from Sidebar
- goToHurtigBogforing shortcut and navigation route
- Command palette icon reference

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:18:05 +01:00
1bacbea33b Rename app title from Bogfoering to Books in sidebar
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:12:35 +01:00