'use client' import { useState } from 'react' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { z } from 'zod' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { InfoTooltip } from '@/components/ui/info-tooltip' import { Loader2, ArrowLeft, Landmark, SkipForward, ChevronDown, ChevronUp } from 'lucide-react' import { BankSelector, type Bank } from '@/components/banking/BankSelector' const manualBankSchema = z.object({ bank_name: z.string().optional(), clearing_number: z.string().optional(), account_number: z.string().optional(), iban: z.string().optional(), bic: z.string().optional(), }) type ManualBankData = z.infer interface Step6Props { initialData?: Partial onComplete: (data?: ManualBankData) => void onBack: () => void onSkip: () => void isSaving: boolean } export default function Step6ConnectBank({ initialData, onBack, onSkip, onComplete, isSaving, }: Step6Props) { const [isConnecting, setIsConnecting] = useState(false) const [error, setError] = useState(null) const [showManual, setShowManual] = useState(false) const { register, handleSubmit, } = useForm({ resolver: zodResolver(manualBankSchema), defaultValues: { bank_name: initialData?.bank_name || '', clearing_number: initialData?.clearing_number || '', account_number: initialData?.account_number || '', iban: initialData?.iban || '', bic: initialData?.bic || '', }, }) const handleBankSelect = async (bank: Bank) => { setIsConnecting(true) setError(null) try { const response = await fetch('/api/banking/connect', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ aspsp_name: bank.name, aspsp_country: bank.country, }), }) const data = await response.json() if (!response.ok) { throw new Error(data.error || 'Kunde inte ansluta bank') } window.location.href = data.authorization_url } catch (err) { setError(err instanceof Error ? err.message : 'Ett fel uppstod') setIsConnecting(false) } } const onManualSubmit = (data: ManualBankData) => { onComplete(data) } return (

Anslut din bank

Koppla din bank för att automatiskt importera transaktioner via PSD2.

Välj din bank Vi använder säker bankintegration (PSD2) för att hämta dina transaktioner. Vi kan aldrig flytta pengar eller göra ändringar. {error && (
{error}
)}

Säker anslutning

  • • Krypterad anslutning via PSD2
  • • Vi kan endast läsa transaktioner
  • • Du kan koppla bort när som helst
  • • Samtycke gäller i 90 dagar
{/* Collapsible manual bank details */}
{showManual && (

Dessa uppgifter visas på dina fakturor så att kunder kan betala dig.

Vad är clearingnummer?

De första 4-5 siffrorna i ditt kontonummer som identifierar din bank.

  • Nordea: 3300
  • SEB: 5000
  • Swedbank: 8XXX
  • Handelsbanken: 6XXX
  • Avanza: 9550/9551
} side="top" >

Internationella betalningar (valfritt)

Vad är IBAN?

Internationellt bankkontonummer. Svenska IBAN börjar med SE och har 24 tecken totalt.

} side="right" >

Vad är BIC/SWIFT?

Bankens internationella id-kod. Används tillsammans med IBAN för utlandsbetalningar.

} side="right" >
)}
) }