'use client' import Link from 'next/link' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { CheckCircle, XCircle, AlertCircle, FileText, ExternalLink, RotateCcw, Info, Undo2, } from 'lucide-react' import { DestructiveConfirmDialog, useDestructiveConfirm, } from '@/components/ui/destructive-confirm-dialog' import type { ImportResult } from '@/lib/import/types' interface ImportResultStepProps { result: ImportResult onNewImport: () => void onUndo?: (importId: string) => Promise | void } export default function ImportResultStep({ result, onNewImport, onUndo }: ImportResultStepProps) { const { dialogProps, confirm } = useDestructiveConfirm() const handleUndoClick = async () => { if (!result.importId || !onUndo) return const ok = await confirm({ title: 'Ångra hela importen?', description: `Detta raderar ${result.journalEntriesCreated} verifikation${result.journalEntriesCreated === 1 ? '' : 'er'} och rensar ingående balanser från den här importen. Bifogade dokument blir okopplade men finns kvar.`, confirmLabel: 'Ångra import', }) if (!ok) return await onUndo(result.importId) } const hasErrors = result.errors.length > 0 const skipped = result.details?.skippedVouchers // Filter out raw "hoppades över" warnings when we have structured data const otherWarnings = skipped && skipped.total > 0 ? result.warnings.filter((w) => !w.includes('hoppades över')) : result.warnings return (
{/* Success/Failure header */} {result.success ? ( <> Import genomförd ) : ( <> Import misslyckades )} {result.success ? skipped && skipped.total > 0 ? `Din bokföring har importerats. ${result.journalEntriesCreated} verifikationer skapades, ${skipped.total} hoppades över — se detaljer nedan.` : 'Din bokföring har importerats framgångsrikt.' : 'Det uppstod fel under importen. Läs felmeddelanden nedan för att förstå vad som gick snett och hur du kan åtgärda det.'} {/* IB resync notice (prior-year backfill) */} {result.success && result.nextPeriodIBResync && ( Ingående balanser synkades om Eftersom du importerade ett tidigare räkenskapsår uppdaterades ingående balanser för{' '} {result.nextPeriodIBResync.nextPeriodName}{' '} automatiskt (gammal IB makulerad, ny IB skapad från utgående balans). )} {result.success && result.nextPeriodIBResyncSkipped && ( Ingående balanser för {result.nextPeriodIBResyncSkipped.nextPeriodName} kunde inte synkas Nästa räkenskapsår är låst eller stängt. Lås upp perioden och kör importen igen om du vill att ingående balanser ska uppdateras automatiskt. )} {/* Statistics */} {result.success && (
Verifikationer skapade

{result.journalEntriesCreated}

Räkenskapsår
{result.fiscalPeriodId ? ( Skapat ) : ( Befintligt )}
Ingående balanser
{result.openingBalanceEntryId ? ( Importerade ) : ( Inga )}
)} {/* Errors */} {hasErrors && ( Fel ({result.errors.length})
{result.errors.map((error, i) => (
{error}
))}
{!result.success && (

Vad kan du göra?

  • Kontrollera att SIE-filen exporterades korrekt från källsystemet
  • Prova att exportera filen igen och ladda upp på nytt
  • Om felet kvarstår, kontakta support med felmeddelandet ovan
)}
)} {/* Skipped vouchers — structured breakdown */} {skipped && skipped.total > 0 && ( Hoppade över {skipped.total} verifikationer
{skipped.empty > 0 && (

{skipped.empty} tomma verifikationer

Platshållare utan bokföringsrader — vanligt i Fortnox och Visma. Påverkar inte din bokföring.

)} {skipped.unbalanced > 0 && (

{skipped.unbalanced} obalanserade verifikationer

Debet och kredit stämmer inte överens i källsystemet. Saldon har justerats automatiskt.

)} {skipped.singleLine > 0 && (

{skipped.singleLine} enradsverifikationer

Verifikationer med bara en rad (t.ex. periodiseringar). Kräver minst två rader för dubbelbokning.

)} {skipped.unmapped > 0 && (

{skipped.unmapped} verifikationer med ej kopplade konton

Innehåller konton som inte kunde kopplas till din kontoplan.

)}
)} {/* Other warnings (filtered) */} {otherWarnings.length > 0 && ( Varningar ({otherWarnings.length})
{otherWarnings.map((warning, i) => (
{warning}
))}
)} {/* Next steps */} {result.success && ( Nästa steg
1

Granska importerade verifikationer

Kontrollera att allt ser korrekt ut i bokföringslistan

2

Verifiera balanserna

Jämför huvudboken med din tidigare bokföring

3

Fortsätt med ny bokföring

Nu kan du börja lägga till nya transaktioner

)} {/* Actions */}
{result.success && result.importId && onUndo && ( )}
{result.success && ( <> )}
) }