50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
import { z } from 'zod'
|
|
import { annualBudgetApproval } from './annual-budget-approval.js'
|
|
import { mdAppointment } from './md-appointment.js'
|
|
import { annualFinancialsApproval } from './annual-financials-approval.js'
|
|
import { profitDistribution } from './profit-distribution.js'
|
|
import { mdDismissal } from './md-dismissal.js'
|
|
import { capitalIncrease } from './capital-increase.js'
|
|
import { shareTransferApproval } from './share-transfer-approval.js'
|
|
|
|
export interface ResolutionTemplate {
|
|
key: string
|
|
titleDe: string
|
|
titleEn: string
|
|
descriptionDe: string
|
|
schema: z.ZodTypeAny
|
|
fields: TemplateField[]
|
|
render: (ctx: TemplateRenderContext) => string
|
|
}
|
|
|
|
export interface TemplateField {
|
|
key: string
|
|
labelDe: string
|
|
labelEn: string
|
|
type: 'text' | 'textarea' | 'number' | 'date' | 'currency'
|
|
required?: boolean
|
|
}
|
|
|
|
export interface TemplateRenderContext {
|
|
values: Record<string, unknown>
|
|
company: { name: string; registryNo?: string | null; address?: string | null }
|
|
members: Array<{ displayName: string; role: string; shares: number | null }>
|
|
createdBy: { displayName: string; email: string }
|
|
date: string
|
|
}
|
|
|
|
const registry: Record<string, ResolutionTemplate> = {
|
|
[annualBudgetApproval.key]: annualBudgetApproval,
|
|
[annualFinancialsApproval.key]: annualFinancialsApproval,
|
|
[profitDistribution.key]: profitDistribution,
|
|
[mdAppointment.key]: mdAppointment,
|
|
[mdDismissal.key]: mdDismissal,
|
|
[capitalIncrease.key]: capitalIncrease,
|
|
[shareTransferApproval.key]: shareTransferApproval,
|
|
}
|
|
|
|
export const listTemplates = (): ResolutionTemplate[] => Object.values(registry)
|
|
|
|
export const getTemplate = (key: string): ResolutionTemplate | undefined =>
|
|
registry[key]
|