[{"data":1,"prerenderedAt":949},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-03-le-comptoir-01-architecture-03-adapters-et-seeds-03-adapters-et-points-dinjection":307,"-fr-03-le-comptoir-01-architecture-03-adapters-et-seeds-03-adapters-et-points-dinjection-surround":944},[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":111,"body":309,"description":936,"extension":937,"links":938,"meta":939,"navigation":436,"path":112,"seo":942,"stem":113,"__hash__":943},"docs_fr\u002Ffr\u002F03-le-comptoir\u002F01-architecture\u002F03-adapters-et-seeds\u002F03-adapters-et-points-dinjection.md",{"type":310,"value":311,"toc":927},"minimark",[312,315,319,328,331,336,339,342,368,371,375,378,401,404,620,624,627,635,637,692,698,728,732,738,743,749,752,756,762,768,771,821,833,837,840,867,870,890,893,913,917,923],[313,314],"page-metadata",{},[316,317,111],"h1",{"id":318},"adapters-et-points-dinjection",[320,321,322,323,327],"p",{},"Dans le Store, un ",[324,325,326],"em",{},"adapter"," est un modèle SQL local attendu par le core.",[320,329,330],{},"Le core connaît la forme nécessaire. Le dépôt local connaît la règle réelle.",[332,333,335],"h2",{"id":334},"pourquoi-les-adapters-existent","Pourquoi les adapters existent",[320,337,338],{},"Certaines règles ne peuvent pas être écrites une seule fois pour toutes les organisations.",[320,340,341],{},"Exemples:",[343,344,345,349,352,355,358,361],"ul",{},[346,347,348],"li",{},"identifier les élèves réguliers;",[346,350,351],{},"identifier une population locale;",[346,353,354],{},"regrouper des programmes;",[346,356,357],{},"exclure certains dossiers selon une règle interne;",[346,359,360],{},"préparer une table qui dépend d'une source propre au centre;",[346,362,363,364,367],{},"appliquer une règle trop complexe pour un ",[324,365,366],{},"seed",".",[320,369,370],{},"Dans ces cas, le core définit le contrat. Le dépôt local écrit la requête.",[332,372,374],{"id":373},"contrat-dun-adapter","Contrat d'un adapter",[320,376,377],{},"Le contrat doit dire:",[343,379,380,383,386,389,392,395,398],{},[346,381,382],{},"le nom du modèle à créer;",[346,384,385],{},"les colonnes obligatoires;",[346,387,388],{},"le grain attendu;",[346,390,391],{},"les tests minimaux;",[346,393,394],{},"les tags à utiliser;",[346,396,397],{},"le schéma cible;",[346,399,400],{},"les modèles ou tableaux de bord qui consomment la sortie.",[320,402,403],{},"Exemple:",[405,406,411],"pre",{"className":407,"code":408,"language":409,"meta":410,"style":410},"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      Adapter local qui identifie les élèves réguliers en formation professionnelle.\n      Le grain attendu est un élève par année scolaire et par programme.\n    config:\n      schema: formation_professionnelle_staging\n      tags:\n        - formation_professionnelle\n        - adapter\n    columns:\n      - name: id_eleve\n        tests:\n          - not_null\n      - name: annee_scolaire\n        tests:\n          - not_null\n      - name: code_programme\n        tests:\n          - not_null\n","yaml","",[412,413,414,431,438,447,462,474,480,486,494,505,513,522,530,538,551,559,568,580,587,594,606,613],"code",{"__ignoreMap":410},[415,416,419,423,427],"span",{"class":417,"line":418},"line",1,[415,420,422],{"class":421},"swJcz","version",[415,424,426],{"class":425},"sMK4o",":",[415,428,430],{"class":429},"sbssI"," 2\n",[415,432,434],{"class":417,"line":433},2,[415,435,437],{"emptyLinePlaceholder":436},true,"\n",[415,439,441,444],{"class":417,"line":440},3,[415,442,443],{"class":421},"models",[415,445,446],{"class":425},":\n",[415,448,450,453,456,458],{"class":417,"line":449},4,[415,451,452],{"class":425},"  -",[415,454,455],{"class":421}," name",[415,457,426],{"class":425},[415,459,461],{"class":460},"sfazB"," stg_eleves_reguliers\n",[415,463,465,468,470],{"class":417,"line":464},5,[415,466,467],{"class":421},"    description",[415,469,426],{"class":425},[415,471,473],{"class":472},"s7zQu"," >\n",[415,475,477],{"class":417,"line":476},6,[415,478,479],{"class":460},"      Adapter local qui identifie les élèves réguliers en formation professionnelle.\n",[415,481,483],{"class":417,"line":482},7,[415,484,485],{"class":460},"      Le grain attendu est un élève par année scolaire et par programme.\n",[415,487,489,492],{"class":417,"line":488},8,[415,490,491],{"class":421},"    config",[415,493,446],{"class":425},[415,495,497,500,502],{"class":417,"line":496},9,[415,498,499],{"class":421},"      schema",[415,501,426],{"class":425},[415,503,504],{"class":460}," formation_professionnelle_staging\n",[415,506,508,511],{"class":417,"line":507},10,[415,509,510],{"class":421},"      tags",[415,512,446],{"class":425},[415,514,516,519],{"class":417,"line":515},11,[415,517,518],{"class":425},"        -",[415,520,521],{"class":460}," formation_professionnelle\n",[415,523,525,527],{"class":417,"line":524},12,[415,526,518],{"class":425},[415,528,529],{"class":460}," adapter\n",[415,531,533,536],{"class":417,"line":532},13,[415,534,535],{"class":421},"    columns",[415,537,446],{"class":425},[415,539,541,544,546,548],{"class":417,"line":540},14,[415,542,543],{"class":425},"      -",[415,545,455],{"class":421},[415,547,426],{"class":425},[415,549,550],{"class":460}," id_eleve\n",[415,552,554,557],{"class":417,"line":553},15,[415,555,556],{"class":421},"        tests",[415,558,446],{"class":425},[415,560,562,565],{"class":417,"line":561},16,[415,563,564],{"class":425},"          -",[415,566,567],{"class":460}," not_null\n",[415,569,571,573,575,577],{"class":417,"line":570},17,[415,572,543],{"class":425},[415,574,455],{"class":421},[415,576,426],{"class":425},[415,578,579],{"class":460}," annee_scolaire\n",[415,581,583,585],{"class":417,"line":582},18,[415,584,556],{"class":421},[415,586,446],{"class":425},[415,588,590,592],{"class":417,"line":589},19,[415,591,564],{"class":425},[415,593,567],{"class":460},[415,595,597,599,601,603],{"class":417,"line":596},20,[415,598,543],{"class":425},[415,600,455],{"class":421},[415,602,426],{"class":425},[415,604,605],{"class":460}," code_programme\n",[415,607,609,611],{"class":417,"line":608},21,[415,610,556],{"class":421},[415,612,446],{"class":425},[415,614,616,618],{"class":417,"line":615},22,[415,617,564],{"class":425},[415,619,567],{"class":460},[332,621,623],{"id":622},"implémenter-ladapter-local","Implémenter l'adapter local",[320,625,626],{},"Créer le modèle dans le dépôt local.",[405,628,633],{"className":629,"code":631,"language":632,"meta":410},[630],"language-text","cssxx.dashboards_store.snowflake\u002F\n  models\u002F\n    marts\u002F\n      formation_professionnelle\u002F\n        staging\u002F\n          stg_eleves_reguliers.sql\n","text",[412,634,631],{"__ignoreMap":410},[320,636,403],{},[405,638,642],{"className":639,"code":640,"language":641,"meta":410,"style":410},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- cssxx.dashboards_store.snowflake\u002Fmodels\u002Fmarts\u002Fformation_professionnelle\u002Fstaging\u002Fstg_eleves_reguliers.sql\n\n{{ config(schema=\"formation_professionnelle_staging\") }}\n\nselect distinct\n    inscription.id_eleve,\n    inscription.annee_scolaire,\n    inscription.code_programme\nfrom {{ ref(\"i_inscriptions_fp\") }} as inscription\nwhere inscription.statut_inscription in ('REGULIER', 'ACTIF')\n","sql",[412,643,644,649,653,658,662,667,672,677,682,687],{"__ignoreMap":410},[415,645,646],{"class":417,"line":418},[415,647,648],{},"-- cssxx.dashboards_store.snowflake\u002Fmodels\u002Fmarts\u002Fformation_professionnelle\u002Fstaging\u002Fstg_eleves_reguliers.sql\n",[415,650,651],{"class":417,"line":433},[415,652,437],{"emptyLinePlaceholder":436},[415,654,655],{"class":417,"line":440},[415,656,657],{},"{{ config(schema=\"formation_professionnelle_staging\") }}\n",[415,659,660],{"class":417,"line":449},[415,661,437],{"emptyLinePlaceholder":436},[415,663,664],{"class":417,"line":464},[415,665,666],{},"select distinct\n",[415,668,669],{"class":417,"line":476},[415,670,671],{},"    inscription.id_eleve,\n",[415,673,674],{"class":417,"line":482},[415,675,676],{},"    inscription.annee_scolaire,\n",[415,678,679],{"class":417,"line":488},[415,680,681],{},"    inscription.code_programme\n",[415,683,684],{"class":417,"line":496},[415,685,686],{},"from {{ ref(\"i_inscriptions_fp\") }} as inscription\n",[415,688,689],{"class":417,"line":507},[415,690,691],{},"where inscription.statut_inscription in ('REGULIER', 'ACTIF')\n",[320,693,694,695,367],{},"Le core peut ensuite consommer ce modèle avec ",[412,696,697],{},"ref()",[405,699,701],{"className":639,"code":700,"language":641,"meta":410,"style":410},"select\n    id_eleve,\n    annee_scolaire,\n    code_programme\nfrom {{ ref(\"stg_eleves_reguliers\") }}\n",[412,702,703,708,713,718,723],{"__ignoreMap":410},[415,704,705],{"class":417,"line":418},[415,706,707],{},"select\n",[415,709,710],{"class":417,"line":433},[415,711,712],{},"    id_eleve,\n",[415,714,715],{"class":417,"line":440},[415,716,717],{},"    annee_scolaire,\n",[415,719,720],{"class":417,"line":449},[415,721,722],{},"    code_programme\n",[415,724,725],{"class":417,"line":464},[415,726,727],{},"from {{ ref(\"stg_eleves_reguliers\") }}\n",[332,729,731],{"id":730},"pourquoi-ce-mécanisme-protège-le-core","Pourquoi ce mécanisme protège le core",[320,733,734,735,737],{},"Sans ",[324,736,326],{},", le core devrait contenir des branches propres à chaque organisation.",[320,739,740,741,426],{},"Avec un ",[324,742,326],{},[405,744,747],{"className":745,"code":746,"language":632,"meta":410},[630],"core\n  -> définit le besoin et le contrat\n\ndépôt local\n  -> fournit la règle réelle\n",[412,748,746],{"__ignoreMap":410},[320,750,751],{},"Le core reste simple. Le dépôt local reste propriétaire de sa règle.",[332,753,755],{"id":754},"adapters-au-sens-de-dbt","Adapters au sens de dbt",[320,757,758,759,761],{},"Le mot ",[324,760,326],{}," peut aussi désigner l'implémentation propre à l'entrepôt de données.",[320,763,764,765,367],{},"Dans ce cas, on parle de ",[412,766,767],{},"adapter.dispatch",[320,769,770],{},"Le stamper Snowflake utilise ce mécanisme.",[405,772,774],{"className":639,"code":773,"language":641,"meta":410,"style":410},"{% macro stamp_model(dashboard_name) %}\n  {{\n    return(\n      adapter.dispatch(\"stamp_model\", \"core_dashboards_store_snowflake\")(\n        dashboard_name\n      )\n    )\n  }}\n{% endmacro %}\n",[412,775,776,781,786,791,796,801,806,811,816],{"__ignoreMap":410},[415,777,778],{"class":417,"line":418},[415,779,780],{},"{% macro stamp_model(dashboard_name) %}\n",[415,782,783],{"class":417,"line":433},[415,784,785],{},"  {{\n",[415,787,788],{"class":417,"line":440},[415,789,790],{},"    return(\n",[415,792,793],{"class":417,"line":449},[415,794,795],{},"      adapter.dispatch(\"stamp_model\", \"core_dashboards_store_snowflake\")(\n",[415,797,798],{"class":417,"line":464},[415,799,800],{},"        dashboard_name\n",[415,802,803],{"class":417,"line":476},[415,804,805],{},"      )\n",[415,807,808],{"class":417,"line":482},[415,809,810],{},"    )\n",[415,812,813],{"class":417,"line":488},[415,814,815],{},"  }}\n",[415,817,818],{"class":417,"line":496},[415,819,820],{},"{% endmacro %}\n",[320,822,823,824,826,827,829,830,367],{},"Utiliser ",[412,825,767],{}," seulement lorsque la macro dépend de Snowflake ou d'un autre entrepôt. Pour une règle métier locale, utiliser plutôt un modèle local, un ",[324,828,366],{}," ou un ",[324,831,832],{},"override",[332,834,836],{"id":835},"commandes-utiles","Commandes utiles",[320,838,839],{},"Construire un adapter précis:",[405,841,845],{"className":842,"code":843,"language":844,"meta":410,"style":410},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","poetry run dbt build --select stg_eleves_reguliers\n","bash",[412,846,847],{"__ignoreMap":410},[415,848,849,853,856,859,862,865],{"class":417,"line":418},[415,850,852],{"class":851},"sBMFI","poetry",[415,854,855],{"class":460}," run",[415,857,858],{"class":460}," dbt",[415,860,861],{"class":460}," build",[415,863,864],{"class":460}," --select",[415,866,461],{"class":460},[320,868,869],{},"Construire l'adapter et les modèles qui en dépendent:",[405,871,873],{"className":842,"code":872,"language":844,"meta":410,"style":410},"poetry run dbt build --select stg_eleves_reguliers+\n",[412,874,875],{"__ignoreMap":410},[415,876,877,879,881,883,885,887],{"class":417,"line":418},[415,878,852],{"class":851},[415,880,855],{"class":460},[415,882,858],{"class":460},[415,884,861],{"class":460},[415,886,864],{"class":460},[415,888,889],{"class":460}," stg_eleves_reguliers+\n",[320,891,892],{},"Construire tous les adapters d'un périmètre si les tags sont configurés:",[405,894,896],{"className":842,"code":895,"language":844,"meta":410,"style":410},"poetry run dbt build --select tag:adapter,tag:formation_professionnelle\n",[412,897,898],{"__ignoreMap":410},[415,899,900,902,904,906,908,910],{"class":417,"line":418},[415,901,852],{"class":851},[415,903,855],{"class":460},[415,905,858],{"class":460},[415,907,861],{"class":460},[415,909,864],{"class":460},[415,911,912],{"class":460}," tag:adapter,tag:formation_professionnelle\n",[332,914,916],{"id":915},"point-de-contrôle","Point de contrôle",[320,918,919,920,922],{},"Un ",[324,921,326],{}," est le bon mécanisme lorsque le core peut dire clairement ce qu'il attend, mais ne peut pas écrire la règle locale à la place du dépôt local.",[924,925,926],"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":410,"searchDepth":433,"depth":433,"links":928},[929,930,931,932,933,934,935],{"id":334,"depth":433,"text":335},{"id":373,"depth":433,"text":374},{"id":622,"depth":433,"text":623},{"id":730,"depth":433,"text":731},{"id":754,"depth":433,"text":755},{"id":835,"depth":433,"text":836},{"id":915,"depth":433,"text":916},"Fournir localement le SQL attendu par le core.","md",null,{"author":940,"updatedAt":941},"hugo.juhel@sciance.ca","2026-06-01",{"title":111,"description":936},"Boj1yYeLYcTlKd3SgMPaBTi256vDKqRu27Yn5NLNxLk",[945,947],{"title":107,"path":108,"stem":109,"description":946,"children":-1},"Utiliser des CSV versionnés pour encoder des règles simples.",{"title":115,"path":116,"stem":117,"description":948,"children":-1},"Construire seulement les marts, dashboards et interfaces nécessaires.",1783953838590]