//  GEGENEREERD BESTAND, niet met de hand aanpassen.
//  Bron: dictionary/proat-dictionary.json
//  Regenereren: python3 dictionary/generate.py
//
//  Pack v7, bijgewerkt 2026-07-26: 326 woorden, 70 vervangregels.

import Foundation

/// De gecureerde woordenlijst van Proat, gedeeld met iOS en Windows.
enum DictionaryPack {

    static let packVersion = 7

    /// Tekenbudget voor de Voxtral-biasingprompt (zie MistralProvider).
    static let biasBudgetChars = 5000

    static let noaberRegexTrigger = #"/\bN[ao][a-z]{1,6}[.\s][ae]i\b/"#
    static let teKloezeRegexTrigger = #"/\b[TtDd]e\s+[ck]l[uo]+[a-z]{2,5}\b/"#

    static let vocabulary: [String] = [
        ".NET",
        "Aalten",
        "Achterhoek",
        "Achterhoeks",
        "activiteitsomschrijving",
        "afschrijvingstermijn",
        "age encryption",
        "Aloys",
        "Aloys Roemaat Transport",
        "Android Studio",
        "Anthropic",
        "Antigravity",
        "API",
        "App Store Connect",
        "Apple Silicon",
        "Auto Dries",
        "Auto Dries Aalten",
        "B2B",
        "B2C",
        "backup.noaber.ai",
        "balanspost",
        "Bart Hulshof",
        "Bart Lurvink",
        "Belastingdienst",
        "Beltrum",
        "Berentsen",
        "Berkelland",
        "Bitwarden",
        "Bocholt",
        "Borculo",
        "brand.noaber.ai",
        "Breukers",
        "Bronckhorst",
        "BTW",
        "btw-aangifte",
        "btw-id",
        "btw-nummer",
        "BubbelBal",
        "BubbelBrein",
        "Bun",
        "bw-unlock",
        "CamViewer",
        "camviewer.app",
        "CashSpot",
        "ChatGPT",
        "Chorus",
        "Claude",
        "Claude Code",
        "Claude Fable",
        "Claude Haiku",
        "Claude Opus",
        "Claude Sonnet",
        "claude-mem",
        "claudemem",
        "Cloudflare",
        "Cloudflare Access",
        "Cloudflare for SaaS",
        "Cloudflare Pages",
        "Cloudflare Tunnel",
        "Cloudflare Workers",
        "CodeMetClaude",
        "codemetclaude.nl",
        "Codex",
        "Codex CLI",
        "Core ML",
        "crediteur",
        "cron",
        "Cron Triggers",
        "Cursor",
        "Custom Hostnames",
        "D1",
        "debiteur",
        "Defender",
        "deploy",
        "Dinxperlo",
        "DNS records",
        "docs.helsdingen.com",
        "Doetinchem",
        "Dragon Computers",
        "eenmanszaak",
        "Eibergen",
        "ElevenLabs",
        "endpoint",
        "Enschede",
        "Enterprio",
        "Entra ID",
        "Eufy",
        "Expo",
        "Fable",
        "factuur",
        "factuurnummer",
        "FastAPI",
        "FiestaDePadel",
        "Firebird",
        "Firecrawl",
        "fiscale oudedagsreserve",
        "Frank Toebes",
        "FRICKE",
        "FRICKE Group",
        "Garritsen",
        "Gelderland",
        "Gemeente Oost Gelre",
        "Gemini",
        "Gendringen",
        "gigabyte",
        "GitHub",
        "GitHub Actions",
        "GPG",
        "Granit",
        "Granit Parts",
        "Groenlo",
        "grootboek",
        "grootboekrekening",
        "GSD",
        "Haaksbergen",
        "handelsnaam",
        "Handelsregister",
        "Hans Rikhof",
        "Harreveld",
        "Helsdingen",
        "helsdingen.com",
        "herzieningsregeling",
        "Homebrew",
        "Homey",
        "Hono",
        "HrSound",
        "Hulshof",
        "IB",
        "info@michelmedia.nl",
        "info@noaber.ai",
        "infra.michelmedia.nl",
        "infra.noaber.ai",
        "inkomstenbelasting",
        "Insify",
        "investeringsaftrek",
        "investeringsdrempel",
        "iTerm2",
        "jaarrekening",
        "Jurre",
        "JWT",
        "KIA",
        "kilobyte",
        "kilometeradministratie",
        "kleineondernemersregeling",
        "kleinschaligheidsinvesteringsaftrek",
        "Koen",
        "Koen Garritsen",
        "KOR",
        "KOR-grens",
        "Kotlin",
        "KV namespace",
        "KvK",
        "kwartaalaangifte",
        "Kwintet",
        "launchd",
        "Lichtenvoorde",
        "LimeGreen Holding",
        "Lurvink",
        "Lurvink Textiel",
        "Lurvink Textiel B.V.",
        "LXC",
        "M.F.M. Helsdingen",
        "M365",
        "Mac mini",
        "MacBook Pro",
        "Marketing Doctor",
        "Mart Schutten",
        "mbmail.noaber.ai",
        "MBP",
        "megabyte",
        "Michel Helsdingen",
        "Michel Media",
        "MichelMedia",
        "michelmedia.nl",
        "Microsoft 365",
        "Microsoft Graph",
        "MikeMemo",
        "Mistral",
        "Miweba",
        "MKB",
        "MKB-winstvrijstelling",
        "Moneybird",
        "Montferland",
        "NAS",
        "Nedersaksisch",
        "Neede",
        "Next.js",
        "NextDNS",
        "nihil-aangifte",
        "Noaber",
        "Noaber Mail Assistant",
        "noaber.ai",
        "Noaberschap",
        "Node.js",
        "NUC",
        "Ollama",
        "omzetbelasting",
        "omzetbelastingnummer",
        "Oost Gelre",
        "Oost-Gelderland",
        "OpenAI",
        "OpenRouter",
        "Oude IJsselstreek",
        "Paddle",
        "PadelClippy",
        "padelclippy.com",
        "Paperless-ngx",
        "PDOK",
        "Playwright",
        "Plex",
        "Postgres",
        "PowerShell",
        "Proat",
        "Proxmox",
        "PSD2",
        "Python",
        "Q3",
        "Q4",
        "QNAP",
        "Quick Slide",
        "Quick Slide B.V.",
        "QuickSlide",
        "R2",
        "ralph-loop",
        "Raycast",
        "rclone",
        "React Native",
        "recurring",
        "Reolink",
        "Resend",
        "restic",
        "resultatenrekening",
        "Rietberg",
        "Riooltechniek",
        "Roemaat",
        "Roemaat Transport",
        "RunPod",
        "Ruurlo",
        "SaaS",
        "SBI-code",
        "scheduled",
        "SDK",
        "SEPA-incasso",
        "SHA",
        "share.noaber.ai",
        "Shelly",
        "Silvolde",
        "Soulwise",
        "SpotBot",
        "SQLite",
        "startersaftrek",
        "status.noaber.ai",
        "Stripe",
        "Supabase",
        "superpowers",
        "SuperWhisper",
        "suppletie",
        "SwiftData",
        "SwiftUI",
        "Synology",
        "Syntess",
        "Syntess Atrium",
        "Syveon",
        "Tailscale",
        "te Kloeze",
        "Te Kloeze Riooltechniek",
        "Te Kloeze Riooltechniek B.V.",
        "tekloeze",
        "Telegram",
        "TelemetryDeck",
        "Terborg",
        "Terborgse HandelsOnderneming",
        "TestFlight",
        "Theo Lurvink",
        "THO",
        "THO Photobooth",
        "tmux",
        "TopView",
        "TopView CRM",
        "Twente",
        "TypeScript",
        "UDM",
        "Ulft",
        "UniFi",
        "urenadministratie",
        "urencriterium",
        "Vakwark",
        "Vakwark Installatietechniek",
        "Vakwark.ai",
        "Vario Fields",
        "Vario Grass",
        "Varsseveld",
        "Vaultwarden",
        "verzuimboete",
        "VoiceInk",
        "vooraftrek",
        "voorbelasting",
        "voorlopige aanslag",
        "Voxtral",
        "Vragender",
        "Vreden",
        "WABCO-CF dashboard",
        "WAF",
        "Wassink",
        "webhook",
        "Wehl",
        "Whisper",
        "winst-en-verliesrekening",
        "Winterswijk",
        "Wispr Flow",
        "Wisselink",
        "Wisselink Caravans",
        "Wonion",
        "worker",
        "worktree",
        "WPF",
        "wrangler",
        "WYKYK",
        "Xcode",
        "Xcode Cloud",
        "Zeddam",
        "zelfstandigenaftrek",
        "Zelhem",
        "Zieuwent",
        "zone",
        "ZZP",
    ]

    static let replacements: [(original: String, replacement: String)] = [
        (#"/\bN[ao][a-z]{1,6}[.\s][ae]i\b/"#, "Noaber.ai"),
        (#"/\b[TtDd]e\s+[ck]l[uo]+[a-z]{2,5}\b/"#, "Te Kloeze"),
        ("Aloïs Roemaat, Alois Roemaat, Alloys Roemaat, Aloys Rumaat, Aloys Roemaad, Aloise Roemaat", "Aloys Roemaat"),
        ("Otto Dries, Oto Dries, Auto Driest, Autodries, auto dries, Auto Dreis, Auto Drees", "Auto Dries"),
        ("Boggeld, Bogeld, Bog Held, Bochelt, Bocholdt", "Bocholt"),
        ("Bubbelbal, Bubbel Bal, Bubble Bal, Bubbleball, Bubble Ball", "BubbelBal"),
        ("Bubbelbrein, Bubbel Brein, Bubble Brein", "BubbelBrein"),
        ("Cam Viewer, Camviewer, Cam-Viewer", "CamViewer"),
        ("Claude Mem, CloudMem, Cloud Mem, claudemem, Cloud-mem, ClownMem, Clown Mem", "claude-mem"),
        ("Cloud Flare, Cloudflair, Cloudflaire", "Cloudflare"),
        ("Dinksperlo, Dinxperloo, Dinks Perlo, Dinkxperlo, Dinsperlo", "Dinxperlo"),
        ("Djefrey, Jeffry, Geoffrey, Jeffrey", "Djeffrey"),
        ("Djoey, Joey, Joeey, Joei", "Djoey"),
        ("check je geheugen", "doe een volledige semantic search in claude-mem. Wees grondig"),
        ("Eleven Labs, Elevenlabs, Elven Labs, Eleven Lapse", "ElevenLabs"),
        ("Enterprijo, Enterprijoo, Enter Prio, Enterpreo, Enterprijo's", "Enterprio"),
        ("Joefie, Youfy, Eufie, Joefy, Ufi", "Eufy"),
        ("Frikke, Vrikke, Frikkuh, Fricke, Frikkeh", "FRICKE"),
        ("graniet, Granied, Granniet, Graneet, Granniete", "Granit"),
        ("graniet parts, graniet-parts, Granietparts, Granit parts, Granit Partz, Granied Parts", "Granit Parts"),
        ("Hans Rikhoff, Hans Rikhoffen, Rikhoff, Rikhoffen, Rikhoffs", "Hans Rikhof"),
        ("HR Sound, H.R. Sound, HR-Sound, hrsound", "HrSound"),
        ("Insifi, In Sify, Insifai, Insifie", "Insify"),
        ("Kwintett, Kwintedt, Kwintette", "Kwintet"),
        ("Launch D, LaunchDee, launch dee", "launchd"),
        ("Lurvinck, Loervink, Lurving, Loervinck", "Lurvink"),
        ("Mart Schutte, Mark Schutten, Mart Schütten, Mart Schutting", "Mart Schutten"),
        ("Miveba, Mieveba, Mibeba, Mivebba, Mivenba", "Miweba"),
        ("Money Bird, Moneybirth, Money-bird", "Moneybird"),
        ("Nauber.ai, nobor.ai, nober.ai, nolberg.ai, Nolber.ai, Maulberg.ai, Naalberg.ai, Nolper.ai, Norepuntai, Nalbert.ai, Nalbert, Nalbert AI, noober punt ai, Noaber punt ai, nober punt ai, Nauber punt ai", "Noaber.ai"),
        ("noberschap, nooberschap, naberschap, nobelschap, noaberschap, Nobberschap, Naoberschap", "Noaberschap"),
        ("Olama, O Lama, Oh Lama, Ollamma, Olamma, Oh-lama", "Ollama"),
        ("Open Router, OpenRouta, Open Rooter, Openroute", "OpenRouter"),
        ("Padel Clippy, Padelclippy, Paddle Clippy, Padel Klippie", "PadelClippy"),
        ("Taterlust, Tatterlust, Taterloest, Paper Lust, Paperlust", "Paperless"),
        ("Pedok, P Dok, Pee Dok", "PDOK"),
        ("Quick Slide, Quickslide, Kwik Slide, Kwikslide", "QuickSlide"),
        ("Ray Cast, Raycasts, Rijcast, Rei Cast", "Raycast"),
        ("Reo Link, Realink, Rio Link, Reolinck", "Reolink"),
        ("Restik, Res Tick, restick, Rest Tick, Restiek", "restic"),
        ("Roemaad, Rumaat, Roemat, Ruimaat, Roomaat, Rue Maat, Roe Maat, roemaat, Roemaate, Ruhmaat", "Roemaat"),
        ("Run Pod, Runpott, Ranpod, Run Pot", "RunPod"),
        ("Sjelly, Shellie, Chelly, Sjellie", "Shelly"),
        ("Supa Base, Soepabase, Superbase, Supabased", "Supabase"),
        ("Swift Data, Sviftdata, Swiftdata", "SwiftData"),
        ("Sintess, Syntes, Sintes, Sinteks, Syntex, Sin Tess", "Syntess"),
        ("Tillskew, Tilskew, Tail Skew, Tailskill, Tail Skill, Tale Scale", "Tailscale"),
        ("te kloes, de kloes, te kluizen, Te Clouse, Te Kluger, Tecloze, te closer, Te Kloos, kloezee, te kluis, tekluizen, Tekloeze, te kloeze", "Te Kloeze"),
        ("Te Kloeze Riool techniek, Te Kloeze Riooltegniek", "Te Kloeze Riooltechniek"),
        ("Telemetry Deck, TelemetrieDeck, Telemetrie Deck, Telemetry-Deck", "TelemetryDeck"),
        ("Terborgse Handelsonderneming, Terborgs Handelsonderneming, Terborgse Handels Onderneming", "Terborgse HandelsOnderneming"),
        ("Test Flight, Testflide, Testflight, Test-flight", "TestFlight"),
        ("Topview, Top View, Top-view", "TopView"),
        ("vakwerk, Vak Werk, vakwark, Vakwerks, Vakwarck", "Vakwark"),
        ("vakwerk.ai, vakwerk punt ai, Vakwerk AI, Vakwerk-AI, vakwark punt ai, Vakwark AI, Vak Wark", "Vakwark.ai"),
        ("Vario Fiels, Vario Field, Variofields, Vario Fielts", "Vario Fields"),
        ("Vario Gras, Variogras, Vario-gras, Vario Grasz, Wario Grass, Vario Graz", "Vario Grass"),
        ("Varseveld, Varsselveld, Vars Veld, Varseveldt", "Varsseveld"),
        ("fault worden, faultworden, vault worden, fold worden, Vault Warden, Voltwarden, Vaultwarde", "Vaultwarden"),
        ("Voice Ink, Voisink, Voys Ink, Voice-ink, Voysink", "VoiceInk"),
        ("Vokstral, Voxtrall, Vox Tral, Foxtral, Vokstraal, Voxtraal, Vox traal", "Voxtral"),
        ("Wassinck, Wasink, Wassing, Wasinck", "Wassink"),
        ("Winterswijk, Wenterswijk, Winters wijk, Wintersweik", "Winterswijk"),
        ("Wisselinck, Wisselings, Wiesselink, Wisselinks, Wissel Link", "Wisselink"),
        ("Wisselink Karavans, Wisselink Caravan, Wisselinck Caravans", "Wisselink Caravans"),
        ("Wonion, Whoonion, Voonion", "Wonion"),
        ("Rangler, Wranggler, Wrangeler, Wranglr", "wrangler"),
        ("Ex Code, X-code, Exkode, Ex-code, Iks code", "Xcode"),
        ("Seddam, Zeddem, Zedam, Zed Dam", "Zeddam"),
        ("Zelhem, Zellem, Sel Hem, Zelhemme", "Zelhem"),
    ]
}
