fix(pitch-deck): all financial slides now read from fp_* tables via useFpKPIs
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m18s
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 32s
CI / test-bqas (push) Successful in 32s
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m18s
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 32s
CI / test-bqas (push) Successful in 32s
New shared hook: useFpKPIs — loads annual KPIs from fp_guv/liquiditaet/personal/kunden. Replaces useFinancialModel (simplified model) for KPI display on all slides. Slides updated: - CompetitionSlide: "110 Gesetze" → "380+ Regularien & Normen" - BusinessModelSlide: ACV + Gross Margin from fp_* (was useFinancialModel) - ExecutiveSummarySlide: Unternehmensentwicklung from fp_* (was useFinancialModel) - FinancialsSlide: KPI cards from fp_* (ARR, Customers, Break-Even, EBIT 2030) All slides now show consistent numbers from the same source of truth (fp_* tables). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
import { Language } from '@/lib/types'
|
||||
import { t } from '@/lib/i18n'
|
||||
import { useFinancialModel } from '@/lib/hooks/useFinancialModel'
|
||||
import { useFpKPIs } from '@/lib/hooks/useFpKPIs'
|
||||
import GradientText from '../ui/GradientText'
|
||||
import FadeInView from '../ui/FadeInView'
|
||||
import GlassCard from '../ui/GlassCard'
|
||||
@@ -13,18 +13,17 @@ interface BusinessModelSlideProps {
|
||||
products?: unknown[]
|
||||
investorId?: string | null
|
||||
preferredScenarioId?: string | null
|
||||
isWandeldarlehen?: boolean
|
||||
}
|
||||
|
||||
export default function BusinessModelSlide({ lang, investorId, preferredScenarioId }: BusinessModelSlideProps) {
|
||||
export default function BusinessModelSlide({ lang, isWandeldarlehen }: BusinessModelSlideProps) {
|
||||
const i = t(lang)
|
||||
const de = lang === 'de'
|
||||
const fm = useFinancialModel(investorId || null, preferredScenarioId)
|
||||
const summary = fm.activeResults?.summary
|
||||
const results = fm.activeResults?.results || []
|
||||
const lastResult = results[results.length - 1]
|
||||
const finalCustomers = summary?.final_customers || 0
|
||||
const finalArr = summary?.final_arr || 0
|
||||
const { last } = useFpKPIs(isWandeldarlehen)
|
||||
const finalCustomers = last?.customers || 0
|
||||
const finalArr = last?.arr || 0
|
||||
const acv = finalCustomers > 0 ? Math.round(finalArr / finalCustomers) : 0
|
||||
const grossMargin = last?.grossMargin ?? 0
|
||||
|
||||
const tiers = [
|
||||
{
|
||||
@@ -62,7 +61,7 @@ export default function BusinessModelSlide({ lang, investorId, preferredScenario
|
||||
},
|
||||
]
|
||||
|
||||
const grossMargin = lastResult?.gross_margin_pct ?? 0
|
||||
// grossMargin already defined above from useFpKPIs
|
||||
const acvLabel = acv > 0
|
||||
? (de ? `${(acv / 1000).toFixed(1).replace('.', ',')}k EUR` : `EUR ${(acv / 1000).toFixed(1)}k`)
|
||||
: '—'
|
||||
|
||||
Reference in New Issue
Block a user