import { z } from 'zod' import type { ResolutionTemplate } from './index.js' import { baseDocument, escapeHtml, formatDateDe, formatEur, renderMembers, } from './shared.js' const schema = z.object({ fiscalYear: z.string().min(4), balanceSheetTotal: z.coerce.number().nonnegative(), netResult: z.coerce.number(), approvalDate: z.string().min(8), notes: z.string().optional(), }) export const annualFinancialsApproval: ResolutionTemplate = { key: 'annual_financials_approval', titleDe: 'Feststellung des Jahresabschlusses', titleEn: 'Annual financial statements approval', descriptionDe: 'Gesellschafterbeschluss zur Feststellung des Jahresabschlusses gemäß § 46 Nr. 1 GmbHG.', schema, fields: [ { key: 'fiscalYear', labelDe: 'Geschäftsjahr', labelEn: 'Fiscal year', type: 'text', required: true }, { key: 'balanceSheetTotal', labelDe: 'Bilanzsumme (EUR)', labelEn: 'Balance sheet total (EUR)', type: 'currency', required: true }, { key: 'netResult', labelDe: 'Jahresergebnis (EUR)', labelEn: 'Net result (EUR)', type: 'currency', required: true }, { key: 'approvalDate', labelDe: 'Datum der Feststellung', labelEn: 'Approval date', type: 'date', required: true }, { key: 'notes', labelDe: 'Anmerkungen', labelEn: 'Notes', type: 'textarea' }, ], render: ({ values, company, members, createdBy, date }) => { const v = schema.parse(values) const profitOrLoss = v.netResult >= 0 ? 'Jahresüberschuss' : 'Jahresfehlbetrag' const body = `

Gesellschafterbeschluss

${escapeHtml(company.name)}${company.registryNo ? `, ${escapeHtml(company.registryNo)}` : ''}
${company.address ? escapeHtml(company.address) + '
' : ''} Beschlussdatum: ${escapeHtml(formatDateDe(date))}

Gegenstand des Beschlusses

Feststellung des Jahresabschlusses für das Geschäftsjahr ${escapeHtml(v.fiscalYear)} gemäß § 46 Nr. 1 GmbHG.

Beschluss

Die Gesellschafter stellen den Jahresabschluss zum ${escapeHtml(formatDateDe(v.approvalDate))} fest mit einer Bilanzsumme von ${escapeHtml(formatEur(v.balanceSheetTotal))} und einem ${escapeHtml(profitOrLoss)} von ${escapeHtml(formatEur(v.netResult))}.

${v.notes ? `

${escapeHtml(v.notes)}

` : ''}

Gesellschafter

${renderMembers(members)}
${escapeHtml(createdBy.displayName)}
${escapeHtml(createdBy.email)}
Ort, Datum
` return baseDocument('Beschluss – Feststellung Jahresabschluss', body) }, }