← Blog

Email automation

E-mailagent voor een schadeherstelketen: het BR7-playbook

Een Apeldoornse schadeherstelketen stuurt 2.260 mails per week naar verzekeraars. De agent die wij bouwden stelt de meeste op — en weigert principieel alles boven €7.500.

Jacob Molkenboer· Oprichter · A Brand New Company· 18 feb 2026· 9 min
Crèmekleurige envelop met limoengroen lint op donkergroen leren vloeiblad, koperen bel en doorslag ernaast.

Het is 07:42 op een dinsdag in Apeldoorn. De planner opent haar inbox bij de schadeherstel-keten en telt 184 nieuwe ABZ-berichten van die nacht. Voor 18:00 komen er nog 412 bij. De meeste zijn routine: foto-aanvragen, akkoord-mails, calculatie-bevestigingen. Een handvol is dat niet, en juist die wil ze vóór de agent zien.

De keten heeft vijf vestigingen, dertig mensen en zo'n 2.260 inkomende verzekeraar-correspondenties per week. Ze vroegen ons een e-mailagent te bouwen die antwoorden opstelt. We zegden ja, met één voorwaarde: de agent mag geen enkele casco-claim boven €7.500 raken. Dit is het playbook van de versie die we live brachten, de regels die we hem niet lieten overschrijden, en die ene week waarin we hem bijna verkeerd uitrolden.

De vorm van 2.260 berichten per week

Voor we ook maar één regel AI-code schreven, zaten we twee ochtenden in de planningskamer met een printje. Twaalf verzekeraars. Acht typen inkomende berichten, gedomineerd door drie: FOTO_VERZOEK, AKKOORD_VERZOEK en CALCULATIE_OK. Eenentachtig procent van het verkeer volgde één van vier vaste antwoordpatronen. Elf procent vroeg om een planner die naar een foto keek en besliste. De resterende acht procent waren de berichten waarvan een verkeerde behandeling twee weken later eindigde in een telefoontje van het expertise-bureau.

Drie planners besteedden elke ochtend zo'n negentig minuten aan handmatig sorteren, vóór de eerste auto op de brug stond. Dát was de spreadsheet die ons vertelde dat dit de moeite waard was. Niet 'AI voor de inbox' — 'jullie drieën krijgen elke ochtend negentig minuten terug, en de dossiers lopen op maandag geen dag meer achter'. Dat was de enige zin uit de kickoff-deck die ertoe deed.

De stack die we erfden

Twee systemen, en geen van beide had zin om met de ander te praten. Het eerste was de ABZ Nederland EDI-broker, die EDIFACT spreekt via de SCHA-berichten waar de Nederlandse verzekeringsbranche sinds midden jaren 2000 op draait. Saai, goed gedocumenteerd, prima. De keten zit erop sinds 2012 — 14 jaar gewoontes ingesleten in de vingers van de planners en in elke export-template waar de kantoorstaf op vertrouwt.

Het tweede systeem was het schadedossier-systeem, in 2014 gebouwd door ICT Automatisering. Windows Server. SQL Server-backend. Geen publieke API. De consultant die het bouwde had het database-wachtwoord versleuteld in een config-bestand en is de sleutel daarna ergens tussen 2017 en de dag van zijn pensioen kwijtgeraakt. De huidige IT-lead had een werkend read-only DBA-account en het beleefde verzoek om alsjeblieft niets stuk te maken vóór de geplande vervanging in 2027.

Dus schreven we een sidecar. Een kleine Go-service die XML-exports uit de ABZ-broker trok, joinde tegen de read-only SQL-view die we wél mochten aanraken, en het resultaat wegschreef naar een Postgres-mirror waar de agent daadwerkelijk over redeneerde. De verouderde systemen bleven precies zoals ze waren. Er werd niets gemigreerd. Er werd niets herschreven. We hoefden alleen gelijk te hebben over wat we lazen.

Waarom €7.500 de grens is

Bedrijfsregeling 7 is de zelfregulering van de Nederlandse verzekeringsbranche voor motorrijtuigschades, uitgegeven door het Verbond van Verzekeraars. Onder BR7 sturen twee verzekeraars die een aanrijding tussen hun respectievelijke klanten afhandelen elkaar geen factuur onder een claim-drempel; ze verrekenen via een clearing. De drempel voor casco ligt op €7.500.

Boven die grens wordt het dossier formeel. Er komt een expert bij, de calculatie wordt onafhankelijk gecontroleerd, en de akkoord-mail die je verstuurt is geen beleefdheid — het is een bindende stap in een proces dat kan eindigen bij arbitrage. De kosten van een verkeerde mail boven de grens meet je in maanden geschil en weken managementtijd.

Daarom mag de agent claims boven €7.500 niet aanraken. Niet omdat het model boven die grens geen competente mail kan opstellen; dat kan het prima. Maar omdat de kosten van een competent ogende, subtiel verkeerde mail boven de grens kwalitatief anders zijn dan eronder. De grens van €7.500 is niet willekeurig. Het is de grens die BR7 zelf trekt tussen de twee regimes, en wij hebben de grens van de agent er pal bovenop gelegd.

Let op

Trekt een regelgeving al een grens, leg die van de agent er bovenop. Onderhandel er geen nieuwe. Een planner kan altijd een claim van €4.000 doorzetten naar de expert-queue; een planner kan geen bindende mail meer terughalen.

De queue-split, in drie regels

Elk inkomend ABZ-bericht raakt een router voordat de agent het ziet. De regels zijn kort en de volgorde telt. Eerst de drempel, dan de expert-vlag, dan tegenpartij-afwijkend. Wat daar doorheen valt, komt in de draft-lane van de agent terecht.

// claim-router.ts — runs on every inbound ABZ SCHA-bericht
type Lane = 'expert-queue' | 'agent-draft'

export async function route(msg: SchaMessage): Promise<{ lane: Lane; reason: string | null }> {
  const claim = await loadClaim(msg.dossierId)
  const casco = claim.coverage === 'CASCO'
  // Read BOTH calculaties, take the higher. See the gotcha below.
  const ourCents   = claim.calculatie?.totaal_excl_btw_cents ?? 0
  const theirCents = claim.tegenpartijCalculatie?.totaal_excl_btw_cents ?? 0
  const amountCents = Math.max(ourCents, theirCents)

  // Rule 1: BR7 threshold. Cents, not euros, so we never round.
  if (casco && amountCents >= 750_000) {
    return { lane: 'expert-queue', reason: 'BR7-threshold' }
  }

  // Rule 2: A planner has already flagged the dossier for expertise.
  if (claim.expertVlag) {
    return { lane: 'expert-queue', reason: 'expert-flag-set' }
  }

  // Rule 3: Counterparty disputes the toedracht.
  if (claim.tegenpartij?.afwijkend === true) {
    return { lane: 'expert-queue', reason: 'tegenpartij-afwijkend' }
  }

  return { lane: 'agent-draft', reason: null }
}

Centen, geen euro's. Dat leerden we in week drie, toen een Postgres numeric(10,2) een calculatie van €7.499,995 afrondde tot een routingbeslissing van €7.500,00 die een planner veertig minuten kostte om terug te draaien. Geld leeft in hele centen. Altijd.

Wat de agent daadwerkelijk opstelt

Binnen de agent-draft-lane is het werk smal, en dat is met opzet. De agent schrijft maar vier soorten mails. Een antwoord op een FOTO_VERZOEK dat bevestigt dat de fotoset geüpload is, verwijst naar de zeven specifieke foto-hoeken die het portaal van de verzekeraar verwacht, en linkt naar het dossier. Een AKKOORD-antwoord dat de calculatie bevestigt, de Audatex-referentie noemt en de geplande reparatiestart-datum bevestigt. Een CALCULATIE_OK-follow-up die de schade-behandelaar bij naam bedankt en de factuur-route bevestigt. En een korte fallback-mail met 'we hebben uw bericht ontvangen, een planner reageert vandaag voor 16:00' — alleen verstuurd als de andere drie templates niet schoon passen.

Vier templates. Dat is het hele oppervlak. Geen vrije schrijver verkleed als system prompt. Vier templates met benoemde placeholders die het dossier wel of niet invult.

De vorm van de prompt

De system prompt is kort en hard. We geven het model het dossier als JSON, het inkomende ABZ-bericht als platte tekst, de vier templates met hun exacte placeholders en één zin: 'geef exact één van de vier templates met ingevulde placeholders, of output het token DECLINE.' Geen chain-of-thought in de output, geen toelichting, geen verontschuldiging. De agent geeft ons óf een ingevulde template, óf DECLINE — en DECLINE gaat door naar een planner met een notitie van één regel.

Temperatuur staat op 0.1. Het model heeft geen tools, geen geheugen tussen calls, en geen manier om iets te lezen buiten de JSON-payload die wij meegeven. Een tweede pass — een deterministische linter — controleert dat de output byte-voor-byte één van de vier template-vormen volgt en dat elke verplichte placeholder een waarde uit het dossier heeft. Keurt de linter af, dan krijgt de planner het inkomende bericht plus een 'linter failed'-notitie in plaats van een draft. Twee lagen, allebei goedkoop, allebei bijna altijd goed. In de eerste maand declinede het model op 4,1% van de berichten en ving de linter er nog eens 0,6% af. De planners zeiden dat we moesten ophouden ons voor dat cijfer te verontschuldigen — ze hebben liever een overgedragen bericht dan een zelfverzekerd verkeerd bericht.

De audittrail die BR7 eist

BR7 is niet alleen een drempel. Het is ook een papieren spoor. Bij elke claim moet je twee jaar later kunnen reconstrueren wie wat zei, en wanneer. De planners deden dat al door mails op te slaan in een map per dossier op de file server. Die gewoonte hebben we niet aangepast.

Elke mail die de agent opstelt wordt vóór verzending naar diezelfde dossier-map geschreven, samen met een sidecar JSON-bestand dat vastlegt: het ID van het inkomende ABZ-bericht, de model-versie, de hash van de prompt-snapshot, de gekozen template, de placeholders die het model invulde, de planner die akkoord gaf en de timestamp. Vraagt een expertise-bureau over twee jaar waarom een bepaald akkoord op een woensdag in juni 2026 uitging, dan ligt het antwoord één map verderop.

Die sidecar is het verschil tussen een AI-tool en een AI-tool waar een gereguleerd bedrijf daadwerkelijk mee gaat draaien. De audit is geen feature. De audit ís het product.

De week waarin we bijna verkeerd live gingen

Twee weken voor de go-live draaiden we een parallel mode: de agent stelde op, de planners reviewden, er ging niets de deur uit zonder klik. Op dag drie van die parallel-run schreef de agent zelfverzekerd een akkoord-mail bij een claim die op papier op €6.940 stond — onder de grens. De planner die het bekeek zag dat aan het dossier een tweede calculatie hing, van de expert van de tegenpartij, voor €11.200.

De eerste calculatie was van ons. De tweede van de tegenpartij. Onze router had alleen de eerste gelezen. Onder €7.500 op ons getal, boven €7.500 in de werkelijkheid van het dossier. Diezelfde middag pasten we Regel 1 aan: lees beide calculaties en route op het maximum. Die mail heeft de agent nooit in productie opgesteld. De parallel-run is de reden.

Rol je iets uit dat namens een gereguleerde partij opstelt, draai het dan minimaal twee weken parallel en zoek expliciet naar de gevallen waarin de agent op het eerste gezicht klopt en in werkelijkheid niet. Dat zijn de enige gevallen die ertoe doen. Volume meet je makkelijk. Stil-verkeerd is de metric die je zelf moet uitvinden.

Wat bij de planners bleef

Na drie maanden in productie handelt de agent 71% van het inkomende ABZ-verkeer end-to-end af. De planners zijn 's ochtends nog zo'n twintig minuten kwijt aan sorteren — geen negentig. De expert-queue stond gemiddeld op 38 claims per week, en bij elk van die claims keek een mens. De keten heeft sinds go-live geen BR7-gerelateerd geschil gehad. Op die uitspraak komen we over zes maanden terug.

Toen wij de e-mailagent voor deze Apeldoornse schadeherstel-keten bouwden, liepen we steeds tegen hetzelfde aan: het verouderde schadedossier-systeem mocht je niet aanraken en aan de regelgeving viel niet te onderhandelen. We losten het op met een kleine read-only mirror, trokken de grens van de agent precies daar waar BR7 zijn eigen grens al trok, en hielden het model weg bij precies die dossiers waarin het competent geleken zou hebben.

Heb je een inbox die dezelfde vorm heeft, dan is het kleinste zinvolle dat je vandaag kunt doen: print één ochtend aan berichten, sorteer ze op type en omcirkel de vier templates die tachtig procent dekken. Die cirkel is de agent. De rest blijft bij de planners.

Kern

Trekt een regelgeving al een grens, leg die van de agent er bovenop — geen euro lager, geen cent hoger, en nooit onderhandelbaar.

FAQ

Waarom precies €7.500?

Dat is de casco-drempel onder Bedrijfsregeling 7. Onder die grens verrekenen verzekeraars via een clearing; erboven wordt het dossier formeel en is de akkoord-mail een bindende stap die kan eindigen bij arbitrage.

Konden jullie het model niet gewoon de BR7-regels geven en hem boven de grens laten beslissen?

Dat kan, maar dan vraag je een probabilistisch systeem om onder regulatoire druk gelijk te hebben op precies de gevallen die het meeste pijn doen. Een deterministische router onder de grens en een menselijke queue erboven is goedkoper en veiliger.

Waarom de verouderde database spiegelen in plaats van direct integreren?

Het schadedossier-systeem van ICT Automatisering had geen publieke API en een kwijtgeraakte sleutel voor zijn versleutelde config. Met een read-only Postgres-mirror konden we bouwen zonder het origineel aan te raken of op de vervanging in 2027 te wachten.

Hoe lang draaide de parallel-run vóór go-live?

Twee weken, waarin een planner elke opgestelde mail reviewde vóór verzending. Die parallel-run ving de tweede-calculatie edge case af die anders op dag drie live was gegaan.

Wat gebeurt er als het model declinet of de linter afkeurt?

Dan gaat het inkomende bericht direct naar een planner met een notitie van één regel. In een normale week landt ongeveer 4,7% van de berichten in die lane. De planners zeiden dat we moesten ophouden ons voor dat getal te verontschuldigen.

email automationai agentsautomationcase studyworkflowintegrations

Iets bouwen?

Start een project