'use client' /** * Kombinierte einfache Steps: Geschäftsführer (3), Kapital (4), Notar (5), SHA (6). * Jeder Sub-Step ist eine simple Form. */ import type { FoundingWizardState, GFContract } from '@/lib/sdk/founding/types' interface PropsBase { state: FoundingWizardState update: (k: K, v: FoundingWizardState[K]) => void } export function StepGFAssignment({ state, update }: PropsBase) { const founders = state.gesellschafter const toggleGF = (id: string, val: boolean) => { update('gesellschafter', state.gesellschafter.map(g => g.id === id ? { ...g, is_geschaeftsfuehrer: val } : g)) } const setRole = (id: string, role: string) => { update('gesellschafter', state.gesellschafter.map(g => g.id === id ? { ...g, internal_role: role } : g)) } return (

Wähle, welche Gesellschafter zu Geschäftsführern bestellt werden sollen. Standardmäßig sind alle Gründer auch GF.

{founders.length === 0 ? (

Bitte zuerst Gesellschafter in Step 2 anlegen.

) : ( {founders.map(g => ( ))}
Gesellschafter Interne Rolle (CEO, CTO, ...) GF?
{g.name} setRole(g.id, e.target.value)} className="px-2 py-1 border rounded w-48" placeholder="CEO, CTO, COO..." /> toggleGF(g.id, e.target.checked)} />
)}
) } export function StepCapital({ state, update }: PropsBase) { const c = state.capital return (
update('capital', { ...c, stammkapital_eur: parseInt(e.target.value) || 0 })} className="w-full px-3 py-2 border rounded-lg" />

GmbH: mind. 25.000 €, UG: ab 1 €

update('capital', { ...c, einlage_quote_initial_pct: parseInt(e.target.value) || 50 })} className="w-full px-3 py-2 border rounded-lg" />

Mind. 25% gem. § 7 Abs. 2 GmbHG, Standard 50%

update('capital', { ...c, has_sacheinlage: e.target.checked })} />
) } export function StepNotar({ state, update }: PropsBase) { const n = state.notar return (
update('notar', { ...n, notary_name: e.target.value })} placeholder="z.B. Dr. Müller" className="w-full px-3 py-2 border rounded-lg" />
update('notar', { ...n, notary_place: e.target.value })} placeholder="z.B. Stuttgart" className="w-full px-3 py-2 border rounded-lg" />
update('notar', { ...n, notary_address: e.target.value })} className="w-full px-3 py-2 border rounded-lg" />
update('notar', { ...n, notarial_date: e.target.value })} className="w-full px-3 py-2 border rounded-lg" />
Hinweis: Die URNr. wird vom Notar beim Beurkundungstermin vergeben. Du kannst die generierte HRB-Anmeldung als Vorbereitungsdokument zum Termin mitnehmen.
) } export function StepSHAConfig({ state, update }: PropsBase) { const s = state.sha const updateField = (k: K, v: typeof s[K]) => update('sha', { ...s, [k]: v }) return (
updateField('has_sha', e.target.checked)} />
{s.has_sha && (
updateField('vesting_months', parseInt(e.target.value) || 48)} className="w-full px-3 py-2 border rounded-lg" />
updateField('cliff_months', parseInt(e.target.value) || 12)} className="w-full px-3 py-2 border rounded-lg" />
updateField('drag_along_threshold_pct', parseInt(e.target.value) || 75)} className="w-full px-3 py-2 border rounded-lg" />
updateField('reserved_matters_majority_pct', parseInt(e.target.value) || 75)} className="w-full px-3 py-2 border rounded-lg" />
)}
) } interface GFContractStepProps extends PropsBase { gf_list: Array<{ id: string; name: string; internal_role?: string }> upsertGFContract: (c: GFContract) => void } export function StepGFContracts({ state, gf_list, upsertGFContract }: GFContractStepProps) { return (

Für jeden Geschäftsführer wird ein Dienstvertrag generiert. Bitte Eckdaten ausfüllen.

{gf_list.length === 0 ? (

Bitte zuerst in Step 2 mindestens einen GF anlegen.

) : ( gf_list.map(gf => { const c = state.gf_contracts.find(x => x.gesellschafter_id === gf.id) || { gesellschafter_id: gf.id, gross_annual_salary_eur: 84000, has_bonus: false, has_company_car: false, has_bav: false, vacation_days: 30, kuendigungsfrist_gesellschaft_monate: 6, kuendigungsfrist_gf_monate: 3, para_181_release: true, sv_status: 'sozialversicherungsfrei' as const, } const u = (patch: Partial) => upsertGFContract({ ...c, ...patch }) return (

{gf.name} {gf.internal_role && `(${gf.internal_role})`}

u({ gross_annual_salary_eur: parseInt(e.target.value) || 0 })} className="w-full px-2 py-1 border rounded" />
u({ vacation_days: parseInt(e.target.value) || 30 })} className="w-full px-2 py-1 border rounded" />
) }) )}
) }