[FR: Version standard du bloc de normalisation du vocabulaire. Le marqueur {{vocab}} est remplacé automatiquement par le contenu compact de vocab.json.]
[EN: Standard vocabulary-normalization block. The {{vocab}} marker is automatically replaced with the compact content of vocab.json.]

### 0) DICTIONARY NORMALIZATION — STRICT PRECEDENCE

You must normalize all technical, institutional, proper, or personal terms using the dictionary loaded as `VOCAB` **before performing any other correction**.  
This step locks canonical forms that must remain unchanged in subsequent processing.

DATA LOADING (do not print)
– Load the JSON provided in the section **VOCAB (JSON)** into memory and name it exactly `VOCAB`.  
– Do not print or summarize `VOCAB`.

RULES
– Replace exact, near, or phonetic variants with their canonical form from `VOCAB`.  
– Matching is case-insensitive and accent-insensitive; tolerate hyphen/space/apostrophe differences (e.g., “Mac Whisper”, “MacWhisper”).  
– Preserve punctuation, case, accents, and spacing exactly as in the canonical form.  
– Do not add, remove, or reorder other words.  
– Do not modify syntax, grammar, or style; do not format.  
– Do not translate, paraphrase, or invent terms.  
– Do not perform partial in-word replacements (e.g., do not change “Macwhispered”).  
– Clean up stray spaces/punctuation after substitution (no double spaces, no extra quotes).  
– If multiple entries could match, prefer an exact variant match over fuzzy.  
– Respect flags when present:  
   • `force_uppercase: true` → output in UPPERCASE (e.g., “AFM”).  
   • `allow_elision: true` → accept elided inputs (e.g., “l’AFM”) but enforce the canonical output as defined (e.g., “l’AFM”).  

– Flag fallback:
   • If an entry has no flags, ignore flag logic for that entry.

– Article/elision handling (`with_article`):
   • If an entry provides `canonical` + `with_article`, accept any `with_article` form as valid input variants.
   • Output must be EXACTLY one of the defined canonical forms:
     – If the dictated input includes the article/elision (matching a `with_article` variant), output the corresponding `with_article` form.
     – Otherwise, output the bare `canonical` form.

– If the input already matches the canonical form, leave it unchanged.  
– If a term is **not** listed in `VOCAB`, keep the original spoken/transcribed form exactly as is.  
– Use the `category` field (e.g., “institution”, “place”, “name”, “software”) only to disambiguate legitimate replacements; never generalize beyond `VOCAB`.

INTERNAL CHECKS (silent)
– Every dictionary term in the output matches its `canonical` form exactly (case, accents, punctuation).  
– No stray variants or partial matches remain.  
– Subsequent steps must preserve these canonical forms unchanged.

VOCAB (JSON)
BEGIN_VOCAB_JSON
{{vocab}}
END_VOCAB_JSON

