feat: Phase 5+6 — Finanzplan Bridge + Financials-Slide Sync
- Adapter: fp_* Tabellen → FMResult Interface (60 Monate) - Compute-Endpoint: source=finanzplan delegiert an Finanzplan-Engine - useFinancialModel Hook: computeFromFinanzplan() + finanzplanResults - FinancialsSlide: Toggle "Szenario-Modell" vs "Finanzplan (Excel)" - Gruendungsdatum fix: EK+FK auf Aug (m8), Raumkosten ab Aug - Startup-Preisstaffel: <10 MA ab 3.600 EUR/Jahr, 14-Tage-Test Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -41,17 +41,17 @@ export function useFinancialModel() {
|
||||
}
|
||||
}, [activeScenarioId]) // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
const compute = useCallback(async (scenarioId: string) => {
|
||||
const compute = useCallback(async (scenarioId: string, source?: string) => {
|
||||
setComputing(true)
|
||||
try {
|
||||
const res = await fetch('/api/financial-model/compute', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ scenarioId }),
|
||||
body: JSON.stringify({ scenarioId, source }),
|
||||
})
|
||||
if (res.ok) {
|
||||
const data: FMComputeResponse = await res.json()
|
||||
setResults(prev => new Map(prev).set(scenarioId, data))
|
||||
setResults(prev => new Map(prev).set(source === 'finanzplan' ? 'finanzplan' : scenarioId, data))
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Compute failed:', err)
|
||||
@@ -60,6 +60,10 @@ export function useFinancialModel() {
|
||||
}
|
||||
}, [])
|
||||
|
||||
const computeFromFinanzplan = useCallback(async () => {
|
||||
await compute('', 'finanzplan')
|
||||
}, [compute])
|
||||
|
||||
const updateAssumption = useCallback(async (scenarioId: string, key: string, value: number | number[]) => {
|
||||
// Optimistic update in local state
|
||||
setScenarios(prev => prev.map(s => {
|
||||
@@ -90,6 +94,7 @@ export function useFinancialModel() {
|
||||
|
||||
const activeScenario = scenarios.find(s => s.id === activeScenarioId) || null
|
||||
const activeResults = activeScenarioId ? results.get(activeScenarioId) || null : null
|
||||
const finanzplanResults = results.get('finanzplan') || null
|
||||
|
||||
return {
|
||||
scenarios,
|
||||
@@ -97,6 +102,7 @@ export function useFinancialModel() {
|
||||
activeScenarioId,
|
||||
setActiveScenarioId,
|
||||
activeResults,
|
||||
finanzplanResults,
|
||||
results,
|
||||
loading,
|
||||
computing,
|
||||
@@ -104,6 +110,7 @@ export function useFinancialModel() {
|
||||
setCompareMode,
|
||||
compute,
|
||||
computeAll,
|
||||
computeFromFinanzplan,
|
||||
updateAssumption,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user