chore: germantax customer project

This commit is contained in:
e2e
2026-07-11 09:05:27 +02:00
commit edcccc2a6c
145 changed files with 9830 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
import { z } from 'zod'
import type { ResolutionTemplate } from './index.js'
import {
baseDocument,
escapeHtml,
formatDateDe,
renderMembers,
} from './shared.js'
const schema = z.object({
dismisseeName: z.string().min(2),
effectiveDate: z.string().min(8),
reason: z.string().optional(),
releaseFromContract: z.coerce.boolean().optional(),
})
export const mdDismissal: ResolutionTemplate = {
key: 'md_dismissal',
titleDe: 'Beschluss zur Abberufung eines Geschäftsführers',
titleEn: 'Managing director dismissal',
descriptionDe:
'Gesellschafterbeschluss zur Abberufung einer Person aus der Geschäftsführung gemäß § 38 GmbHG.',
schema,
fields: [
{ key: 'dismisseeName', labelDe: 'Name des Geschäftsführers', labelEn: 'Director name', type: 'text', required: true },
{ key: 'effectiveDate', labelDe: 'Wirksam ab', labelEn: 'Effective date', type: 'date', required: true },
{ key: 'reason', labelDe: 'Begründung', labelEn: 'Reason', type: 'textarea' },
{ key: 'releaseFromContract', labelDe: 'Anstellungsvertrag wird aufgehoben', labelEn: 'Employment contract terminated', type: 'text' },
],
render: ({ values, company, members, createdBy, date }) => {
const v = schema.parse(values)
const body = `
<h1>Gesellschafterbeschluss</h1>
<div class="meta">
${escapeHtml(company.name)}${company.registryNo ? `, ${escapeHtml(company.registryNo)}` : ''}<br/>
${company.address ? escapeHtml(company.address) + '<br/>' : ''}
Beschlussdatum: ${escapeHtml(formatDateDe(date))}
</div>
<div class="section">
<h2>Gegenstand des Beschlusses</h2>
<p>Abberufung von <strong>${escapeHtml(v.dismisseeName)}</strong> als
Geschäftsführer der Gesellschaft mit Wirkung zum
<strong>${escapeHtml(formatDateDe(v.effectiveDate))}</strong> gemäß § 38 GmbHG.</p>
</div>
<div class="section">
<h2>Beschluss</h2>
<ul>
<li>${escapeHtml(v.dismisseeName)} wird mit Wirkung zum ${escapeHtml(formatDateDe(v.effectiveDate))} aus der Geschäftsführung abberufen.</li>
${v.releaseFromContract ? '<li>Der zugrundeliegende Anstellungsvertrag wird einvernehmlich aufgehoben.</li>' : ''}
<li>Der Geschäftsführer wird angewiesen, alle Geschäftsunterlagen, Schlüssel und Vermögensgegenstände der Gesellschaft unverzüglich zurückzugeben.</li>
<li>Die Anmeldung zum Handelsregister wird veranlasst.</li>
</ul>
${v.reason ? `<p><strong>Begründung:</strong> ${escapeHtml(v.reason)}</p>` : ''}
</div>
<div class="section">
<h2>Gesellschafter</h2>
${renderMembers(members)}
</div>
<div class="section signature">
<div class="line">${escapeHtml(createdBy.displayName)}<br/><small>${escapeHtml(createdBy.email)}</small></div>
<div class="line">Ort, Datum</div>
</div>
`
return baseDocument('Beschluss Abberufung Geschäftsführer', body)
},
}