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>
- 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>
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>
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>
- 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>
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>
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>
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>