import { describe, it, expect } from "vitest";
// ── Gouden-pad bewaking: het heldere-taal-compromis ──────────────────────────
// Het compromis (heldere taal) is het referentie-pad van het einddoel. Deze
// test bewaakt de "noordster-metriek": uit een realistisch, volledig dossier
// moet het werkdocument zo deterministisch mogelijk ingevuld worden — minimale
// open hypothesekeuzes en geen onnodig open velden voor gegevens die wél in het
// dossier zitten. Faalt deze test, dan is het gouden pad geregresseerd.
import { dossierVeldenUitIntake, maakDossierUitIntakeResultaat, DOSSIER_INTAKE_SCHEMA } from "./intake";
import { stelWerkdossierSamenAutonoom } from "./werkdossier";
import { dossierNaarKeuzes, dossierNaarParameterwaarden, dossierNaarPartijHerhalingen } from "./parameters";
import { maakVeld, type Dossier } from "./types";
import { seedModellen, seedOnderdelen } from "@/data/modeldocumenten";
import { genereerDocument, pasKeuzesToe, verwijderOpmaakMarkers } from "@/data/modeldocumenten/samenstellen";
import { seedBrieven } from "@/data/modelbrieven";
import { euroVolledig } from "@/lib/format";

const COMPROMIS_JSON = {
  schema: DOSSIER_INTAKE_SCHEMA,
  dossiertype: "verkoop-met-krediet",
  verkoopdocument: "compromis",
  referentie: "2026/0456",
  bron: "compromis",
  gebruik: "vrij",
  zonnepanelen: false,
  partijen: [
    { naam: "PEETERS", voornaam: "Jan", rol: "verkoper", geslacht: "man", burgerlijkeStaat: "ongehuwd", geboortedatum: "1965-02-20", geboorteplaats: "Mechelen", adres: "Kerkstraat 8, 3080 Tervuren" },
    { naam: "MAES", voornaam: "Sofie", rol: "koper", geslacht: "vrouw", burgerlijkeStaat: "ongehuwd", geboortedatum: "1980-03-03", geboorteplaats: "Leuven", adres: "Dorpsstraat 2, 3000 Leuven" },
  ],
  goed: { adres: "Bosstraat 45, 3080 Tervuren", type: "woning", gemeente: "Tervuren", sectie: "C", perceelnummer: "88/B", kadastraalInkomen: 1320, oppervlakte: 540 },
  prijs: 395000,
  voorschot: 39500,
  compromisdatum: "2026-05-12",
  attesten: {
    epc: { datum: "2026-01-15", nummer: "EPC-987", label: "D", geldigTot: "2036-01-15", verbruik: 245 },
    bodem: { datum: "2026-05-02", inhoud: "blanco" },
    elektrischeKeuring: { organisme: "Vinçotte", datum: "2026-05-10", conclusie: "conform" },
  },
};

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

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

/** Het stuk tekst van `idx` tot de volgende clausulekop ("## ") of groepsbanner ("==="), om één onderdeel te isoleren zonder latere, ongerelateerde clausules mee te nemen. */
function sectie(tekst: string, idx: number): string {
  const m = /\n(?:## |===)/.exec(tekst.slice(idx + 1));
  return m ? tekst.slice(idx, idx + 1 + m.index) : tekst.slice(idx);
}

const KIES_NL_OF_FR = /KIES DE TOEPASSELIJKE HYPOTHESE EN SCHRAP DE OVERIGE:|CHOISIR L'HYPOTHÈSE APPLICABLE ET SUPPRIMER LES AUTRES/g;

describe("Gouden pad — heldere-taal-compromis", () => {
  it("kiest deterministisch het heldere-taal-compromis als model", () => {
    const wd = stelWerkdossierSamenAutonoom(
      bouwDossier(),
      { modellen: seedModellen, onderdelen: seedOnderdelen, brieven: seedBrieven },
      "Vlaanderen"
    );
    expect(wd.ontwerpakte.akteTypeKeuze.akteType).toBe("verkoopovereenkomst (compromis) - heldere taal");
    expect(wd.ontwerpakte.akteTypeKeuze.zekerheid).toBe("zeker");
    expect(wd.ontwerpakte.model?.id).toBe("verkoopovereenkomst-heldere-taal");
  });

  it("laat bij een volledig dossier GEEN enkele open hypothesekeuze over (NL)", () => {
    const aantalKies = (ontwerptekst().match(KIES_NL_OF_FR) ?? []).length;
    expect(aantalKies).toBe(0);
  });

  it("laat bij een volledig dossier GEEN enkele open hypothesekeuze over (FR-spiegel)", () => {
    const aantalKies = (ontwerptekst("verkoopovereenkomst-heldere-taal-fr").match(KIES_NL_OF_FR) ?? []).length;
    expect(aantalKies).toBe(0);
  });

  // De KIES_NL_OF_FR-marker signaleert enkel onopgeloste keuzes tussen
  // ONDERDEEL-VARIANTEN; interne, in de clausuletekst zelf ingebakken em-
  // dash-keuzes ("[KIES — A. ... / B. ...]", bv. bij EPC/asbest) worden er NIET
  // door gevat. Deze tests bewaken die specifiek, met de exacte inhoud.
  it("kiest bij een gekend EPC deterministisch de hypothese 'EPC bestaat' (geen open A-E-keuze meer)", () => {
    for (const id of ["verkoopovereenkomst-heldere-taal", "verkoopovereenkomst-heldere-taal-fr"]) {
      const tekst = ontwerptekst(id);
      const idx = tekst.search(/DE ENERGIEPRESTATIE|PERFORMANCE ÉNERGÉTIQUE/);
      const sectieTekst = sectie(tekst, idx);
      expect(sectieTekst).not.toContain("[KIES -");
      expect(sectieTekst).toMatch(/Er is een EPC voor het woongebouw opgesteld|Un certificat EPC est établi pour l'habitation/);
    }
  });

  it("kiest bij een gekend asbestinventarisattest deterministisch de hypothese 'attest aanwezig'", () => {
    const overrides = {
      attesten: {
        epc: { datum: "2026-01-15", nummer: "EPC-987", label: "D", geldigTot: "2036-01-15", verbruik: 245 },
        bodem: { datum: "2026-05-02", inhoud: "blanco" },
        elektrischeKeuring: { organisme: "Vinçotte", datum: "2026-05-10", conclusie: "conform" },
        asbest: { datum: "2026-04-01", nummer: "UC-123", conclusie: "Geen asbest aangetroffen." },
      },
    };
    for (const id of ["verkoopovereenkomst-heldere-taal", "verkoopovereenkomst-heldere-taal-fr"]) {
      const tekst = ontwerptekst(id, "Vlaanderen", overrides);
      const idx = tekst.search(/ASBESTINVENTARISATTEST|D'INVENTAIRE D'AMIANTE/);
      const sectieTekst = sectie(tekst, idx);
      expect(sectieTekst).not.toContain("[KIES -");
      expect(sectieTekst).toContain("UC-123");
      const w = dossierNaarParameterwaarden(bouwDossier(overrides));
      expect(w.asbestattest_uc).toBe("UC-123");
      expect(w.amiante_code_unique).toBe("UC-123");
    }
  });

  it("kiest bij een gekend antwoord deterministisch de hypothese van het wettelijk voorkooprecht (geen open A/B-keuze meer)", () => {
    for (const [waarde, verwacht] of [
      [false, /De verkoper verklaart dat er voor het goed geen wettelijk of contractueel voorkooprecht|le vendeur déclare qu'il n'existe, sur le bien vendu, aucun droit de préemption/],
      // FR-documenten dragen sinds het kwaliteitsnazicht (2026-07-10) FR-markers
      // ([À COMPLÉTER: …]) — genereerDocument vertaalt ze nu zelf.
      [true, /\[AAN TE VULLEN: omschrijving_voorkooprecht\]|\[(?:AAN TE VULLEN|À COMPLÉTER): description_droit_preemption\]/],
    ] as const) {
      for (const id of ["verkoopovereenkomst-heldere-taal", "verkoopovereenkomst-heldere-taal-fr"]) {
        const tekst = ontwerptekst(id, "Vlaanderen", { wettelijkVoorkooprecht: waarde });
        const idx = tekst.search(/VOORKOOPRECHT|PRÉEMPTION/);
        const sectieTekst = sectie(tekst, idx);
        expect(sectieTekst).not.toContain("[KIES -");
        expect(sectieTekst).toMatch(verwacht);
      }
    }
  });

  it("kiest bij een gekend fiscaal regime deterministisch de hypothese van registratiebelasting/btw (geen open A/B/C-keuze meer)", () => {
    for (const [regime, verwacht] of [
      ["registratiebelasting", /volledig onder de registratiebelasting valt|entièrement réalisée sous le régime des droits d'enregistrement/],
      ["btw", /voor zover de wettelijke voorwaarden vervuld zijn, onder de btw-regels valt|sous le régime de la TVA, si les conditions légales sont remplies/],
      ["gemengd", /deels onder de registratiebelasting en deels onder de btw-regelgeving valt|en partie sous le régime des droits d'enregistrement et en partie sous le régime de la TVA/],
    ] as const) {
      for (const id of ["verkoopovereenkomst-heldere-taal", "verkoopovereenkomst-heldere-taal-fr"]) {
        const tekst = ontwerptekst(id, "Vlaanderen", { fiscaalRegime: regime });
        const idx = tekst.search(/REGISTRATIEBELASTING EN BTW|DÉCLARATIONS FISCALES/);
        const sectieTekst = sectie(tekst, idx);
        expect(sectieTekst).not.toContain("[KIES -");
        expect(sectieTekst).toMatch(verwacht);
      }
    }
  });

  it("kiest bij mede-eigendom en een gekend antwoord deterministisch de hypothese van het voorrecht van de VME (geen open A/B-keuze meer)", () => {
    const appartement = { type: "appartement", adres: "Bosstraat 45, 3080 Tervuren", gemeente: "Tervuren", sectie: "C", perceelnummer: "88/B", kadastraalInkomen: 1320, oppervlakte: 90 };
    for (const [waarde, verwacht] of [
      [false, /gaat akkoord dat de notaris het bedrag van de lasten en achterstallen betaalt|donne son accord pour que le notaire paie le montant des charges/],
      [true, /betwist het bedrag van de lasten en achterstallen|conteste le montant des charges et arriérés/],
    ] as const) {
      for (const id of ["verkoopovereenkomst-heldere-taal", "verkoopovereenkomst-heldere-taal-fr"]) {
        const tekst = ontwerptekst(id, "Vlaanderen", { goed: appartement, syndicusStatus: "geantwoord", medeEigendomLastenBetwist: waarde });
        const idx = tekst.search(/Voorrecht van de vereniging|Privilège de l'association/);
        const sectieTekst = sectie(tekst, idx);
        expect(sectieTekst).not.toContain("[KIES -");
        expect(sectieTekst).toMatch(verwacht);
      }
    }
  });

  it.each(["Vlaanderen", "Brussel", "Wallonië"] as const)(
    "laat bij een volledig dossier in %s GEEN enkele open hypothesekeuze over (NL + FR)",
    (gewest) => {
      expect((ontwerptekst("verkoopovereenkomst-heldere-taal", gewest).match(KIES_NL_OF_FR) ?? []).length).toBe(0);
      expect((ontwerptekst("verkoopovereenkomst-heldere-taal-fr", gewest).match(KIES_NL_OF_FR) ?? []).length).toBe(0);
    }
  );

  it("laat bij een appartement met gekende syndicusstatus GEEN enkele open hypothesekeuze over (mede-eigendom, NL + FR)", () => {
    const overrides = {
      goed: { adres: "Bosstraat 45, 3080 Tervuren", type: "appartement", gemeente: "Tervuren", sectie: "C", perceelnummer: "88/B", kadastraalInkomen: 1320, oppervlakte: 90 },
      syndicusStatus: "geantwoord",
    };
    expect((ontwerptekst("verkoopovereenkomst-heldere-taal", "Vlaanderen", overrides).match(KIES_NL_OF_FR) ?? []).length).toBe(0);
    expect((ontwerptekst("verkoopovereenkomst-heldere-taal-fr", "Vlaanderen", overrides).match(KIES_NL_OF_FR) ?? []).length).toBe(0);
  });

  it("vult de gegevens die in het dossier zitten ook werkelijk in (geen onnodig open velden)", () => {
    const w = dossierNaarParameterwaarden(bouwDossier());
    // Recent toegevoegde, veilig afleidbare invullingen op het gouden pad.
    expect(w.ki_niet_geindexeerd).toBe("1.320"); // niet-geïndexeerd KI, kale cijfers
    expect(w.bedrag_waarborg).toBe(euroVolledig(39500)); // waarborg = voorschot, mét muntsymbool
    expect(w.bedrag_waarborg_voluit).toContain("duizend"); // voluit in letters
    expect(w.saldo_prijs).toBe(euroVolledig(355500)); // prijs - voorschot, mét muntsymbool
    expect(w.saldo_prijs_voluit).toContain("duizend");
    expect(w.huidig_gebruik_goed).toBe("eengezinswoning"); // uit goedType
    expect(w.kantoor_ondertekening).toBeTruthy();
    expect(w.verbruik_epc).toBe("245"); // EPC-energieverbruik (kWh/m²)
    expect(w.consommation_epc).toBe("245"); // FR-spiegel
  });

  it("toont bedragen zonder dubbele munt: prijs in cijfers mét muntsymbool, voluit in letters (NL + FR)", () => {
    for (const id of ["verkoopovereenkomst-heldere-taal", "verkoopovereenkomst-heldere-taal-fr"]) {
      const tekst = ontwerptekst(id);
      // Geen "€ … EUR"-dubbeling meer op het gouden pad.
      expect(tekst).not.toMatch(/€\s*[\d.,]+\s*EUR/);
      // De prijs in cijfers staat als "€ …,00", zonder overbodige "EUR"-suffix
      // (de bedragmarkeringen rond het vet weergegeven cijfer genegeerd).
      expect(tekst).toMatch(/€\s*[\d.]+,\d{2}\W*\)/);
    }
  });

  it("de uiterste aktedatum is de vaste standaardtermijn (vier maanden na ondertekening), geen berekende datum", () => {
    expect(verwijderOpmaakMarkers(ontwerptekst())).toContain("wordt ondertekend binnen vier maanden na de ondertekening van deze overeenkomst door alle partijen");
    expect(verwijderOpmaakMarkers(ontwerptekst("verkoopovereenkomst-heldere-taal-fr"))).toContain("sera signé dans les quatre mois de la signature de la présente convention par toutes les parties");
  });

  it("vult ook de Franstalige spiegelparameters in (parity met de NL-invullingen)", () => {
    const w = dossierNaarParameterwaarden(bouwDossier());
    expect(w.rc_non_indexe).toBe(w.ki_niet_geindexeerd); // niet-geïndexeerd KI
    expect(w.affectation_actuelle_bien).toBe("maison unifamiliale"); // FR usage
    expect(w.lieu_signature).toBe(w.plaats_ondertekening); // plaats ondertekening
    expect(w.montant_garantie).toBe(w.bedrag_waarborg); // waarborg
    expect(w.prix_lettres).toBe(w.prijs_letters); // prijs voluit
  });

  it("zet de identiteit van koper(s)/verkoper(s) op een eigen regel (KOPER EN VERKOPER), niet aaneengeplakt", () => {
    // Twee niet-gekoppelde kopers: elk een eigen, duidelijk gescheiden alinea
    // (regressie tegen de eerder vastgestelde fout waarbij de identiteit
    // mid-zin werd geplakt aan een letterlijke tekst-hint erna).
    const dossier = bouwDossier();
    dossier.partijen = maakVeld(
      [
        { naam: "DUBOIS", voornaam: "Marc", rol: "koper", geslacht: "man", burgerlijkeStaat: "ongehuwd" },
        { naam: "VAN DEN BERGHE", voornaam: "Tom", rol: "koper", geslacht: "man", burgerlijkeStaat: "ongehuwd" },
      ],
      "compromis"
    );
    const model = seedModellen.find((m) => m.id === "verkoopovereenkomst-heldere-taal")!;
    const keuzes = pasKeuzesToe(model, dossierNaarKeuzes(dossier, "Vlaanderen"));
    const waarden = dossierNaarParameterwaarden(dossier);
    const tekst = genereerDocument(model, seedOnderdelen, keuzes, waarden, dossierNaarPartijHerhalingen(dossier));
    const idx = tekst.indexOf("KOPER EN VERKOPER");
    const sectie = verwijderOpmaakMarkers(tekst.slice(idx, idx + 900));
    // Geen letterlijke invulhint meer geplakt aan het einde van de identiteit.
    expect(sectie).not.toContain("(naam, voornamen, adres, burgerlijke staat");
    // "De koper(s):" staat op haar eigen regel, gevolgd door elke koper op een
    // eigen, gescheiden regel met volgnummer (twee afzonderlijke kopers) — via
    // de canonieke clausule "identiteit-partijen".
    expect(sectie).toContain("De koper(s):\n1. De heer DUBOIS Marc,");
    expect(sectie).toContain("2. De heer VAN DEN BERGHE Tom,");
    // Elke koper netjes afgewerkt (eigen alinea), niet aaneengeplakt.
    expect(sectie).toMatch(/1\. De heer DUBOIS Marc,[^\n]*\n\n2\. De heer VAN DEN BERGHE Tom,/);
  });

  it("een gehuwd koppel dat samen één partij vormt: één regel, geen overbodig volgnummer, beide namen vet", () => {
    const dossier = bouwDossier();
    dossier.partijen = maakVeld(
      [
        { naam: "PEETERS", voornaam: "Jan", rol: "verkoper", geslacht: "man", burgerlijkeStaat: "gehuwd", echtgenoot: "MAES Lotte", huwelijksplaats: "Leuven", huwelijksdatum: "1990-06-01", huwelijksstelsel: "scheiding van goederen", geboorteplaats: "Mechelen", geboortedatum: "1965-02-20", adres: "Kerkstraat 8, 3080 Tervuren" },
        { naam: "MAES", voornaam: "Lotte", rol: "verkoper", geslacht: "vrouw", burgerlijkeStaat: "gehuwd", echtgenoot: "PEETERS Jan", huwelijksplaats: "Leuven", huwelijksdatum: "1990-06-01", huwelijksstelsel: "scheiding van goederen", geboorteplaats: "Leuven", geboortedatum: "1967-03-03", adres: "Kerkstraat 8, 3080 Tervuren" },
      ],
      "compromis"
    );
    const w = dossierNaarParameterwaarden(dossier).identiteit_verkopers;
    expect(w).not.toMatch(/^\d+\. /); // één koppel = geen overbodig volgnummer
    expect(w).toContain("PEETERS Jan"); // beide partijnamen aanwezig
    expect(w).toContain("MAES Lotte");
    // Beide namen vet gemarkeerd (zelf partij), elk binnen eigen vet-markers.
    const vetDelen = w.match(/\uE000([^\uE001]*)\uE001/g) ?? [];
    expect(vetDelen.some((d) => d.includes("PEETERS Jan"))).toBe(true);
    expect(vetDelen.some((d) => d.includes("MAES Lotte"))).toBe(true);
  });

  it("beschrijft een mede-eigendom zonder syndicus als informeel beheer (geen valse verklaring over bezorgde notulen, NL + FR)", () => {
    const appartement = { type: "appartement", adres: "Bosstraat 45, 3080 Tervuren", gemeente: "Tervuren", sectie: "C", perceelnummer: "88/B", kadastraalInkomen: 1320, oppervlakte: 90 };
    for (const [id, verwacht, nietVerwacht] of [
      [
        "verkoopovereenkomst-heldere-taal",
        /in onderling akkoord tussen de eigenaars gebeurt, zonder syndicus en zonder geformaliseerde algemene vergadering/,
        /notulen van de algemene vergadering van mede-eigenaars van de laatste 3 jaar aan de koper te hebben bezorgd/,
      ],
      [
        "verkoopovereenkomst-heldere-taal-fr",
        /la gestion de l'immeuble est organisée de commun accord entre les propriétaires, sans syndic ni assemblée générale formalisée/,
        /avoir remis les procès-verbaux de l'assemblée générale des copropriétaires des 3 dernières années/,
      ],
    ] as const) {
      const tekst = ontwerptekst(id, "Vlaanderen", { goed: appartement, syndicusStatus: "geen-syndicus", medeEigendomLastenBetwist: false });
      const idx = tekst.search(/STATUTEN VAN MEDE-EIGENDOM|STATUTS DE COPROPRIÉTÉ/);
      const sectieTekst = sectie(tekst, idx);
      expect(sectieTekst).not.toContain("[KIES -");
      expect(sectieTekst).toMatch(verwacht);
      expect(sectieTekst).not.toMatch(nietVerwacht); // oude, tegenstrijdige tekst is weg
    }
  });

  it("volgt het dossier ook op tot aan de ondertekening (vierde pijler: termijnen + route)", () => {
    const wd = stelWerkdossierSamenAutonoom(
      bouwDossier({ kredietofferte: { bank: "KBC", bedrag: 300000, aanvaard: false, termijnWeken: 4 } }),
      { modellen: seedModellen, onderdelen: seedOnderdelen, brieven: seedBrieven },
      "Vlaanderen",
      "nl",
      undefined,
      "2026-06-01"
    );
    // De termijnen zijn deterministisch uit het compromis berekend.
    const krediet = wd.opvolging.termijnen.find((t) => t.id === "opschortende-voorwaarde-krediet");
    const akte = wd.opvolging.termijnen.find((t) => t.id === "uiterste-datum-akte");
    expect(krediet?.vervaldatum).toBe("2026-06-09"); // compromis 12 mei + 4 weken
    expect(akte?.vervaldatum).toBe("2026-09-12"); // compromis 12 mei + 4 maanden
    // De huidige fase is gemarkeerd en draagt concrete acties.
    expect(wd.opvolging.huidigeStap?.status).toBe("ontwerp-in-opmaak");
    expect(wd.opvolging.huidigeStap?.acties.length).toBeGreaterThan(0);
    // De nakende kredietvervaldag wordt als opvolgings-onzekerheid gemeld, mét suggestie.
    const vlag = wd.onzekerheden.find((o) => o.pijler === "opvolging" && /vervalt binnen/.test(o.boodschap));
    expect(vlag).toBeDefined();
    expect(vlag?.suggestie).toMatch(/notaris/i);
  });

  it("vult de EPC-identificatie op het gouden pad in (unieke code = certificaatnummer; energiedeskundige/refertenummer bodem indien gekend)", () => {
    const w = dossierNaarParameterwaarden(bouwDossier());
    // Voorheen bleef {{epc_unieke_code}} als [AAN TE VULLEN] staan op élk Vlaams
    // woning-compromis, hoewel het EPC-nummer in het dossier zit.
    expect(w.epc_unieke_code).toBe("EPC-987");
    expect(w.epc_certificaatnummer).toBe("EPC-987");
    // NL PEB-spiegels (Brussel/Wallonië) worden mee ingevuld — voorheen bleven
    // {{datum_peb}} en {{geldigheid_peb}} als [AAN TE VULLEN] staan (FR werd wél gevuld).
    expect(w.datum_peb).toBe(w.datum_epc);
    expect(w.geldigheid_peb).toBe(w.geldigheid_epc);

    // Nieuwe optionele attestvelden: gekend → deterministisch ingevuld.
    const wMet = dossierNaarParameterwaarden(
      bouwDossier({
        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" },
          elektrischeKeuring: { organisme: "Vinçotte", datum: "2026-05-10", conclusie: "conform" },
        },
      })
    );
    expect(wMet.epc_energiedeskundige).toBe("Ir. J. Peeters");
    expect(wMet.refertenummer_bodemattest).toBe("OVAM-2026-00123");

    // De EPC-clausule toont de unieke code, niet langer [AAN TE VULLEN: epc_unieke_code].
    const tekst = ontwerptekst();
    const sectieTekst = sectie(tekst, tekst.search(/DE ENERGIEPRESTATIE/));
    expect(sectieTekst).not.toContain("[AAN TE VULLEN: epc_unieke_code]");
    expect(sectieTekst).toContain("EPC-987");
  });
});
