opzet_hypotheek_starter
Calculate mortgage setup for first-time homebuyers. Get total required amount, financing overview, and monthly payments based on income and property details.
Instructions
Berekent de hypotheekopzet voor starters. Output: totaal benodigd bedrag, financieringsoverzicht en maandlast.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| aanvrager | Yes | Gegevens van de (hoofd)aanvrager. Vraag altijd: "Wat is uw leeftijd of geboortedatum?" en gebruik opgegeven leeftijden alleen intern. | |
| 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:638-671 (handler)The primary handler function for the 'opzet_hypotheek_starter' tool. It extracts and normalizes arguments, performs validation, constructs a payload, calls the external Replit API endpoint for opzet calculations, and returns a formatted response.async function handleOpzetStarter(request: any): Promise<ToolResponse> { const rawArgs = requireArguments<OpzetStarterArguments>(request); const normalizedArgs = normalizeOpzetAanvragerShape(rawArgs) as OpzetStarterArguments; const logger = createLogger(normalizedArgs.session_id); const aanvrager = requireOpzetAanvrager(normalizedArgs); validateOpzetAanvrager(aanvrager); enforceRateLimit(normalizedArgs.session_id); const payload: any = { aanvrager: mapOpzetAanvrager(aanvrager), 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_starter' }); return successResponse(formatResponse(data, "opzet_hypotheek_starter")); }
- src/index.ts:881-901 (schema)Defines the tool's metadata including name, detailed description, and JSON input schema specifying required 'aanvrager' and 'nieuwe_woning' objects with their properties.name: "opzet_hypotheek_starter", description: `Opzet-berekening voor starters met een CONCRETE woning. Gebruik dit zodra de gebruiker een huis/koopprijs noemt en wil weten “kan ik deze woning kopen, hoe ziet de financiering eruit?”. Voor louter oriëntatie zonder woning blijft u bij de maximale-hypotheek tools. Dit is de standaardvariant; kies opzet_hypotheek_uitgebreid wanneer de gebruiker expliciet scenario’s/leningdelen wil tweaken.`, inputSchema: { type: "object", description: `Gebruik basisintake plus woninginfo; zie ${OPZET_GUIDE_URI} voor detailvelden en defaults.`, properties: { aanvrager: aanvragerSchema, nieuwe_woning: { ...nieuweWoningSchema, }, session_id: { type: "string", description: "Optioneel sessie-ID vanuit n8n (voor logging).", }, }, required: [ "aanvrager", "nieuwe_woning", ], }, },
- src/index.ts:766-774 (registration)Maps the tool name 'opzet_hypotheek_starter' to its handler function 'handleOpzetStarter' in the central TOOL_HANDLERS registry used by the MCP CallToolRequestHandler.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, };
- Helper function used by the handler to normalize legacy flat argument structure into the required nested 'aanvrager' object format.export function normalizeOpzetAanvragerShape(args: any): any { if (!args || typeof args !== 'object') { return args; } if (args.aanvrager && typeof args.aanvrager === 'object') { return args; } const legacy = { ...args }; if ( typeof legacy.inkomen_aanvrager === 'number' && typeof legacy.geboortedatum_aanvrager === 'string' && typeof legacy.heeft_partner === 'boolean' ) { legacy.aanvrager = { inkomen_aanvrager: legacy.inkomen_aanvrager, geboortedatum_aanvrager: legacy.geboortedatum_aanvrager, heeft_partner: legacy.heeft_partner, inkomen_partner: legacy.inkomen_partner, geboortedatum_partner: legacy.geboortedatum_partner, verplichtingen_pm: legacy.verplichtingen_pm, eigen_vermogen: legacy.eigen_vermogen, }; } return legacy; }