* feat: implement skattekonto drift detection and alerting - Add skattekonto drift computation logic to compare Skatteverket's saldo with GL 1630 sum. - Implement alerting mechanism for significant drift changes, with throttling to prevent alert spamming. - Introduce database functions to sum GL 1630 entries and list unbooked skattekonto rows. feat: create own account transfer detection - Develop logic to detect transfers between a company's own cash accounts based on counterparty IBAN. - Implement tests to validate detection logic under various scenarios, including matching and non-matching IBANs. feat: establish cash accounts as a first-class entity - Create cash_accounts table to manage routable cash accounts, replacing ad-hoc JSONB structures. - Implement functions for listing, upserting, and managing cash accounts, including primary account designation. feat: enhance GL line reconciliation functionality - Modify get_unlinked_1930_lines RPC to accept any account number for reconciliation, improving flexibility for different currencies. - Update related functions to ensure compatibility with the new cash_accounts structure. feat: capture counterparty IBAN in transactions - Add counterparty_iban column to transactions table to facilitate intra-account transfer detection. - Create index for efficient lookups based on counterparty IBAN. * feat: Enhance cash account handling and reconciliation processes - Updated reconciliation routes to enforce cash account validation for all account numbers, including '1930'. - Improved error handling for unknown cash accounts in reconciliation status and unmatched entries routes. - Changed CashAccountSelector to use sessionStorage instead of localStorage for better data privacy. - Fixed mapping for employer payroll taxes to route to the correct account (2730 instead of 2731). - Added safety checks for company IDs in the guessCounterAccount function to prevent injection vulnerabilities. - Introduced atomic RPC for setting primary cash accounts to avoid intermediate states during updates. - Seeded default cash accounts for new companies to ensure reconciliation routes are accessible from day one. - Updated email notifications for drift detection to avoid exposing sensitive financial data. - Enhanced bank reconciliation logic to handle multi-currency transactions correctly. - Renamed and updated tests to reflect changes in the underlying RPCs and ensure accurate coverage. - Migrated existing cash account rules to correct mappings in compliance with Swedish accounting standards.
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import { createClient } from '@/lib/supabase/server'
|
|
import { NextResponse } from 'next/server'
|
|
import { getActiveCompanyId } from '@/lib/company/context'
|
|
import { listForCompany } from '@/lib/cash-accounts/service'
|
|
|
|
/**
|
|
* GET /api/cash-accounts
|
|
*
|
|
* Returns the active company's cash accounts (cash_accounts table). Used by the
|
|
* reconciliation CashAccountSelector (Item 5) and any other surface that needs
|
|
* the canonical list of routable cash accounts. UI panels that just display PSD2
|
|
* connection state may still read bank_connections.accounts_data until that
|
|
* column is dropped in a follow-up migration.
|
|
*
|
|
* Query params:
|
|
* - enabled_only=true → only accounts with enabled=true (default returns all)
|
|
*/
|
|
export async function GET(request: Request) {
|
|
const supabase = await createClient()
|
|
const { data: { user } } = await supabase.auth.getUser()
|
|
if (!user) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
|
|
|
|
const companyId = await getActiveCompanyId(supabase, user.id)
|
|
if (!companyId) {
|
|
return NextResponse.json({ error: 'No company context' }, { status: 400 })
|
|
}
|
|
|
|
const url = new URL(request.url)
|
|
const enabledOnly = url.searchParams.get('enabled_only') === 'true'
|
|
|
|
const accounts = await listForCompany(supabase, companyId, { enabledOnly })
|
|
return NextResponse.json({ data: accounts })
|
|
}
|