'use client' import { useState } from 'react' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Download, AlertCircle, Info } from 'lucide-react' import { AccountNumber } from '@/components/ui/account-number' import { formatCurrency } from '@/lib/utils' import type { INK2Declaration, INK2SRUCode } from '@/lib/reports/ink2/types' import { INK2_RUTA_LABELS, INK2_ASSET_CODES, INK2_EQUITY_LIABILITY_CODES, INK2_INCOME_STATEMENT_CODES, } from '@/lib/reports/ink2/types' export function INK2DeclarationView({ periodId }: { periodId: string }) { const [data, setData] = useState(null) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const fetchDeclaration = async () => { setLoading(true) setError(null) try { const res = await fetch(`/api/reports/ink2?period_id=${periodId}`) const result = await res.json() if (result.error) { setError(result.error) } else { setData(result.data) } } catch { setError('Kunde inte hämta INK2-deklaration') } finally { setLoading(false) } } const downloadSRU = () => { window.open(`/api/reports/ink2?period_id=${periodId}&format=sru`, '_blank') } return (
{/* Info card */} INK2 (Aktiebolag)

INK2 visar det bokföringsmässiga resultatet baserat på din bokföring. Skattemässiga justeringar (ej avdragsgilla kostnader, periodiseringsfonder m.m.) hanteras av din revisor/redovisningskonsult.

{data && ( )}
{error && ( {error} )} {data && ( <> {/* Warnings */} {data.warnings.length > 0 && (
{data.warnings.map((warning, i) => (

{warning}

))}
)} {/* Company info */}
{data.companyInfo.companyName} {data.fiscalYear.name}
{data.companyInfo.orgNumber && (

Org.nr: {data.companyInfo.orgNumber}

)}
{/* Assets section */} Tillgångar {INK2_ASSET_CODES.map((code) => ( ))}
Summa tillgångar {formatCurrency(data.totals.totalAssets)}
{/* Equity & Liabilities section */} Eget kapital och skulder {INK2_EQUITY_LIABILITY_CODES.map((code) => ( ))}
Summa eget kapital och skulder {formatCurrency(data.totals.totalEquityLiabilities)}
{/* Income Statement section */} Resultaträkning {INK2_INCOME_STATEMENT_CODES.map((code) => { const isExpense = code !== '7310' && code !== '7370' && code !== '7380' return ( ) })}
Rörelseresultat = 0 ? 'text-success' : 'text-destructive'}`}> {formatCurrency(data.totals.operatingResult)}
Resultat efter finansiella poster = 0 ? 'text-success' : 'text-destructive'}`}> {formatCurrency(data.totals.resultAfterFinancial)}
)} {!data && !loading && !error && ( Klicka "Hämta INK2" för att generera deklarationsunderlaget. )}
) } function INK2DeclarationRow({ code, label, amount, accounts, isExpense, }: { code: INK2SRUCode label: string amount: number accounts: Array<{ accountNumber: string; accountName: string; amount: number }> isExpense?: boolean }) { const [expanded, setExpanded] = useState(false) if (amount === 0 && accounts.length === 0) return null return ( <> accounts.length > 0 && setExpanded(!expanded)} > {code} {label} {accounts.length > 0 && ( ({accounts.length} konton) )} {isExpense && amount > 0 ? '-' : ''}{formatCurrency(Math.abs(amount))} {expanded && accounts.length > 0 && ( {accounts.map((acc) => ( ))}
{acc.accountName} {isExpense && acc.amount > 0 ? '-' : ''}{formatCurrency(Math.abs(acc.amount))}
)} ) }