[{"data":1,"prerenderedAt":792},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-03-le-comptoir-01-architecture-05-overriding-04-contrats-de-donnees":307,"-fr-03-le-comptoir-01-architecture-05-overriding-04-contrats-de-donnees-surround":787},[4,26,59,191,248,269,286],{"title":5,"path":6,"stem":7,"children":8,"page":25},"Démarrage","\u002Ffr\u002F01-demarrage","fr\u002F01-demarrage",[9,13,17,21],{"title":10,"path":11,"stem":12},"Présentation","\u002Ffr\u002F01-demarrage\u002F01-presentation","fr\u002F01-demarrage\u002F01-presentation",{"title":14,"path":15,"stem":16},"Public cible","\u002Ffr\u002F01-demarrage\u002F02-public-cible","fr\u002F01-demarrage\u002F02-public-cible",{"title":18,"path":19,"stem":20},"Pourquoi ces outils","\u002Ffr\u002F01-demarrage\u002F03-pourquoi-ces-outils","fr\u002F01-demarrage\u002F03-pourquoi-ces-outils",{"title":22,"path":23,"stem":24},"Parcours recommandé","\u002Ffr\u002F01-demarrage\u002F04-parcours-recommande","fr\u002F01-demarrage\u002F04-parcours-recommande",false,{"title":27,"path":28,"stem":29,"children":30,"page":25},"DBT","\u002Ffr\u002F02-dbt","fr\u002F02-dbt",[31,35,39,43,47,51,55],{"title":32,"path":33,"stem":34},"Présentation DBT","\u002Ffr\u002F02-dbt\u002F01-presentation-dbt","fr\u002F02-dbt\u002F01-presentation-dbt",{"title":36,"path":37,"stem":38},"Profils, cibles et projets","\u002Ffr\u002F02-dbt\u002F02-profils-cibles-et-projets","fr\u002F02-dbt\u002F02-profils-cibles-et-projets",{"title":40,"path":41,"stem":42},"Commandes de base","\u002Ffr\u002F02-dbt\u002F03-commandes-de-base","fr\u002F02-dbt\u002F03-commandes-de-base",{"title":44,"path":45,"stem":46},"Seeds, models et tests","\u002Ffr\u002F02-dbt\u002F04-seeds-models-tests","fr\u002F02-dbt\u002F04-seeds-models-tests",{"title":48,"path":49,"stem":50},"Sélection, tags et dépendances","\u002Ffr\u002F02-dbt\u002F05-selection-tags-et-dependances","fr\u002F02-dbt\u002F05-selection-tags-et-dependances",{"title":52,"path":53,"stem":54},"Documentation dbt et lineage","\u002Ffr\u002F02-dbt\u002F06-documentation-dbt-et-lineage","fr\u002F02-dbt\u002F06-documentation-dbt-et-lineage",{"title":56,"path":57,"stem":58},"Orchestration","\u002Ffr\u002F02-dbt\u002F07-orchestration","fr\u002F02-dbt\u002F07-orchestration",{"title":60,"path":61,"stem":62,"children":63,"page":25},"Le comptoir","\u002Ffr\u002F03-le-comptoir","fr\u002F03-le-comptoir",[64,138,166],{"title":65,"path":66,"stem":67,"children":68,"page":25},"Architecture","\u002Ffr\u002F03-le-comptoir\u002F01-architecture","fr\u002F03-le-comptoir\u002F01-architecture",[69,93,97,114,118],{"title":65,"path":70,"stem":71,"children":72,"page":25},"\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture","fr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture",[73,77,81,85,89],{"title":74,"path":75,"stem":76},"Vue d'ensemble","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture\u002F01-vue-densemble","fr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture\u002F01-vue-densemble",{"title":78,"path":79,"stem":80},"Marts et couche reporting","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture\u002F02-marts-et-couche-reporting","fr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture\u002F02-marts-et-couche-reporting",{"title":82,"path":83,"stem":84},"Marts Kimball","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture\u002F03-marts-kimball","fr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture\u002F03-marts-kimball",{"title":86,"path":87,"stem":88},"Couche reporting Power BI","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture\u002F04-couche-reporting-power-bi","fr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture\u002F04-couche-reporting-power-bi",{"title":90,"path":91,"stem":92},"Tables de filtres par grain","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture\u002F05-tables-de-filtres-par-grain","fr\u002F03-le-comptoir\u002F01-architecture\u002F01-architecture\u002F05-tables-de-filtres-par-grain",{"title":94,"path":95,"stem":96},"Lier les bases de données","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F02-lier-les-bases-de-donnees","fr\u002F03-le-comptoir\u002F01-architecture\u002F02-lier-les-bases-de-donnees",{"title":98,"path":99,"stem":100,"children":101,"page":25},"Adapters et seeds","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F03-adapters-et-seeds","fr\u002F03-le-comptoir\u002F01-architecture\u002F03-adapters-et-seeds",[102,106,110],{"title":103,"path":104,"stem":105},"Concept","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F03-adapters-et-seeds\u002F01-concept","fr\u002F03-le-comptoir\u002F01-architecture\u002F03-adapters-et-seeds\u002F01-concept",{"title":107,"path":108,"stem":109},"Seeds de configuration","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F03-adapters-et-seeds\u002F02-seeds-de-configuration","fr\u002F03-le-comptoir\u002F01-architecture\u002F03-adapters-et-seeds\u002F02-seeds-de-configuration",{"title":111,"path":112,"stem":113},"Adapters et points d'injection","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F03-adapters-et-seeds\u002F03-adapters-et-points-dinjection","fr\u002F03-le-comptoir\u002F01-architecture\u002F03-adapters-et-seeds\u002F03-adapters-et-points-dinjection",{"title":115,"path":116,"stem":117},"Activer une ressource","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F04-activer-une-ressource","fr\u002F03-le-comptoir\u002F01-architecture\u002F04-activer-une-ressource",{"title":119,"path":120,"stem":121,"children":122,"page":25},"Overriding","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding","fr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding",[123,126,130,134],{"title":103,"path":124,"stem":125},"\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding\u002F01-concept","fr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding\u002F01-concept",{"title":127,"path":128,"stem":129},"Overrider un modèle","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding\u002F02-overrider-un-modele","fr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding\u002F02-overrider-un-modele",{"title":131,"path":132,"stem":133},"Règles d'affaires locales","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding\u002F03-regles-affaires-locales","fr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding\u002F03-regles-affaires-locales",{"title":135,"path":136,"stem":137},"Contrats de données","\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding\u002F04-contrats-de-donnees","fr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding\u002F04-contrats-de-donnees",{"title":139,"path":140,"stem":141,"children":142,"page":25},"Utilisation","\u002Ffr\u002F03-le-comptoir\u002F02-utilisation","fr\u002F03-le-comptoir\u002F02-utilisation",[143,147,151,155,158,162],{"title":144,"path":145,"stem":146},"Ajouter une interface","\u002Ffr\u002F03-le-comptoir\u002F02-utilisation\u002F01-ajouter-une-interface","fr\u002F03-le-comptoir\u002F02-utilisation\u002F01-ajouter-une-interface",{"title":148,"path":149,"stem":150},"Créer ou modifier un mart","\u002Ffr\u002F03-le-comptoir\u002F02-utilisation\u002F02-creer-ou-modifier-un-mart","fr\u002F03-le-comptoir\u002F02-utilisation\u002F02-creer-ou-modifier-un-mart",{"title":152,"path":153,"stem":154},"Encoder une règle avec un seed","\u002Ffr\u002F03-le-comptoir\u002F02-utilisation\u002F03-encoder-une-regle-affaires-avec-un-seed","fr\u002F03-le-comptoir\u002F02-utilisation\u002F03-encoder-une-regle-affaires-avec-un-seed",{"title":127,"path":156,"stem":157},"\u002Ffr\u002F03-le-comptoir\u002F02-utilisation\u002F04-overrider-un-modele","fr\u002F03-le-comptoir\u002F02-utilisation\u002F04-overrider-un-modele",{"title":159,"path":160,"stem":161},"Ajouter des tests","\u002Ffr\u002F03-le-comptoir\u002F02-utilisation\u002F05-ajouter-des-tests","fr\u002F03-le-comptoir\u002F02-utilisation\u002F05-ajouter-des-tests",{"title":163,"path":164,"stem":165},"Formatage et revue","\u002Ffr\u002F03-le-comptoir\u002F02-utilisation\u002F06-formatage-et-revue","fr\u002F03-le-comptoir\u002F02-utilisation\u002F06-formatage-et-revue",{"title":167,"path":168,"stem":169,"children":170,"page":25},"Créer un tableau de bord","\u002Ffr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord","fr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord",[171,175,179,183,187],{"title":172,"path":173,"stem":174},"Partir du gabarit","\u002Ffr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord\u002F01-partir-du-gabarit","fr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord\u002F01-partir-du-gabarit",{"title":176,"path":177,"stem":178},"Projet FP","\u002Ffr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord\u002F02-projet-fp","fr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord\u002F02-projet-fp",{"title":180,"path":181,"stem":182},"Rôle du stamper","\u002Ffr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord\u002F03-role-du-stamper","fr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord\u002F03-role-du-stamper",{"title":184,"path":185,"stem":186},"Publication Power BI","\u002Ffr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord\u002F04-publication-power-bi","fr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord\u002F04-publication-power-bi",{"title":188,"path":189,"stem":190},"Cycle de changement","\u002Ffr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord\u002F05-cycle-de-changement","fr\u002F03-le-comptoir\u002F03-creer-tableau-de-bord\u002F05-cycle-de-changement",{"title":192,"path":193,"stem":194,"children":195,"page":25},"Installation","\u002Ffr\u002F04-installation","fr\u002F04-installation",[196,200,204,208,212,216,220,224,228,232,236,240,244],{"title":197,"path":198,"stem":199},"Installer WSL2","\u002Ffr\u002F04-installation\u002F01-wsl2","fr\u002F04-installation\u002F01-wsl2",{"title":201,"path":202,"stem":203},"Installer Python et Poetry","\u002Ffr\u002F04-installation\u002F02-python-et-poetry","fr\u002F04-installation\u002F02-python-et-poetry",{"title":205,"path":206,"stem":207},"Cloner les dépôts","\u002Ffr\u002F04-installation\u002F03-cloner-les-depots","fr\u002F04-installation\u002F03-cloner-les-depots",{"title":209,"path":210,"stem":211},"Installer les dépendances","\u002Ffr\u002F04-installation\u002F04-installer-les-dependances","fr\u002F04-installation\u002F04-installer-les-dependances",{"title":213,"path":214,"stem":215},"Configurer profiles.yml","\u002Ffr\u002F04-installation\u002F05-configurer-profiles-yml","fr\u002F04-installation\u002F05-configurer-profiles-yml",{"title":217,"path":218,"stem":219},"Configurer externalbrowser dans WSL2","\u002Ffr\u002F04-installation\u002F06-configurer-external-browser-wsl","fr\u002F04-installation\u002F06-configurer-external-browser-wsl",{"title":221,"path":222,"stem":223},"Exécuter un premier modèle","\u002Ffr\u002F04-installation\u002F07-executer-un-premier-modele","fr\u002F04-installation\u002F07-executer-un-premier-modele",{"title":225,"path":226,"stem":227},"Problèmes courants","\u002Ffr\u002F04-installation\u002F08-problemes-courants","fr\u002F04-installation\u002F08-problemes-courants",{"title":229,"path":230,"stem":231},"Environnements Snowflake","\u002Ffr\u002F04-installation\u002F09-snowflake-environnements","fr\u002F04-installation\u002F09-snowflake-environnements",{"title":233,"path":234,"stem":235},"Rôles et entrepôts Snowflake","\u002Ffr\u002F04-installation\u002F10-snowflake-roles-et-entrepots","fr\u002F04-installation\u002F10-snowflake-roles-et-entrepots",{"title":237,"path":238,"stem":239},"Bases, schémas et droits Snowflake","\u002Ffr\u002F04-installation\u002F11-snowflake-bases-schemas-et-droits","fr\u002F04-installation\u002F11-snowflake-bases-schemas-et-droits",{"title":241,"path":242,"stem":243},"Authentification Snowflake et profils dbt","\u002Ffr\u002F04-installation\u002F12-snowflake-authentification-et-profils-dbt","fr\u002F04-installation\u002F12-snowflake-authentification-et-profils-dbt",{"title":245,"path":246,"stem":247},"Coûts et contrôles Snowflake","\u002Ffr\u002F04-installation\u002F13-snowflake-couts-et-controles","fr\u002F04-installation\u002F13-snowflake-couts-et-controles",{"title":249,"path":250,"stem":251,"children":252,"page":25},"Comment contribuer","\u002Ffr\u002F07-comment-contribuer","fr\u002F07-comment-contribuer",[253,257,261,265],{"title":254,"path":255,"stem":256},"Principes","\u002Ffr\u002F07-comment-contribuer\u002F01-principes","fr\u002F07-comment-contribuer\u002F01-principes",{"title":258,"path":259,"stem":260},"Faire une Pull Request","\u002Ffr\u002F07-comment-contribuer\u002F02-faire-une-pull-request","fr\u002F07-comment-contribuer\u002F02-faire-une-pull-request",{"title":262,"path":263,"stem":264},"Revue et collaboration","\u002Ffr\u002F07-comment-contribuer\u002F03-revue-et-collaboration","fr\u002F07-comment-contribuer\u002F03-revue-et-collaboration",{"title":266,"path":267,"stem":268},"Qualité et validation","\u002Ffr\u002F07-comment-contribuer\u002F04-qualite-et-validation","fr\u002F07-comment-contribuer\u002F04-qualite-et-validation",{"title":270,"path":271,"stem":272,"children":273,"page":25},"Aide AI","\u002Ffr\u002F08-aide-ia","fr\u002F08-aide-ia",[274,278,282],{"title":275,"path":276,"stem":277},"Se faire aider par une IA","\u002Ffr\u002F08-aide-ia\u002F01-se-faire-aider-par-une-ia","fr\u002F08-aide-ia\u002F01-se-faire-aider-par-une-ia",{"title":279,"path":280,"stem":281},"Utiliser llms.txt","\u002Ffr\u002F08-aide-ia\u002F02-utiliser-llms-txt","fr\u002F08-aide-ia\u002F02-utiliser-llms-txt",{"title":283,"path":284,"stem":285},"Connecter un client MCP","\u002Ffr\u002F08-aide-ia\u002F03-connecter-un-client-mcp","fr\u002F08-aide-ia\u002F03-connecter-un-client-mcp",{"title":287,"path":288,"stem":289,"children":290,"page":25},"09 Reference","\u002Ffr\u002F09-reference","fr\u002F09-reference",[291,295,299,303],{"title":292,"path":293,"stem":294},"Glossaire","\u002Ffr\u002F09-reference\u002F01-glossaire","fr\u002F09-reference\u002F01-glossaire",{"title":296,"path":297,"stem":298},"Commandes","\u002Ffr\u002F09-reference\u002F02-commandes","fr\u002F09-reference\u002F02-commandes",{"title":300,"path":301,"stem":302},"Conventions de nommage","\u002Ffr\u002F09-reference\u002F03-conventions-de-nommage","fr\u002F09-reference\u002F03-conventions-de-nommage",{"title":304,"path":305,"stem":306},"Checklists","\u002Ffr\u002F09-reference\u002F04-checklists","fr\u002F09-reference\u002F04-checklists",{"id":308,"title":135,"body":309,"description":779,"extension":780,"links":781,"meta":782,"navigation":432,"path":136,"seo":785,"stem":137,"__hash__":786},"docs_fr\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F05-overriding\u002F04-contrats-de-donnees.md",{"type":310,"value":311,"toc":771},"minimark",[312,315,319,323,326,331,347,350,353,364,368,371,399,403,603,607,610,613,616,619,656,659,695,702,706,709,736,739,760,764,767],[313,314],"page-metadata",{},[316,317,135],"h1",{"id":318},"contrats-de-données",[320,321,322],"p",{},"Un contrat de données décrit ce qu'une table doit fournir.",[320,324,325],{},"Il protège les modèles suivants et les tableaux de bord, surtout lorsqu'un dépôt local personnalise le Store.",[327,328,330],"h2",{"id":329},"pourquoi-les-contrats-sont-nécessaires","Pourquoi les contrats sont nécessaires",[320,332,333,334,338,339,342,343,346],{},"Les ",[335,336,337],"em",{},"seeds",", les ",[335,340,341],{},"adapters"," et les ",[335,344,345],{},"overrides"," permettent de personnaliser le Store.",[320,348,349],{},"Cette personnalisation est utile, mais elle doit rester contrôlée.",[320,351,352],{},"Le contrat permet de dire:",[354,355,361],"pre",{"className":356,"code":358,"language":359,"meta":360},[357],"language-text","La règle locale peut changer.\nLa sortie attendue doit rester stable.\n","text","",[362,363,358],"code",{"__ignoreMap":360},[327,365,367],{"id":366},"ce-que-le-contrat-doit-préciser","Ce que le contrat doit préciser",[320,369,370],{},"Un contrat doit indiquer:",[372,373,374,378,381,384,387,390,393,396],"ul",{},[375,376,377],"li",{},"le nom du modèle;",[375,379,380],{},"le grain;",[375,382,383],{},"les colonnes obligatoires;",[375,385,386],{},"les types importants;",[375,388,389],{},"les valeurs attendues si elles sont limitées;",[375,391,392],{},"les tests;",[375,394,395],{},"les modèles qui consomment la table;",[375,397,398],{},"les tableaux de bord qui consomment la table.",[327,400,402],{"id":401},"exemple-de-contrat","Exemple de contrat",[354,404,408],{"className":405,"code":406,"language":407,"meta":360,"style":360},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","version: 2\n\nmodels:\n  - name: stg_eleves_reguliers\n    description: >\n      Élèves considérés réguliers pour le projet FP.\n      Le grain est un élève par année scolaire et par programme.\n    columns:\n      - name: id_eleve\n        description: Identifiant stable de l'élève.\n        tests:\n          - not_null\n      - name: annee_scolaire\n        description: Année scolaire de l'inscription.\n        tests:\n          - not_null\n      - name: code_programme\n        description: Code du programme de formation professionnelle.\n        tests:\n          - not_null\n","yaml",[362,409,410,427,434,443,458,470,476,482,490,503,514,522,531,543,553,560,567,579,589,596],{"__ignoreMap":360},[411,412,415,419,423],"span",{"class":413,"line":414},"line",1,[411,416,418],{"class":417},"swJcz","version",[411,420,422],{"class":421},"sMK4o",":",[411,424,426],{"class":425},"sbssI"," 2\n",[411,428,430],{"class":413,"line":429},2,[411,431,433],{"emptyLinePlaceholder":432},true,"\n",[411,435,437,440],{"class":413,"line":436},3,[411,438,439],{"class":417},"models",[411,441,442],{"class":421},":\n",[411,444,446,449,452,454],{"class":413,"line":445},4,[411,447,448],{"class":421},"  -",[411,450,451],{"class":417}," name",[411,453,422],{"class":421},[411,455,457],{"class":456},"sfazB"," stg_eleves_reguliers\n",[411,459,461,464,466],{"class":413,"line":460},5,[411,462,463],{"class":417},"    description",[411,465,422],{"class":421},[411,467,469],{"class":468},"s7zQu"," >\n",[411,471,473],{"class":413,"line":472},6,[411,474,475],{"class":456},"      Élèves considérés réguliers pour le projet FP.\n",[411,477,479],{"class":413,"line":478},7,[411,480,481],{"class":456},"      Le grain est un élève par année scolaire et par programme.\n",[411,483,485,488],{"class":413,"line":484},8,[411,486,487],{"class":417},"    columns",[411,489,442],{"class":421},[411,491,493,496,498,500],{"class":413,"line":492},9,[411,494,495],{"class":421},"      -",[411,497,451],{"class":417},[411,499,422],{"class":421},[411,501,502],{"class":456}," id_eleve\n",[411,504,506,509,511],{"class":413,"line":505},10,[411,507,508],{"class":417},"        description",[411,510,422],{"class":421},[411,512,513],{"class":456}," Identifiant stable de l'élève.\n",[411,515,517,520],{"class":413,"line":516},11,[411,518,519],{"class":417},"        tests",[411,521,442],{"class":421},[411,523,525,528],{"class":413,"line":524},12,[411,526,527],{"class":421},"          -",[411,529,530],{"class":456}," not_null\n",[411,532,534,536,538,540],{"class":413,"line":533},13,[411,535,495],{"class":421},[411,537,451],{"class":417},[411,539,422],{"class":421},[411,541,542],{"class":456}," annee_scolaire\n",[411,544,546,548,550],{"class":413,"line":545},14,[411,547,508],{"class":417},[411,549,422],{"class":421},[411,551,552],{"class":456}," Année scolaire de l'inscription.\n",[411,554,556,558],{"class":413,"line":555},15,[411,557,519],{"class":417},[411,559,442],{"class":421},[411,561,563,565],{"class":413,"line":562},16,[411,564,527],{"class":421},[411,566,530],{"class":456},[411,568,570,572,574,576],{"class":413,"line":569},17,[411,571,495],{"class":421},[411,573,451],{"class":417},[411,575,422],{"class":421},[411,577,578],{"class":456}," code_programme\n",[411,580,582,584,586],{"class":413,"line":581},18,[411,583,508],{"class":417},[411,585,422],{"class":421},[411,587,588],{"class":456}," Code du programme de formation professionnelle.\n",[411,590,592,594],{"class":413,"line":591},19,[411,593,519],{"class":417},[411,595,442],{"class":421},[411,597,599,601],{"class":413,"line":598},20,[411,600,527],{"class":421},[411,602,530],{"class":456},[327,604,606],{"id":605},"contrat-et-personnalisation","Contrat et personnalisation",[320,608,609],{},"Un dépôt local peut changer la méthode de calcul.",[320,611,612],{},"Il ne doit pas retirer une colonne attendue.",[320,614,615],{},"Il ne doit pas changer le grain sans décision explicite.",[320,617,618],{},"Exemple:",[354,620,624],{"className":621,"code":622,"language":623,"meta":360,"style":360},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Contrat attendu\nselect\n    id_eleve,\n    annee_scolaire,\n    code_programme\nfrom ...\n","sql",[362,625,626,631,636,641,646,651],{"__ignoreMap":360},[411,627,628],{"class":413,"line":414},[411,629,630],{},"-- Contrat attendu\n",[411,632,633],{"class":413,"line":429},[411,634,635],{},"select\n",[411,637,638],{"class":413,"line":436},[411,639,640],{},"    id_eleve,\n",[411,642,643],{"class":413,"line":445},[411,644,645],{},"    annee_scolaire,\n",[411,647,648],{"class":413,"line":460},[411,649,650],{},"    code_programme\n",[411,652,653],{"class":413,"line":472},[411,654,655],{},"from ...\n",[320,657,658],{},"Si le modèle local ajoute une colonne, les colonnes existantes doivent rester présentes.",[354,660,662],{"className":621,"code":661,"language":623,"meta":360,"style":360},"-- Acceptable si les colonnes du contrat restent présentes\nselect\n    id_eleve,\n    annee_scolaire,\n    code_programme,\n    code_etablissement\nfrom ...\n",[362,663,664,669,673,677,681,686,691],{"__ignoreMap":360},[411,665,666],{"class":413,"line":414},[411,667,668],{},"-- Acceptable si les colonnes du contrat restent présentes\n",[411,670,671],{"class":413,"line":429},[411,672,635],{},[411,674,675],{"class":413,"line":436},[411,676,640],{},[411,678,679],{"class":413,"line":445},[411,680,645],{},[411,682,683],{"class":413,"line":460},[411,684,685],{},"    code_programme,\n",[411,687,688],{"class":413,"line":472},[411,689,690],{},"    code_etablissement\n",[411,692,693],{"class":413,"line":478},[411,694,655],{},[320,696,697,698,701],{},"Si le modèle local retire ",[362,699,700],{},"code_programme",", il ne respecte plus le contrat.",[327,703,705],{"id":704},"tests-minimaux","Tests minimaux",[320,707,708],{},"Exécuter les tests du modèle.",[354,710,714],{"className":711,"code":712,"language":713,"meta":360,"style":360},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","poetry run dbt test --select stg_eleves_reguliers\n","bash",[362,715,716],{"__ignoreMap":360},[411,717,718,722,725,728,731,734],{"class":413,"line":414},[411,719,721],{"class":720},"sBMFI","poetry",[411,723,724],{"class":456}," run",[411,726,727],{"class":456}," dbt",[411,729,730],{"class":456}," test",[411,732,733],{"class":456}," --select",[411,735,457],{"class":456},[320,737,738],{},"Exécuter aussi les modèles qui dépendent de lui.",[354,740,742],{"className":711,"code":741,"language":713,"meta":360,"style":360},"poetry run dbt build --select stg_eleves_reguliers+\n",[362,743,744],{"__ignoreMap":360},[411,745,746,748,750,752,755,757],{"class":413,"line":414},[411,747,721],{"class":720},[411,749,724],{"class":456},[411,751,727],{"class":456},[411,753,754],{"class":456}," build",[411,756,733],{"class":456},[411,758,759],{"class":456}," stg_eleves_reguliers+\n",[327,761,763],{"id":762},"point-de-contrôle","Point de contrôle",[320,765,766],{},"Après une personnalisation locale, la question principale est: est-ce que les tableaux de bord et les modèles suivants peuvent encore lire la sortie sans changement?",[768,769,770],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":360,"searchDepth":429,"depth":429,"links":772},[773,774,775,776,777,778],{"id":329,"depth":429,"text":330},{"id":366,"depth":429,"text":367},{"id":401,"depth":429,"text":402},{"id":605,"depth":429,"text":606},{"id":704,"depth":429,"text":705},{"id":762,"depth":429,"text":763},"Stabiliser les sorties attendues malgré les personnalisations locales.","md",null,{"author":783,"updatedAt":784},"hugo.juhel@sciance.ca","2026-06-01",{"title":135,"description":779},"NABDgLQpgDGfJWPRoulmMpEKScMITCVtEbHoPtEd9gA",[788,790],{"title":131,"path":132,"stem":133,"description":789,"children":-1},"Documenter les règles qui personnalisent le Store localement.",{"title":144,"path":145,"stem":146,"description":791,"children":-1},"Créer une connexion stable vers une source.",1783953839080]