bereken_hypotheek_uitgebreid
Calculate personalized mortgage options including home equity, monthly payments, and NHG estimates for home buyers and movers based on income, existing mortgage details, and property specifications.
Instructions
Gebruik dit voor maatwerk (rente, looptijd, energielabel). Output: maatwerk leenbedrag met maandlast en NHG-inschatting. Zodra u dit tool voor een doorstromer inzet (is_doorstromer=true of bestaande_hypotheek ingevuld), gelden dezelfde regels als bij de standaard doorstromer-tool:
Outputvelden (altijd rechtstreeks gebruiken in de terugkoppeling):
max_woningbudget → woningbudget inclusief overwaarde en extra leencapaciteit
overwaarde_bedrag → vrijvallende winst uit de huidige woning
huidige_hypotheek_schuld → resterende schuld die moet worden afgelost
extra_leencapaciteit → nieuwe hypotheekruimte bovenop de overwaarde
maandlast_nu, maandlast_straks en verschil_maandlast → huidige, toekomstige en delta maandlast
Presentatie richting gebruiker (één compact blok):
Toon het woningbudget centraal onder de titel "Uw woningbudget" en licht toe waaruit dit bedrag bestaat in bullets (overwaarde, huidige hypotheek, extra leencapaciteit).
Voeg een tweede blok toe "Uw nieuwe maandlast" met maandlast nu, maandlast straks en het verschil (positief/negatief) op eigen regel.
Gebruik alleen MCP-waarden; geen eigen herberekeningen behalve eenvoudige weergave/afronding.
Invoerkeuze bestaande hypotheek (verplicht expliciet vragen):
Snelle globale berekening → gebruiker geeft een samenvatting (totale schuld, gemiddelde rente/looptijd, eventuele huidige maandlast). Vul één leningdeel met deze totaalwaarden in.
Detailberekening → gebruiker levert alle leningdelen (hoofdsom, rente, resterende looptijd, hypotheekvorm). Kopieer ze één-op-één in de leningdelen array.
Vraag altijd: "Wilt u een snelle globale berekening (met een samenvatting van uw hypotheek) of een detailberekening waarbij u alle leningdelen invoert?" en volg de gekozen route.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| inkomen_aanvrager | Yes | Bruto jaarinkomen hoofdaanvrager in euro's. | |
| geboortedatum_aanvrager | Yes | Interne geboortedatum hoofdaanvrager (ISO). Vraag de gebruiker altijd: "Wat is uw leeftijd of geboortedatum?" en deel bij een leeftijd alleen die leeftijd terug. | |
| heeft_partner | Yes | Geeft aan of een partner mee leent. | |
| inkomen_partner | No | Optioneel partnerinkomen in euro's. | |
| geboortedatum_partner | No | Optionele interne geboortedatum partner (ISO). Vraag ook hier: "Wat is uw leeftijd of geboortedatum?" en houd de afgeleide datum intern. | |
| verplichtingen_pm | No | Optionele maandelijkse verplichtingen in euro's. | |
| is_doorstromer | No | Geeft aan of de aanvrager een doorstromer is. | |
| waarde_huidige_woning | No | Optionele huidige woningwaarde in euro's. | |
| bestaande_hypotheek | No | Bestaande leningdelen voor doorstromer (detailuitleg: hypotheek://v4/guide/opzet-intake). VRAAG ALTIJD: "Wilt u een snelle globale berekening (met een samenvatting van uw hypotheek) of een detailberekening waarbij u alle leningdelen invoert?" | |
| nieuwe_woning | No | Kerngegevens nieuwe woning (detailuitleg: hypotheek://v4/guide/opzet-intake). | |
| nieuwe_hypotheek | No | Optionele maatwerk leningparameters (looptijd, rentevast, rente). Detailuitleg: hypotheek://v4/guide/opzet-intake. | |
| nieuwe_lening | No | Optionele structuur voor looptijd/rentevast/NHG en renteklassen (detailuitleg: hypotheek://v4/guide/opzet-intake). | |
| session_id | No | Optioneel sessie-ID vanuit n8n (voor logging). |
Implementation Reference
- src/index.ts:581-625 (handler)Main handler function for 'bereken_hypotheek_uitgebreid' tool: validates input, normalizes arguments (especially for doorstromer), builds API payload including custom new loan params, calls Replit API, logs success, and returns formatted response.async function handleBerekenUitgebreid(request: any): Promise<ToolResponse> { const rawArgs = requireArguments<UitgebreidArguments>(request); const normalizedArgs = rawArgs.is_doorstromer ? (normalizeDoorstromerArgs(rawArgs) as UitgebreidArguments) : rawArgs; const logger = createLogger(normalizedArgs.session_id); validateBaseArguments(normalizedArgs as BaseArguments); if (normalizedArgs.is_doorstromer && normalizedArgs.bestaande_hypotheek) { validateBestaandeHypotheek(normalizedArgs.bestaande_hypotheek); } enforceRateLimit(normalizedArgs.session_id); const payload: any = { aanvragers: mapAanvragers(normalizedArgs), }; if (normalizedArgs.is_doorstromer && normalizedArgs.waarde_huidige_woning && normalizedArgs.bestaande_hypotheek) { payload.bestaande_hypotheek = { waarde_huidige_woning: normalizedArgs.waarde_huidige_woning, leningdelen: normalizedArgs.bestaande_hypotheek.leningdelen, }; } const maatwerk = (normalizedArgs as any).nieuwe_hypotheek ?? (normalizedArgs as any).nieuwe_lening; const nieuweLening = buildNieuweLeningPayload(maatwerk); if (nieuweLening) { payload.nieuwe_lening = nieuweLening; } if (normalizedArgs.session_id) { payload.session_id = normalizedArgs.session_id; } const apiClient = getApiClient(); const { data } = await apiClient.post( REPLIT_API_URL_BEREKENEN, payload, { correlationId: normalizedArgs.session_id } ); logger.info('Toolcall succesvol', { tool: 'bereken_hypotheek_uitgebreid' }); return successResponse(formatResponse(data, "bereken_hypotheek_uitgebreid")); }
- src/index.ts:766-773 (registration)TOOL_HANDLERS object maps tool name 'bereken_hypotheek_uitgebreid' to its handler function handleBerekenUitgebreid, 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:830-866 (schema)Tool registration and input schema definition in ListToolsRequestSchema response, including detailed properties for extended params like nieuwe_hypotheek, nieuwe_lening, doorstromer support.name: "bereken_hypotheek_uitgebreid", description: `Maximale hypotheek – uitgebreide variant. Gebruik dit alleen wanneer er nog GEEN concrete woning is, maar de gebruiker/adviseur expliciet met parameters wil spelen (bijv. andere rentevast-periodes, custom renteklassen, scenariovergelijkingen). Voor een concrete woning altijd de opzet-tools gebruiken. Zodra u dit tool voor een doorstromer inzet (is_doorstromer=true of bestaande_hypotheek ingevuld), gelden dezelfde regels als bij de standaard doorstromer-tool: ${DOORSTROMER_OUTPUT_GUIDANCE}`, inputSchema: { type: "object", description: `Alle velden zijn optioneel bovenop de basisintake; zie ${OPZET_GUIDE_URI} voor velduitleg en defaults.`, properties: { ...baseIntakeProperties, is_doorstromer: { type: "boolean", description: "Geeft aan of de aanvrager een doorstromer is.", }, waarde_huidige_woning: { type: "number", description: "Optionele huidige woningwaarde in euro's.", }, bestaande_hypotheek: { ...bestaandeHypotheekSchema, }, nieuwe_woning: { ...nieuweWoningSchema, }, nieuwe_hypotheek: { type: "object", description: `Optionele maatwerk leningparameters (looptijd, rentevast, rente). Detailuitleg: ${OPZET_GUIDE_URI}.`, }, nieuwe_lening: { type: "object", description: `Optionele structuur voor looptijd/rentevast/NHG en renteklassen (detailuitleg: ${OPZET_GUIDE_URI}).`, }, session_id: { type: "string", description: "Optioneel sessie-ID vanuit n8n (voor logging).", }, }, required: baseIntakeRequired, },
- src/index.ts:81-86 (schema)TypeScript interface defining the input arguments structure for the 'bereken_hypotheek_uitgebreid' tool.interface UitgebreidArguments extends BaseArguments { is_doorstromer?: boolean; waarde_huidige_woning?: number; bestaande_hypotheek?: BestaandeHypotheek; nieuwe_hypotheek?: NieuweHypotheek; }
- src/index.ts:623-624 (helper)Specific formatting and logging in handler tail for this tool, using formatResponse function tailored for it.logger.info('Toolcall succesvol', { tool: 'bereken_hypotheek_uitgebreid' }); return successResponse(formatResponse(data, "bereken_hypotheek_uitgebreid"));