opzet_hypotheek_doorstromer
Calculate mortgage setup for home movers with existing property to determine required amount, financing components, and monthly payments comparison between current and new mortgage.
Instructions
Berekent de hypotheekopzet voor doorstromers met bestaande woning. Output: benodigd bedrag, financiering per component en maandlasten (bestaand versus nieuw).
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| inkomen_aanvrager | Yes | Bruto jaarinkomen hoofdaanvrager in euro's. | |
| geboortedatum_aanvrager | Yes | Geboortedatum hoofdaanvrager (YYYY-MM-DD). | |
| heeft_partner | Yes | Geeft aan of een partner mee leent. | |
| inkomen_partner | No | Optioneel partnerinkomen in euro's. | |
| geboortedatum_partner | No | Optionele geboortedatum partner (YYYY-MM-DD). | |
| verplichtingen_pm | No | Optionele maandelijkse verplichtingen in euro's. | |
| eigen_vermogen | No | Optioneel beschikbaar eigen geld in euro's. | |
| waarde_huidige_woning | Yes | Marktwaarde van de huidige woning. | |
| bestaande_hypotheek | Yes | Bestaande leningdelen voor doorstromer (detailuitleg: hypotheek://v4/guide/opzet-intake). | |
| nieuwe_woning | Yes | Kerngegevens nieuwe woning (detailuitleg: hypotheek://v4/guide/opzet-intake). | |
| session_id | No | Optioneel sessie-ID vanuit n8n (voor logging). |
Implementation Reference
- src/index.ts:673-711 (handler)Main handler function: normalizes arguments, validates input (aanvrager, bestaande_hypotheek), builds payload with aanvrager, bestaande_hypotheek, nieuwe_woning details, POSTs to backend API (REPLIT_API_URL_OPZET), logs success, and formats/returns response.async function handleOpzetDoorstromer(request: any): Promise<ToolResponse> { const rawArgs = requireArguments<OpzetDoorstromerArguments>(request); const normalizedArgs = normalizeOpzetDoorstromerArgs(rawArgs) as OpzetDoorstromerArguments; const logger = createLogger(normalizedArgs.session_id); const aanvrager = requireOpzetAanvrager(normalizedArgs); validateOpzetAanvrager(aanvrager); validateBestaandeHypotheek(normalizedArgs.bestaande_hypotheek); enforceRateLimit(normalizedArgs.session_id); const payload: any = { aanvrager: mapOpzetAanvrager(aanvrager), bestaande_hypotheek: { waarde_huidige_woning: normalizedArgs.waarde_huidige_woning, leningdelen: normalizedArgs.bestaande_hypotheek.leningdelen, }, nieuwe_woning: { waarde_woning: normalizedArgs.nieuwe_woning.waarde_woning, bedrag_verbouwen: normalizedArgs.nieuwe_woning.bedrag_verbouwen ?? 0, bedrag_verduurzamen: normalizedArgs.nieuwe_woning.bedrag_verduurzamen ?? 0, kosten_percentage: normalizedArgs.nieuwe_woning.kosten_percentage ?? 0.05, energielabel: normalizeEnergielabel(normalizedArgs.nieuwe_woning.energielabel || ''), }, }; if (normalizedArgs.session_id) { payload.session_id = normalizedArgs.session_id; } const apiClient = getApiClient(); const { data } = await apiClient.post( REPLIT_API_URL_OPZET, payload, { correlationId: normalizedArgs.session_id } ); logger.info('Toolcall succesvol', { tool: 'opzet_hypotheek_doorstromer' }); return successResponse(formatResponse(data, "opzet_hypotheek_doorstromer")); }
- src/index.ts:766-774 (registration)Registration of all tool handlers in TOOL_HANDLERS map, including opzet_hypotheek_doorstromer mapped to handleOpzetDoorstromer. Used by CallToolRequestSchema handler.const TOOL_HANDLERS: Record<string, ToolHandler> = { bereken_hypotheek_starter: handleBerekenStarter, bereken_hypotheek_doorstromer: handleBerekenDoorstromer, bereken_hypotheek_uitgebreid: handleBerekenUitgebreid, haal_actuele_rentes_op: handleActueleRentes, opzet_hypotheek_starter: handleOpzetStarter, opzet_hypotheek_doorstromer: handleOpzetDoorstromer, opzet_hypotheek_uitgebreid: handleOpzetUitgebreid, };
- src/index.ts:903-938 (schema)MCP tool schema definition: name, detailed description with input policy for doorstromers, and inputSchema specifying properties (aanvrager, waarde_huidige_woning, bestaande_hypotheek with leningdelen array, nieuwe_woning) and required fields. Returned by ListToolsRequestSchema.{ name: "opzet_hypotheek_doorstromer", description: `Opzet-berekening voor doorstromers met een CONCRETE nieuwe woning. Gebruik dit zodra er een koopprijs/verbouwing bekend is; hiermee ziet de gebruiker exact hoe bestaand en nieuw samenkomen. Voor algemene verhuis-oriëntatie zonder specifieke woning gebruikt u de maximale-hypotheek tools. **Invoerbeleid bestaande hypotheek (verplicht expliciet vragen):** - Stel altijd de vraag: "Wilt u een snelle globale berekening (met een samenvatting van uw hypotheek) of een detailberekening waarbij u alle leningdelen invoert?" - Bij snelle globale berekening: laat de gebruiker één samenvattende set waarden geven (totale schuld, gemiddelde rente, resterende looptijd, optioneel huidige maandlast) en vul hiermee één leningdeel. - Bij detailberekening: laat de gebruiker alle leningdelen kopiëren/plakken (hoofdsom, rente, looptijd, rentevast, hypotheekvorm) en vul de leningdelen-array één-op-één.`, inputSchema: { type: "object", description: `Gebruik basisintake, huidige woning en bestaande leningdelen; zie ${OPZET_GUIDE_URI} voor detailvelden en defaults.`, properties: { aanvrager: aanvragerSchema, waarde_huidige_woning: { type: "number", description: "Marktwaarde van de huidige woning.", }, bestaande_hypotheek: { ...bestaandeHypotheekSchema, }, nieuwe_woning: { ...nieuweWoningSchema, }, session_id: { type: "string", description: "Optioneel sessie-ID vanuit n8n (voor logging).", }, }, required: [ "aanvrager", "waarde_huidige_woning", "bestaande_hypotheek", "nieuwe_woning", ], }, },
- Normalization helper: wraps normalizeOpzetAanvragerShape and normalizes bestaande_hypotheek (including leningdelen field mappings). Called in handler at line 675.export function normalizeOpzetDoorstromerArgs(args: any): any { const normalized = normalizeOpzetAanvragerShape(args); if (normalized?.bestaande_hypotheek) { normalized.bestaande_hypotheek = normalizeBestaandeHypotheek(normalized.bestaande_hypotheek); } return normalized; }
- src/index.ts:116-120 (schema)TypeScript interface defining input shape for the tool: extends OpzetBaseArguments with nieuwe_woning, waarde_huidige_woning, and bestaande_hypotheek.interface OpzetDoorstromerArguments extends OpzetBaseArguments { nieuwe_woning: NieuweWoning; waarde_huidige_woning: number; bestaande_hypotheek: BestaandeHypotheek; }