'use client' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { formatCurrency } from '@/lib/utils' import { Building2, Calendar, FileText, CheckCircle, AlertCircle, XCircle, ArrowRight, BarChart3, } from 'lucide-react' import type { ImportPreview, ParseIssue } from '@/lib/import/types' interface SIEPreviewStepProps { preview: ImportPreview issues: ParseIssue[] missingAccounts: { number: string; name: string }[] onCreateAccounts: () => Promise isCreatingAccounts: boolean onContinue: () => void onBack: () => void } export default function SIEPreviewStep({ preview, issues, missingAccounts, onCreateAccounts, isCreatingAccounts, onContinue, onBack, }: SIEPreviewStepProps) { const errors = issues.filter((i) => i.severity === 'error') const warnings = issues.filter((i) => i.severity === 'warning') // Only block on actual parsing errors, not unmapped accounts // (users need to proceed to mapping step to fix unmapped accounts) const hasBlockingErrors = errors.length > 0 return (
{/* Company info */} Företagsinformation Information från SIE-filen

Företagsnamn

{preview.companyName || 'Ej angivet'}

Organisationsnummer

{preview.orgNumber || 'Ej angivet'}

{/* Fiscal year */} Räkenskapsår

Start

{preview.fiscalYearStart ? new Date(preview.fiscalYearStart).toLocaleDateString('sv-SE') : 'Okänt'}

Slut

{preview.fiscalYearEnd ? new Date(preview.fiscalYearEnd).toLocaleDateString('sv-SE') : 'Okänt'}

{/* Statistics */}
Konton

{preview.accountCount}

Verifikationer

{preview.voucherCount}

Transaktionsrader

{preview.transactionLineCount}

IB Summa

{formatCurrency(preview.openingBalanceTotal)}

{/* Trial balance check */} {preview.trialBalance.isBalanced ? ( ) : ( )} Balansräkning (IB)

Total debet

{formatCurrency(preview.trialBalance.totalDebit)}

Total kredit

{formatCurrency(preview.trialBalance.totalCredit)}

Status

{preview.trialBalance.isBalanced ? ( Balanserar ) : ( Diff: {formatCurrency(preview.trialBalance.totalDebit - preview.trialBalance.totalCredit)} )}
{/* Mapping status */} 0 ? 'border-destructive/50' : preview.mappingStatus.lowConfidence > 0 ? 'border-warning/50' : 'border-success/50' } > {preview.mappingStatus.unmapped > 0 ? ( ) : preview.mappingStatus.lowConfidence > 0 ? ( ) : ( )} Kontomappning Hur väl kunde kontona i filen matchas mot din kontoplan

Totalt

{preview.mappingStatus.total}

Mappade

{preview.mappingStatus.mapped}

Ej mappade

0 ? 'text-destructive' : ''}`}> {preview.mappingStatus.unmapped}

Osäkra

0 ? 'text-warning' : ''}`}> {preview.mappingStatus.lowConfidence}

{/* Create missing accounts */} {missingAccounts.length > 0 && ( Skapa saknade konton {missingAccounts.length} konton från SIE-filen finns inte i din kontoplan. Du kan skapa dem automatiskt för att behålla samma kontostruktur som i ditt gamla system.
{missingAccounts.slice(0, 10).map((acc) => (
{acc.number} {acc.name}
))} {missingAccounts.length > 10 && (
... och {missingAccounts.length - 10} till
)}
)} {/* Issues */} {(errors.length > 0 || warnings.length > 0) && ( 0 ? 'border-destructive/50' : 'border-warning/50'}> {errors.length > 0 ? ( ) : ( )} {errors.length > 0 ? 'Fel' : 'Varningar'}
{errors.map((issue, i) => (
Rad {issue.line}: {issue.message}
))} {warnings.map((issue, i) => (
Rad {issue.line}: {issue.message}
))}
)} {/* Actions */}
) }