'use client' import { useState, useEffect } 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 } from 'lucide-react' import { AccountNumber } from '@/components/ui/account-number' import type { SRUExportResult } from '@/lib/reports/sru-export/types' import type { SRUCoverageStats } from '@/lib/reports/sru-export/sru-engine' import { formatCurrency } from '@/lib/utils' export function SRUExportView({ periodId }: { periodId: string }) { const [data, setData] = useState(null) const [coverage, setCoverage] = useState(null) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) useEffect(() => { fetchCoverage() }, []) async function fetchCoverage() { try { const res = await fetch('/api/reports/sru-export/coverage') const result = await res.json() if (result.data) { setCoverage(result.data) } } catch { // Coverage is optional, ignore errors } } const fetchExport = async () => { setLoading(true) setError(null) try { const res = await fetch(`/api/reports/sru-export?period_id=${periodId}&format=json`) const result = await res.json() if (result.error) { setError(result.error) } else { setData(result.data) } } catch { setError('Kunde inte hämta SRU-export') } finally { setLoading(false) } } const downloadSRU = () => { window.open(`/api/reports/sru-export?period_id=${periodId}&format=sru`, '_blank') } const formLabel = data?.formType === 'INK2' ? 'INK2 (Aktiebolag)' : 'NE (Enskild firma)' return (
{/* Info card */} SRU-export

Generera SRU-fil (Standardiserat Räkenskapsutdrag) för elektronisk inlämning till Skatteverket. Blanketttyp bestäms automatiskt utifrån företagsform.

{data && ( )}
{/* Coverage warning */} {coverage && coverage.accountsWithoutSRU > 0 && (

{coverage.accountsWithoutSRU} av {coverage.totalAccounts} konton saknar SRU-kod ({coverage.coveragePercent}% täckning). Konton utan SRU-kod inkluderas inte i exporten.

{coverage.missingAccounts.length <= 5 && (
    {coverage.missingAccounts.map((a) => (
  • {a.accountNumber} — {a.accountName}
  • ))}
)}
)} {error && ( {error} )} {data && ( <> {/* Warnings */} {data.warnings.length > 0 && (
{data.warnings.map((warning, i) => (

{warning}

))}
)} {/* Company + form info */}
{data.companyName || 'Okänt företag'}
{formLabel} {data.fiscalYear.name}
{data.orgNumber && (

Org.nr: {data.orgNumber}

)}
{/* SRU balances table */} SRU-poster {data.balances.length === 0 ? (

Inga poster med belopp att exportera.

) : ( {data.balances.map((b) => ( ))}
SRU-kod Beskrivning Belopp
)}
)} {!data && !loading && !error && ( Klicka "Förhandsgranska" för att se SRU-uppgifter för valt räkenskapsår. )}
) } function SRUBalanceRow({ balance, }: { balance: SRUExportResult['balances'][number] }) { const [expanded, setExpanded] = useState(false) return ( <> balance.accounts.length > 0 && setExpanded(!expanded)} > {balance.sruCode} {balance.description} {balance.accounts.length > 0 && ( ({balance.accounts.length} konton) )} {formatCurrency(balance.amount)} {expanded && balance.accounts.length > 0 && ( {balance.accounts.map((acc) => ( ))}
{acc.accountName} {formatCurrency(acc.amount)}
)} ) }