feat(pitch-deck): insurance optimization, new positions, funding, slide reorder
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m11s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-consent (push) Successful in 34s
CI / test-python-voice (push) Successful in 34s
CI / test-bqas (push) Successful in 34s
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m11s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-consent (push) Successful in 34s
CI / test-python-voice (push) Successful in 34s
CI / test-bqas (push) Successful in 34s
- Insurance: combined E&O+Produkt, realistic costs (~800 vs 1708 EUR/Mon) - New: Betriebshaftpflicht, Dienstreise-KV, Gruppenunfall, Key Man - New: Recruiting, ext. DSB, Zertifizierung (ISO 27001) - BG: 0.5% instead of 2.77% (VBG IT/Büro) - Marketing: 8% (2026-28), 10% (2029+) - Bewirtungskosten: all customers x 50 EUR (not just Enterprise) - Messen: 2x in 2029, 3x in 2030 - Liquidität: Fördergelder/Grants + Forschungszulage (§27a EStG) - Serverkosten tooltip updated - Slide reorder: Strategy+Finanzplan after 18, Risks before Glossary - 110→380+ everywhere, Compliance Optimizer on exec summary Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -219,9 +219,10 @@ export async function computeFinanzplan(pool: Pool, scenarioId: string): Promise
|
||||
hcWithoutFounders[`m${m}`] = Math.max(0, headcount[`m${m}`] - NUM_FOUNDERS)
|
||||
}
|
||||
|
||||
// 5c. Enterprise customers (for Bewirtungskosten)
|
||||
// 5c. Total Bestandskunden (for Bewirtungskosten — uses totalBestandskunden from Serverkosten above)
|
||||
// Also load enterprise customers separately for legacy compatibility
|
||||
const kundenRows = await pool.query(
|
||||
"SELECT segment_name, row_label, values FROM fp_kunden WHERE scenario_id = $1 AND row_label = 'Bestandskunden' ORDER BY sort_order",
|
||||
"SELECT segment_name, row_label, values FROM fp_kunden WHERE scenario_id = $1 AND row_label LIKE 'Bestandskunden%' ORDER BY sort_order",
|
||||
[scenarioId]
|
||||
)
|
||||
const enterpriseKunden = emptyMonthly()
|
||||
@@ -243,7 +244,7 @@ export async function computeFinanzplan(pool: Pool, scenarioId: string): Promise
|
||||
{ label: 'KFZ-Steuern (F)', perUnit: 25, source: hcWithoutFounders },
|
||||
{ label: 'KFZ-Versicherung (F)', perUnit: 150, source: hcWithoutFounders },
|
||||
{ label: 'Reisekosten (F)', perUnit: 75, source: headcount },
|
||||
{ label: 'Bewirtungskosten (F)', perUnit: 100, source: enterpriseKunden },
|
||||
{ label: 'Bewirtungskosten (F)', perUnit: 50, source: totalBestandskunden },
|
||||
{ label: 'Internet/Mobilfunk (F)', perUnit: 50, source: headcount },
|
||||
]
|
||||
|
||||
@@ -259,23 +260,24 @@ export async function computeFinanzplan(pool: Pool, scenarioId: string): Promise
|
||||
}
|
||||
}
|
||||
|
||||
// Berufsgenossenschaft: 2.77% of total brutto payroll
|
||||
// Berufsgenossenschaft (VBG IT/Büro): ~0.5% of total brutto payroll
|
||||
const bgRow = betrieb.find(r => r.row_label.includes('Berufsgenossenschaft'))
|
||||
if (bgRow) {
|
||||
const computed = emptyMonthly()
|
||||
for (let m = FOUNDING_MONTH; m <= MONTHS; m++) {
|
||||
computed[`m${m}`] = Math.round((totalBrutto[`m${m}`] || 0) * 0.0277)
|
||||
computed[`m${m}`] = Math.round((totalBrutto[`m${m}`] || 0) * 0.005)
|
||||
}
|
||||
await pool.query('UPDATE fp_betriebliche_aufwendungen SET values = $1 WHERE id = $2', [JSON.stringify(computed), bgRow.id])
|
||||
bgRow.values = computed
|
||||
}
|
||||
|
||||
// Allgemeine Marketingkosten: 10% of revenue
|
||||
// Allgemeine Marketingkosten: 8% of revenue (2026-2028), 10% from 2029
|
||||
const marketingRow = betrieb.find(r => r.row_label.includes('Allgemeine Marketingkosten'))
|
||||
if (marketingRow) {
|
||||
const computed = emptyMonthly()
|
||||
for (let m = FOUNDING_MONTH; m <= MONTHS; m++) {
|
||||
computed[`m${m}`] = Math.round((totalRevenue[`m${m}`] || 0) * 0.10)
|
||||
const rate = m <= 36 ? 0.08 : 0.10 // m36 = Dec 2028
|
||||
computed[`m${m}`] = Math.round((totalRevenue[`m${m}`] || 0) * rate)
|
||||
}
|
||||
await pool.query('UPDATE fp_betriebliche_aufwendungen SET values = $1 WHERE id = $2', [JSON.stringify(computed), marketingRow.id])
|
||||
marketingRow.values = computed
|
||||
|
||||
@@ -26,16 +26,16 @@ const translations = {
|
||||
'Investition & Cap Table',
|
||||
'Kundenersparnis',
|
||||
'KI Q&A',
|
||||
'Anhang: Systemarchitektur',
|
||||
'Anhang: Regulatorik',
|
||||
'Anhang: Engineering',
|
||||
'Anhang: KI-Pipeline',
|
||||
'Anhang: SDK Demo',
|
||||
'Anhang: Strategie',
|
||||
'Anhang: Finanzplan',
|
||||
'Anhang: Annahmen',
|
||||
'Glossar',
|
||||
'Anhang: Regulatorik',
|
||||
'Anhang: Systemarchitektur',
|
||||
'Anhang: Engineering',
|
||||
'Anhang: KI-Pipeline',
|
||||
'Anhang: SDK Demo',
|
||||
'Risiken & Mitigation',
|
||||
'Glossar',
|
||||
'Rechtlicher Hinweis',
|
||||
],
|
||||
executiveSummary: {
|
||||
@@ -322,16 +322,16 @@ const translations = {
|
||||
'Investment & Cap Table',
|
||||
'Customer Savings',
|
||||
'AI Q&A',
|
||||
'Appendix: System Architecture',
|
||||
'Appendix: Regulatory',
|
||||
'Appendix: Engineering',
|
||||
'Appendix: AI Pipeline',
|
||||
'Appendix: SDK Demo',
|
||||
'Appendix: Strategy',
|
||||
'Appendix: Financial Plan',
|
||||
'Appendix: Assumptions',
|
||||
'Glossary',
|
||||
'Appendix: Regulatory',
|
||||
'Appendix: System Architecture',
|
||||
'Appendix: Engineering',
|
||||
'Appendix: AI Pipeline',
|
||||
'Appendix: SDK Demo',
|
||||
'Risks & Mitigation',
|
||||
'Glossary',
|
||||
'Legal Notice',
|
||||
],
|
||||
executiveSummary: {
|
||||
|
||||
@@ -78,8 +78,8 @@ export const PRESENTER_FAQ: FAQEntry[] = [
|
||||
keywords: ['rag', 'rechtstexte', 'legal texts', 'wissensbasis', 'knowledge base', 'vektordatenbank', 'vector', 'gesetze', 'laws'],
|
||||
question_de: 'Wie funktioniert die Wissensbasis?',
|
||||
question_en: 'How does the knowledge base work?',
|
||||
answer_de: 'Unsere RAG-Engine (Retrieval Augmented Generation) umfasst über 25 Tausend indexierte Originaldokumente und über 25.000 extrahierte Controls — DSGVO, AI Act, CRA, NIS2, Maschinenverordnung und 110 Gesetze und Regularien für 10 Branchen. Bei jeder Compliance-Analyse werden die relevanten Paragraphen und Controls automatisch herangezogen. KI-Agenten arbeiten als spezialisierte Services und liefern rechtlich fundierte Antworten mit Quellennachweis.',
|
||||
answer_en: 'Our RAG engine (Retrieval Augmented Generation) includes over 25,000 indexed original documents and over 25,000 extracted controls — GDPR, AI Act, CRA, NIS2, Machinery Regulation and 110 laws and regulations across 10 industries. For every compliance analysis, the relevant paragraphs and controls are automatically retrieved. AI agents operate as specialized services and deliver legally grounded answers with source references.',
|
||||
answer_de: 'Unsere RAG-Engine (Retrieval Augmented Generation) umfasst über 25 Tausend indexierte Originaldokumente und über 25.000 extrahierte Controls — DSGVO, AI Act, CRA, NIS2, Maschinenverordnung und 380+ Gesetze und Regularien für 10 Branchen. Bei jeder Compliance-Analyse werden die relevanten Paragraphen und Controls automatisch herangezogen. KI-Agenten arbeiten als spezialisierte Services und liefern rechtlich fundierte Antworten mit Quellennachweis.',
|
||||
answer_en: 'Our RAG engine (Retrieval Augmented Generation) includes over 25,000 indexed original documents and over 25,000 extracted controls — GDPR, AI Act, CRA, NIS2, Machinery Regulation and 380+ laws and regulations across 10 industries. For every compliance analysis, the relevant paragraphs and controls are automatically retrieved. AI agents operate as specialized services and deliver legally grounded answers with source references.',
|
||||
goto_slide: 'product',
|
||||
priority: 7,
|
||||
},
|
||||
|
||||
@@ -19,16 +19,16 @@ export const SLIDE_ORDER: SlideId[] = [
|
||||
'cap-table',
|
||||
'customer-savings',
|
||||
'ai-qa',
|
||||
'annex-architecture',
|
||||
'annex-regulatory',
|
||||
'annex-engineering',
|
||||
'annex-aipipeline',
|
||||
'annex-sdk-demo',
|
||||
'annex-strategy',
|
||||
'annex-finanzplan',
|
||||
'annex-assumptions',
|
||||
'annex-glossary',
|
||||
'annex-regulatory',
|
||||
'annex-architecture',
|
||||
'annex-engineering',
|
||||
'annex-aipipeline',
|
||||
'annex-sdk-demo',
|
||||
'risks',
|
||||
'annex-glossary',
|
||||
'legal-disclaimer',
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user