import { describe, it, expect } from "vitest";
// ── Noordster-metriek: hoeveel moet de notaris nog kiezen of aanvullen? ──────
// Het einddoel (AGENTS.md) is een werkdocument dat zo weinig mogelijk nazicht
// vergt. Deze test meet dat op een volledig verkoopdossier (alle gegevens die
// het intake-contract aankan) en legt HARDE PLAFONDS op het aantal resterende
// [AAN TE VULLEN]-velden per scenario. Zakt de teller verder (nieuwe slots of
// mappings), verlaag dan de plafonds mee ("ratchet"); stijgt hij boven het
// plafond, dan is het gouden pad geregresseerd.
//
// De plafonds zijn bewust exact: elke structurele wijziging aan het compromis
// hoort deze cijfers bewust te bevestigen of te verlagen, nooit stilzwijgend
// te verhogen.
import { dossierVeldenUitIntake, maakDossierUitIntakeResultaat, DOSSIER_INTAKE_SCHEMA } from "./intake";
import { dossierNaarKeuzes, dossierNaarParameterwaarden, dossierNaarPartijHerhalingen } from "./parameters";
import { stelWerkdossierSamenAutonoom } from "./werkdossier";
import { type Dossier } from "./types";
import { seedModellen, seedOnderdelen } from "@/data/modeldocumenten";
import { seedBrieven } from "@/data/modelbrieven";
import { genereerDocument, pasKeuzesToe } from "@/data/modeldocumenten/samenstellen";

/** Volledig intake-JSON: alles wat het contract vandaag kan dragen. */
const VOLLEDIG_INTAKE = {
  schema: DOSSIER_INTAKE_SCHEMA,
  dossiertype: "verkoop-met-krediet",
  verkoopdocument: "compromis",
  referentie: "2026/0456",
  bron: "compromis",
  gebruik: "vrij",
  zonnepanelen: false,
  wettelijkVoorkooprecht: false,
  fiscaalRegime: "registratiebelasting",
  partijen: [
    { naam: "PEETERS", voornaam: "Jan", rol: "verkoper", geslacht: "man", burgerlijkeStaat: "gehuwd", echtgenoot: "MAES Lotte", huwelijksplaats: "Leuven", huwelijksdatum: "1990-06-01", huwelijksstelsel: "scheiding van goederen", huwelijkscontractNotaris: "Paul Maselis", huwelijkscontractPlaats: "Leuven", huwelijkscontractDatum: "1990-05-15", rijksregisternummer: "65022012345", geboortedatum: "1965-02-20", geboorteplaats: "Mechelen", adres: "Kerkstraat 8, 3080 Tervuren" },
    { naam: "JANSSENS", voornaam: "Sofie", rol: "koper", geslacht: "vrouw", burgerlijkeStaat: "ongehuwd", rijksregisternummer: "80030312361", geboortedatum: "1980-03-03", geboorteplaats: "Leuven", adres: "Dorpsstraat 2, 3000 Leuven" },
  ],
  goed: { adres: "Bosstraat 45, 3080 Tervuren", type: "woning", gemeente: "Tervuren", deelgemeente: "Duisburg", afdeling: "6", sectie: "C", sectieTitel: "C", perceelnummer: "88/B", perceelnummerTitel: "88/B", kadastraalInkomen: 1320, oppervlakte: 540, oppervlakteTitel: "5a 40ca", inleidendeOmschrijving: "Een woonhuis op en met grond" },
  prijs: 395000,
  voorschot: 39500,
  compromisdatum: "2026-05-12",
  roerendeGoederen: { omschrijving: "de inbouwkeuken en de zonwering", waarde: 5000 },
  verdelingGekochteDelen: "elk voor de onverdeelde helft",
  betaling: { rekeningKoper: "BE68 5390 0754 7034", naamRekeningKoper: "JANSSENS Sofie", rekeningDerden: "BE12 4300 0000 1234", naamRekeningDerden: "Notariskantoor JKGD" },
  kredietofferte: { bank: "KBC", bedrag: 300000, aanvaard: false, termijnWeken: 4 },
  koperEnigeEigenWoning: true,
  hypothecaireLasten: [{ schuldeiser: "KBC Bank", bedrag: 180000, moetGeroyeerdWorden: true }],
  notarissen: { verkoper: "Cédric Dierckx te Tervuren", koper: "Sybille Falla te Brussel" },
  eigendomstitel: { datum: "2017-08-03", erfdienstbaarheden: "De titel bevat geen erfdienstbaarheden of bijzondere voorwaarden." },
  attesten: {
    epc: { datum: "2026-01-15", nummer: "EPC-987", label: "D", geldigTot: "2036-01-15", verbruik: 245, energiedeskundige: "Ir. J. Peeters" },
    bodem: { datum: "2026-05-02", inhoud: "blanco", refertenummer: "OVAM-2026-00123", activiteiten: "geen" },
    elektrischeKeuring: { organisme: "Vinçotte", datum: "2026-05-10", conclusie: "conform" },
    stedenbouw: { datum: "2026-04-10", bestemming: "woongebied", vergunningen: "vergund geacht", onteigeningRooilijn: "geen", erfgoed: "geen" },
    overstroming: { pScore: "A", gScore: "A", datum: "2026-04-12", conclusie: "geen overstromingsgevoeligheid gemodelleerd" },
    // Uitdrukkelijke negatieve feiten uit de inlichtingen/opzoekingen — de
    // opgeloste "vrij van maatregelen"/"geen bijzonderheden"-varianten.
    natuurBos: "geen",
    herstelvordering: "geen",
    maatregelenregister: { datumRaadpleging: "2026-05-05", inhoud: "blanco" },
    stookolietank: "geen",
    leegstand: "geen",
    pfas: "geen",
  },
};

const APPARTEMENT_OVERRIDES = {
  goed: { adres: "Bosstraat 45, 3080 Tervuren", type: "appartement", gemeente: "Tervuren", deelgemeente: "Tervuren", afdeling: "6", sectie: "C", sectieTitel: "C", perceelnummer: "88/B", perceelnummerTitel: "88/B", kadastraalInkomen: 1320, oppervlakte: 90, oppervlakteTitel: "90 ca", inleidendeOmschrijving: "In een appartementsgebouw" },
  syndicusStatus: "geantwoord",
  medeEigendomLastenBetwist: false,
  medeEigendom: {
    datumStatuten: "2012-05-25",
    datumBerichtSyndicus: "2026-05-01",
    lastenPerTrimester: 450,
    nummerKavel: "appartement 1",
    liggingInGebouw: "op de kelderverdieping, het gelijkvloers en de tussenverdieping",
    verdieping: "gelijkvloers",
    beschrijvingPrivatief: "hal, badkamer, apart toilet, twee slaapkamers, salon, keuken en eetkamer",
    exclusiefGenot: "de koer, het terras en de tuin achteraan het gebouw",
    aandeelGemeneDelen: "39/100sten in de gemene delen, waaronder de grond",
    perceelsidentificatie: "0250V2P0002",
    datumBasisakte: "2012-05-25",
    notarisBasisakte: "Gaëlle Taton",
    plaatsNotarisBasisakte: "Luik",
  },
};

function bouwDossier(overrides: Record<string, unknown> = {}): Dossier {
  return maakDossierUitIntakeResultaat(dossierVeldenUitIntake({ ...VOLLEDIG_INTAKE, ...overrides }), {
    id: "ns-1",
    status: "ontwerp-in-opmaak",
    aangemaakt: "2026-06-01T00:00:00.000Z",
    aangepast: "2026-06-01T00:00:00.000Z",
    standaardDossiertype: "verkoop-met-krediet",
  });
}

function genereer(modelId: string, gewest: "Vlaanderen" | "Brussel" | "Wallonië", overrides: Record<string, unknown> = {}): string {
  const dossier = bouwDossier(overrides);
  const model = seedModellen.find((m) => m.id === modelId)!;
  const keuzes = pasKeuzesToe(model, dossierNaarKeuzes(dossier, gewest));
  return genereerDocument(model, seedOnderdelen, keuzes, dossierNaarParameterwaarden(dossier), dossierNaarPartijHerhalingen(dossier));
}

function telOpenVelden(tekst: string): string[] {
  // Taalbewust: het FR-model draagt zijn invulmarkers als [À COMPLÉTER: …]
  // (vertaalMarkeringenFR). Vóór 2026-07-12 telde de meter enkel de NL-vorm,
  // waardoor het FR-plafond in werkelijkheid 0 mat — een blinde vlek.
  return [...new Set([...tekst.matchAll(/\[(?:AAN TE VULLEN|À COMPLÉTER)\s?: ([^\]]+)\]/g)].map((m) => m[1]))];
}

// Ratchet-plafonds per scenario (uniek aantal open [AAN TE VULLEN]-velden).
// Merk op: de teller telt óók velden binnen niet-gekozen [KIES]-hypotheses
// (die schrapt de notaris samen met de hypothese); deterministische
// hypothesekeuzes verlagen de teller dus mee. Verlaag de plafonds bij elke
// verbetering ("ratchet"); verhoog ze nooit stilzwijgend.
// 2026-07-12: forse verlaging t.o.v. 60/48/39/65/79 — (1) de meter telt nu ook
// de FR-markers [À COMPLÉTER] (voorheen mat het FR-scenario blind 0); (2) de
// opgeloste varianten "vlaanderen-vrij-van-maatregelen" en
// "geen-bijzonderheden" + het stookolietank-kenmerk sluiten de rooilijn/
// onteigening/erfgoed-, natuur/bos/herstelvordering- en stookolieclusters
// deterministisch af zodra het dossier de uitdrukkelijke negatieve feiten
// draagt; (3) de fixture is contract-volledig gemaakt (koper-RN, titelvelden).
// 2026-07-12 (vervolg): de opgeloste variant "vlaanderen-leegstand-stookolie-
// bodem-vrij" (leegstandStookolieBodemVrij) sluit de leegstand-/stookolietank-/
// bodem-/PFAS-cluster deterministisch af zodra het dossier alle vier de
// uitdrukkelijke negatieve feiten draagt — 34→24 (NL), 39→27 (FR), 54→44
// (appartement).
const PLAFONDS: Record<string, { modelId: string; gewest: "Vlaanderen" | "Brussel" | "Wallonië"; overrides?: Record<string, unknown>; max: number }> = {
  "woning Vlaanderen (NL)": { modelId: "verkoopovereenkomst-heldere-taal", gewest: "Vlaanderen", max: 24 },
  "woning Brussel (NL)": { modelId: "verkoopovereenkomst-heldere-taal", gewest: "Brussel", max: 45 },
  "woning Wallonië (NL)": { modelId: "verkoopovereenkomst-heldere-taal", gewest: "Wallonië", max: 36 },
  "woning Vlaanderen (FR)": { modelId: "verkoopovereenkomst-heldere-taal-fr", gewest: "Vlaanderen", max: 27 },
  "appartement Vlaanderen (NL)": { modelId: "verkoopovereenkomst-heldere-taal", gewest: "Vlaanderen", overrides: APPARTEMENT_OVERRIDES, max: 44 },
};

describe("Noordster-metriek — open velden op een volledig dossier", () => {
  it.each(Object.entries(PLAFONDS))("%s blijft op of onder het plafond", (naam, cfg) => {
    const open = telOpenVelden(genereer(cfg.modelId, cfg.gewest, cfg.overrides));
    expect(
      open.length,
      `${naam}: ${open.length} open velden (plafond ${cfg.max}). Open: ${open.join(", ")}`
    ).toBeLessThanOrEqual(cfg.max);
  });

  it("vult de nieuwe kern-slots effectief in (betaling, krediet, notarissen, titel, partner — NL + FR)", () => {
    const w = dossierNaarParameterwaarden(bouwDossier());
    // Betaling
    expect(w.rekening_koper).toBe("BE68 5390 0754 7034");
    expect(w.compte_acquereur).toBe(w.rekening_koper);
    expect(w.naam_derdenrekening).toBe("Notariskantoor JKGD");
    expect(w.nom_compte_tiers).toBe(w.naam_derdenrekening);
    // Krediet
    expect(w.kredietbedrag).toBe("300.000");
    expect(w.montant_credit).toBe(w.kredietbedrag);
    expect(w.termijn_weken_krediet).toBe("4");
    expect(w.delai_semaines_credit).toBe("4");
    // Notarissen
    expect(w.notaris_verkoper).toBe("Cédric Dierckx te Tervuren");
    expect(w.notaire_acquereur).toBe("Sybille Falla te Brussel");
    // Eigendomstitel
    expect(w.datum_eigendomsakte).toContain("2017");
    expect(w.date_titre_propriete).toContain("2017");
    expect(w.erfdienstbaarheden_titel).toContain("geen erfdienstbaarheden");
    expect(w.servitudes_titre).toBe(w.erfdienstbaarheden_titel);
    // Gezinswoning-partner: één verkoper met echtgenoot die geen partij is.
    expect(w.identiteit_partner).toBe("MAES Lotte");
    expect(w.identite_partenaire).toBe("MAES Lotte");
  });

  it("vult de attest-slots in (stedenbouw, overstroming, FR-EPC/bodem-spiegels)", () => {
    const w = dossierNaarParameterwaarden(bouwDossier());
    expect(w.datum_stedenbouwkundig_uittreksel).toContain("2026");
    expect(w.bestemming_plannenregister).toBe("woongebied");
    expect(w.gbp_bestemming).toBe("woongebied");
    expect(w.gewestplan_zone).toBe("woongebied");
    expect(w.zone_plan_secteur).toBe("woongebied");
    expect(w.vergunningen_overzicht).toBe("vergund geacht");
    expect(w.apercu_permis).toBe("vergund geacht");
    expect(w.datum_overstromingsattest).toContain("2026");
    expect(w.conclusie_overstromingsattest).toContain("geen overstromings");
    // FR-spiegels van de eerdere NL-fixes.
    expect(w.epc_code_unique).toBe("EPC-987");
    expect(w.epc_expert_energie).toBe("Ir. J. Peeters");
    expect(w.reference_attestation_sol).toBe("OVAM-2026-00123");
  });

  it("vult de mede-eigendom-slots in bij een appartement (NL + FR)", () => {
    const w = dossierNaarParameterwaarden(bouwDossier(APPARTEMENT_OVERRIDES));
    expect(w.datum_statuten).toContain("2012");
    expect(w.date_statuts).toContain("2012");
    expect(w.datum_bericht_syndicus).toContain("2026");
    expect(w.date_lettre_syndic).toContain("2026");
    expect(w.lasten_per_trimester).toBe("450");
    expect(w.charges_trimestrielles).toBe("450");
  });

  it("vult de beschrijvings- en kavelslots in (goed-uitbreiding, roerende goederen, verdeling, appartement, NL + FR)", () => {
    const w = dossierNaarParameterwaarden(bouwDossier());
    // Goed-uitbreiding.
    expect(w.deelgemeente).toBe("Duisburg");
    expect(w.section_administrative).toBe("Duisburg");
    expect(w.afdeling_omschrijving).toBe("zesde"); // ordinaal uit "6"
    expect(w.description_division).toBe("sixième");
    expect(w.oppervlakte_titel).toBe("5a 40ca");
    expect(w.superficie_titre).toBe("5a 40ca");
    expect(w.inleidende_omschrijving_gebouw_of_perceel).toContain("woonhuis");
    // Roerende goederen + verdeling.
    expect(w.meeverkochte_roerende_goederen).toContain("inbouwkeuken");
    expect(w.biens_mobiliers_vendus).toBe(w.meeverkochte_roerende_goederen);
    expect(w.waarde_roerende_goederen).toBe("5.000");
    expect(w.valeur_biens_mobiliers).toBe("5.000");
    expect(w.verdeling_gekochte_delen).toBe("elk voor de onverdeelde helft");
    expect(w.repartition_quotites).toBe(w.verdeling_gekochte_delen);
    // Appartement-kavel + basisakte.
    const wa = dossierNaarParameterwaarden(bouwDossier(APPARTEMENT_OVERRIDES));
    expect(wa.nummer_appartement).toBe("appartement 1");
    expect(wa.numero_appartement).toBe("appartement 1");
    expect(wa.plaats_in_het_gebouw).toContain("kelderverdieping");
    expect(wa.beschrijving_privatieve_delen).toContain("badkamer");
    expect(wa.description_parties_privatives).toBe(wa.beschrijving_privatieve_delen);
    expect(wa.tuin_terras_balkon_of_ander_goed_in_exclusief_genot).toContain("terras");
    expect(wa.aandeel_gemene_delen).toContain("39/100");
    expect(wa.quote_part_parties_communes).toBe(wa.aandeel_gemene_delen);
    expect(wa.perceelsidentificatienummer_per_goed).toBe("0250V2P0002");
    expect(wa.datum_basisakte).toContain("2012");
    expect(wa.date_acte_de_base).toContain("2012");
    expect(wa.notaris_basisakte).toBe("Gaëlle Taton");
    expect(wa.notaire_acte_de_base).toBe("Gaëlle Taton");
  });

  it("kiest bij P- én G-score 'A' deterministisch de hypothese 'ligt niet in overstromingsgevoelig gebied' (NL + FR)", () => {
    // Volledig dossier heeft pScore/gScore "A" → specifieke variant, geen open
    // ligt-wel/ligt-niet-keuze meer in de overstromingssectie.
    // De KIES-string komt enkel in deze clausule voor → document-brede assertie.
    const nl = genereer("verkoopovereenkomst-heldere-taal", "Vlaanderen");
    expect(nl).toContain("ligt niet in een overstromingsgevoelig gebied");
    expect(nl).not.toContain("[KIES: ligt niet / ligt geheel of gedeeltelijk]");
    const fr = genereer("verkoopovereenkomst-heldere-taal-fr", "Vlaanderen");
    expect(fr).toContain("ne se trouve pas, entièrement ou partiellement, dans une zone inondable");
    expect(fr).not.toContain("[KIES: se trouve / ne se trouve pas]");

    // Met een niet-A-score blijft de generieke keuze staan (geen valse zekerheid).
    const zonder = genereer("verkoopovereenkomst-heldere-taal", "Vlaanderen", {
      attesten: { ...VOLLEDIG_INTAKE.attesten, overstroming: { pScore: "B", gScore: "A" } },
    });
    expect(zonder).toContain("[KIES: ligt niet / ligt geheel of gedeeltelijk]");
    expect(zonder).not.toContain("ligt niet in een overstromingsgevoelig gebied");
  });

  it("werkdossier-niveau: alle drie de pijlers vuren autonoom en zo deterministisch mogelijk (verkoop-met-krediet)", () => {
    const wd = stelWerkdossierSamenAutonoom(
      bouwDossier(),
      { modellen: seedModellen, onderdelen: seedOnderdelen, brieven: seedBrieven },
      "Vlaanderen"
    );
    // Pijler 1 — ontwerp: deterministisch modelgekozen, zeker.
    expect(wd.ontwerpakte.model?.id).toBe("verkoopovereenkomst-heldere-taal");
    expect(wd.ontwerpakte.akteTypeKeuze.zekerheid).toBe("zeker");
    // Pijler 2 — modelmails aanwezig (verkoopketen).
    expect(wd.modelmails.mails.length).toBeGreaterThan(0);
    // Pijler 3 — afrekening: verlaagd verkooprecht (eigen woning, expliciet in
    // het dossier), verkoopkosten én kredietaktekosten in één werkdossier.
    expect(wd.afrekening.registratiebelasting?.percentage).toBe(2);
    expect(wd.afrekening.aktekosten?.totaal).toBeGreaterThan(0);
    expect(wd.afrekening.aktekostenKrediet?.totaal).toBeGreaterThan(0);
    // Het generieke "algemeen tarief"-voorbehoud is weg (het regime is gekend).
    expect(wd.onzekerheden.some((o) => /algemeen tarief: indien de koper/i.test(o.boodschap))).toBe(false);
  });

  it("vult de schuldeiser uit het hypotheekattest in (hypothecaire toestand, klassiek model)", () => {
    const w = dossierNaarParameterwaarden(bouwDossier());
    expect(w.naam_schuldeiser).toBe("KBC Bank");
  });

  it("vult de huwelijkscontract-gegevens per partij in en de forfaitaire kredietvergoeding als geel gemarkeerde default", () => {
    const nl = genereer("verkoopovereenkomst-heldere-taal", "Vlaanderen");
    // Huwelijkscontract van de gehuwde verkoper (identiteitsclausule, per partij).
    expect(nl).toContain("Paul Maselis");
    expect(nl).not.toContain("[AAN TE VULLEN: notaris_huwelijkscontract]");
    expect(nl).not.toContain("[AAN TE VULLEN: plaats_huwelijkscontract]");
    expect(nl).not.toContain("[AAN TE VULLEN: datum_huwelijkscontract]");
    // Forfaitaire vergoeding (heldere-taal §5): Fednot-default 0,50%, ingevuld
    // i.p.v. open — de gele markering laat de notaris ze bevestigen.
    expect(nl).not.toContain("[AAN TE VULLEN: percentage_schadevergoeding]");
    expect(nl).toContain("0,50");
    const fr = genereer("verkoopovereenkomst-heldere-taal-fr", "Vlaanderen");
    expect(fr).not.toContain("[AAN TE VULLEN: pourcentage_indemnite]");
  });

  it("vult ook een latere wijziging van het huwelijksstelsel in (bv. uit een CRH-opzoeking), zonder het oorspronkelijke contract weg te laten", () => {
    // Regressiescenario (echt dossier): het oorspronkelijke huwelijkscontract
    // MOET behouden blijven naast de latere wijzigende akte — voorheen
    // ontbrak elk gegeven over de wijziging in het intake-contract, waardoor
    // een AI-agent zonder deterministisch alternatief het contractgedeelte
    // liet vallen.
    const nl = genereer("verkoopovereenkomst-heldere-taal", "Vlaanderen", {
      partijen: [
        { naam: "PEETERS", voornaam: "Jan", rol: "verkoper", geslacht: "man", burgerlijkeStaat: "gehuwd", echtgenoot: "MAES Lotte", huwelijksplaats: "Turnhout", huwelijksdatum: "1988-06-22", huwelijksstelsel: "scheiding van goederen", huwelijkscontractNotaris: "Christine Van Haeren", huwelijkscontractPlaats: "Turnhout", huwelijkscontractDatum: "1988-06-22", notarisWijzigingStelsel: "Fabienne Genicot", plaatsWijzigingStelsel: "Tervuren", datumWijzigingStelsel: "2023-04-17" },
        { naam: "JANSSENS", voornaam: "Sofie", rol: "koper", geslacht: "vrouw", burgerlijkeStaat: "ongehuwd" },
      ],
    });
    // Oorspronkelijk contract én latere wijziging staan BEIDE in de tekst.
    expect(nl).toContain("Christine Van Haeren");
    expect(nl).toContain("Fabienne Genicot");
    expect(nl).toContain("Tervuren");
    expect(nl).not.toContain("[AAN TE VULLEN: notaris_wijziging_stelsel]");
    expect(nl).not.toContain("[AAN TE VULLEN: plaats_wijziging_stelsel]");
    expect(nl).not.toContain("[AAN TE VULLEN: datum_wijziging_stelsel]");
  });

  it("bevat de Fednot-secties die eerder ontbraken: ondertekeningsblok, maatregelenregister, PFAS (NL + FR)", () => {
    const nl = genereer("verkoopovereenkomst-heldere-taal", "Vlaanderen");
    // Slotblok "Signatures" (papier/digitaal) — stond vóór 2026-07 niet in het model.
    expect(nl).toContain("Voor de partijen die digitaal ondertekenen");
    expect(nl).toContain("MAATREGELENREGISTER");
    // Het VOLLEDIG_INTAKE-dossier draagt de expliciete negatieve PFAS-feiten,
    // dus de compromis kiest de opgeloste "-vrij"-variant (geen open
    // no-regret-zone-KIES meer) — check de resulterende PFAS-verklaring.
    expect(nl).toContain("PFAS-no-regret-zone");
    const fr = genereer("verkoopovereenkomst-heldere-taal-fr", "Vlaanderen");
    expect(fr).toContain("REGISTRE DES MESURES");
    expect(fr).toContain("zone de non-regret (PFAS)");
    // Marchands de biens in de Brusselse/Waalse fiscale sectie.
    const brussel = genereer("verkoopovereenkomst-heldere-taal", "Brussel");
    expect(brussel).toContain("marchands de biens");
  });

  it("laat identiteit_partner OPEN wanneer er meerdere verkopers zijn (partner is dan doorgaans mede-verkoper)", () => {
    const w = dossierNaarParameterwaarden(
      bouwDossier({
        partijen: [
          ...VOLLEDIG_INTAKE.partijen,
          { naam: "MAES", voornaam: "Lotte", rol: "verkoper", geslacht: "vrouw", burgerlijkeStaat: "gehuwd", echtgenoot: "PEETERS Jan" },
        ],
      })
    );
    expect(w.identiteit_partner).toBeUndefined();
    expect(w.identite_partenaire).toBeUndefined();
  });

  it("de ingevulde slots verschijnen effectief in het gegenereerde compromis (geen [AAN TE VULLEN] meer voor gemapte namen)", () => {
    const nl = genereer("verkoopovereenkomst-heldere-taal", "Vlaanderen");
    for (const naam of ["rekening_koper", "rekening_derdenrekening", "kredietbedrag", "termijn_weken_krediet", "notaris_verkoper", "notaris_koper", "datum_eigendomsakte", "erfdienstbaarheden_titel", "identiteit_partner", "datum_stedenbouwkundig_uittreksel", "vergunningen_overzicht", "bestemming_plannenregister"]) {
      expect(nl, `NL: ${naam} hoort ingevuld te zijn`).not.toContain(`[AAN TE VULLEN: ${naam}]`);
    }
    const fr = genereer("verkoopovereenkomst-heldere-taal-fr", "Vlaanderen");
    for (const naam of ["compte_acquereur", "compte_tiers", "montant_credit", "delai_semaines_credit", "notaire_vendeur", "notaire_acquereur", "date_titre_propriete", "servitudes_titre", "identite_partenaire", "epc_code_unique", "epc_expert_energie", "reference_attestation_sol"]) {
      expect(fr, `FR: ${naam} hoort ingevuld te zijn`).not.toContain(`[AAN TE VULLEN: ${naam}]`);
    }
  });
});
