1"use strict";(self.webpackChunkreflektlab_ai=self.webpackChunkreflektlab_ai||[]).push([[3275],{2927:function(e,t,l){l.r(t),l.d(t,{DEFAULT_FOOTER:function(){return _},Head:function(){return B},default:function(){return L},footerFor:function(){return F},pickRelated:function(){return C}});var a=l(8453),n=l(6540);function r(e){const t=Object.assign({span:"span",p:"p",hr:"hr",h2:"h2",strong:"strong",ul:"ul",li:"li",em:"em",a:"a"},(0,a.RP)(),e.components),{SpecList:l}=t;return l||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("SpecList",!0),n.createElement(n.Fragment,null,n.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<span\n class="gatsby-resp-image-wrapper"\n style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; "\n >\n <span\n class="gatsby-resp-image-background-image"\n style="padding-bottom: 55.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url(\'data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAEDBAX/xAAWAQEBAQAAAAAAAAAAAAAAAAACAAH/2gAMAwEAAhADEAAAAdaGywgZl//EABkQAQADAQEAAAAAAAAAAAAAAAECAxASE//aAAgBAQABBQKyfnDqxxB3/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGxAAAQQDAAAAAAAAAAAAAAAAAQACECEREkH/2gAIAQEABj8C2WWiuRYn/8QAHBABAAEEAwAAAAAAAAAAAAAAAREAECExUXGB/9oACAEBAAE/ITRElSTIZ4e20o90EEFv/9oADAMBAAIAAwAAABBzP//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAwEBPxBNn//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPxAcn//EABwQAQEAAQUBAAAAAAAAAAAAAAERABAhMUFRcf/aAAgBAQABPxBMZIQfWYigibptffI/MLCy9zBoTxBcAAANgOtP/9k=\'); background-size: cover; display: block;"\n ></span>\n <img\n class="gatsby-resp-image-image"\n alt="Une haute pile de feuilles grises prête à basculer, à côté d'un cahier des charges d'une seule page, lumineux, à quelques lignes"\n title=""\n src="/static/946777bea966f5ea98ea1ff22670be01/e5166/hero.jpg"\n srcset="/static/946777bea966f5ea98ea1ff22670be01/f93b5/hero.jpg 300w,\n/static/946777bea966f5ea98ea1ff22670be01/b4294/hero.jpg 600w,\n/static/946777bea966f5ea98ea1ff22670be01/e5166/hero.jpg 1200w,\n/static/946777bea966f5ea98ea1ff22670be01/c23a4/hero.jpg 1376w"\n sizes="(max-width: 1200px) 100vw, 1200px"\n style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"\n loading="eager" fetchpriority="high"\n decoding="async"\n />\n </span>'}}),"\n",n.createElement(t.p,null,"La plupart des projets de logiciel sur mesure n'échouent pas dans le code. Ils échouent dans le cahier des charges. Soit il n'y en a pas, soit c'est un document de 50 pages écrit avant d'avoir compris le problème, figé en contrat que plus personne ne relit après la deuxième semaine."),"\n",n.createElement(t.p,null,"Un cahier des charges logiciel, c'est simplement une description partagée de ce que le logiciel doit faire, et pourquoi. Son rôle est de créer un accord entre vous et celui qui le construit, pas de prévoir chaque écran à l'avance. Voici comment en écrire un qui aide vraiment : une définition claire, ce qu'il faut y mettre, un exemple concret et un modèle à copier."),"\n",n.createElement(t.hr),"\n",n.createElement(t.h2,{id:"quest-ce-quun-cahier-des-charges-"},"Qu'est-ce qu'un cahier des charges ?"),"\n",n.createElement(t.p,null,"Définition, en une phrase : un cahier des charges est le document qui décrit ce qu'un logiciel doit faire et pourquoi, comme accord écrit entre le client et celui qui va le construire. Ce n'est pas un plan technique, ni un contrat figé : c'est un point de référence partagé sur le problème à résoudre et le résultat attendu."),"\n",n.createElement(t.p,null,"On distingue souvent deux formes, et les confondre est une source classique de projets qui déraillent : le cahier des charges ",n.createElement(t.strong,null,"fonctionnel")," (ce que le logiciel doit faire, côté métier) et le cahier des charges ",n.createElement(t.strong,null,"technique")," (comment il sera construit). Les deux sont utiles, mais pas au même moment."),"\n",n.createElement(t.h2,{id:"cahier-des-charges-fonctionnel-ou-technique-"},"Cahier des charges fonctionnel ou technique ?"),"\n",n.createElement(t.p,null,"La distinction revient sans cesse, alors clarifions-la :"),"\n",n.createElement(t.ul,null,"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Le
1cahier des charges fonctionnel")," décrit les besoins métier : les fonctions attendues, les utilisateurs, les workflows, les résultats. Il répond à « quoi » et « pourquoi », sans présumer de la technologie. C'est celui par lequel commencer."),"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Le cahier des charges technique")," décrit le « comment » : architecture, technologies, performances, sécurité, contraintes d'intégration. Il est souvent rédigé plus tard, avec le prestataire, une fois le fonctionnel clair."),"\n"),"\n",n.createElement(t.p,null,"Notre conseil : commencez par le fonctionnel, et gardez-le court. Le technique découle des choix de construction ; le figer trop tôt revient à imposer une solution avant d'avoir compris le problème."),"\n",n.createElement(t.h2,{id:"ce-quil-faut-vraiment-y-mettre"},"Ce qu'il faut vraiment y mettre"),"\n",n.createElement(t.p,null,"Faites-le assez court pour qu'on le lise. En pratique, un cahier des charges utile tient en six points :"),"\n",n.createElement(t.ul,null,"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Le problème et le contexte."),' Ce qui coince aujourd\'hui, pour qui, et ce que ça coûte (temps, erreurs, argent). Pas "on veut une application", mais : ',n.createElement(t.em,null,'"un devis prend trois heures dans un tableur et 1 sur 5 part avec une erreur de prix."')),"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Les utilisateurs et leur travail.")," Qui s'en sert et ce qu'ils cherchent à accomplir. Un outil pour deux utilisateurs avancés n'est pas le même projet qu'un outil pour cinquante utilisateurs occasionnels."),"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Les workflows principaux.")," Les trois ou quatre choses que le logiciel doit faire de bout en bout. Décrivez le flux, pas chaque bouton."),"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Indispensable ou souhaitable.")," Une ligne explicite entre ce dont la version 1 a besoin et ce qui peut attendre. Cette seule distinction économise plus de budget que tout le reste."),"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Les contraintes.")," Les systèmes auxquels il doit se connecter (ERP, comptabilité, messagerie), les données qu'il manipule, les exigences de sécurité et de RGPD, et les échéances fermes."),"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"à quoi ressemble le succès."),' Un ou deux résultats mesurables : "un commercial envoie un devis juste en moins de 10 minutes", pour que tout le monde sache quand ça a marché.'),"\n"),"\n",n.createElement(t.p,null,"C'est tout. Si votre document est plus long que ce que votre équipe lira vraiment, ce n'est pas un cahier des charges, c'est une armoire à archives."),"\n",n.createElement(t.h2,{id:"un-exemple-concret"},"Un exemple concret"),"\n",n.createElement(t.p,null,"La théorie est plus claire avec un exemple. Voici à quoi ressemble un cahier des charges fonctionnel utile, pour une PME qui veut remplacer son processus de devis sous Excel :"),"\n",n.createElement(l,{separator:":",title:"Cahier des charges fonctionnel : outil de devis",items:[{label:"Problème et contexte",text:"établir un devis prend trois heures dans un tableur, et un devis sur cinq part avec une erreur de prix. Résultat : des ventes ralenties et des marges rognées."},{label:"Utilisateurs",text:"six commerciaux (usage quotidien) et un responsable ADV qui valide les remises."},{label:"Workflows principaux",text:"créer un devis depuis le catalogue ; appliquer une remise soumise à validation ; générer le PDF ; suivre les devis envoyés."},{label:"Indispensable ou souhaitable",text:"indispensable, le devis juste et le PDF ; souhaitable, la signature électronique et les relances automatiques."},{label:"Contraintes",text:"se connecte au catalogue produits et à la comptabilité ; données clients soumises au RGPD ; prêt avant la rentrée de septembre."},{label:"Critères de succès",text:"un commercial envoie un devis juste en moins de dix minutes, et zéro erreur de prix sur les devis partis."}]}),"\n",n.createElement(t.p,null,"Une page, six points, et tout le monde sait ce qu'on construit et pourquoi. C'est un exemple, pas un gabarit rigide : adaptez-le à votre projet."),"\n",n.createElement(t.h2,{id:"les-erreurs-qui-coulent-les-projets"},"Les erreurs qui coulent les projets"),"\n",n.createElement(t.ul,null,"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Spécifier des solutions au lieu des problèmes."),' "Ajoutez un menu déroulant ici" masque le vrai besoin et bloque de meilleures réponses. Décrivez le résultat, laissez celui qui construit proposer le comment.'),"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Figer le périmètre avant d'avoir appris quoi que ce soit.")," Les hypothèses les plus coûteuses sont celles écrites comme des exigences dès le premier jour et jamais remises en question."),"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Ignorer la réalité des données et des intégrations.")," Où vivent les données aujourd'hui, dans quel état, et qu'est-ce qui doit parler à quoi ? C'est là que les projets \"simples\" deviennent chers."),"\n",n.createElement(t.li,null,n.createElement(t.strong,null,"Aucun indicateur de succès."),' Sans lui, "terminé" devient une discussion au lieu d\'un fait.'),"\n"),"\n",n.createElement(t.h2,{id:"notre-avis--le-cahier-des-charges-est-un-point-de-départ-pas-une-forteresse"},"Notre avis : le cahier des charges est un point de départ, pas une forteresse"),"\n",n.createElement(t.p,null,"Nous construisons de
1s logiciels pour vivre, et les meilleurs projets ne commencent pas par un cahier des charges parfait de 50 pages. Ils commencent par un brief clair d'une page et une première tranche à forte valeur : quelque chose de réel en quelques semaines, pas une livraison massive dans un an. On apprend plus d'une fonctionnalité qui tourne que de trois mois de spécifications."),"\n",n.createElement(t.p,null,"Le développement assisté par IA rend cela encore plus vrai : il est aujourd'hui moins cher de construire une première version et d'itérer que d'essayer de tout spécifier d'avance. Alors écrivez le cahier des charges pour vous mettre d'accord sur le problème et la première tranche, puis laissez la réalité affiner le reste."),"\n",n.createElement(t.h2,{id:"un-modèle-à -copier"},"Un modèle à copier"),"\n",n.createElement(t.p,null,"Voici le modèle, réduit à l'essentiel. Copiez-le, remplissez-le en une page :"),"\n",n.createElement(l,{separator:":",title:"Modèle en une page",items:[{label:"Problème et contexte",text:"ce qui coince, pour qui, ce que ça coûte."},{label:"Utilisateurs",text:"qui s'en sert, ce qu'ils cherchent à faire."},{label:"Workflows principaux",text:"les 3 ou 4 choses à faire de bout en bout."},{label:"Indispensable ou souhaitable",text:"une ligne explicite."},{label:"Contraintes",text:"intégrations, données, sécurité/RGPD, échéances."},{label:"Critères de succès",text:"1 ou 2 résultats mesurables."}]}),"\n",n.createElement(t.h2,{id:"oubliez-le-document-de-50-pages"},"Oubliez le document de 50 pages"),"\n",n.createElement(t.p,null,"Si vous cadrez un outil sur mesure devant un cahier des charges vierge, n'en faites pas trop. Envoyez-nous la version d'une page, ou même la version brouillon, et nous vous dirons honnêtement ce qui manque et si le projet en vaut la peine. ",n.createElement(t.a,{href:"/fr/contact/"},"Contactez-nous"),"."),"\n",n.createElement(t.p,null,n.createElement(t.em,null,"à lire aussi : ",n.createElement(t.a,{href:"/fr/blog/developpement-logiciel-sur-mesure/"},"le prix d'un logiciel sur mesure, étapes et fourchettes chiffrées"),", ",n.createElement(t.a,{href:"/fr/solutions/custom-erp-tooling/"},"ce qu'est un logiciel sur mesure et quand il en vaut la peine"),", ",n.createElement(t.a,{href:"/fr/blog/low-code-no-code-vs-custom/"},"low-code, no-code ou sur mesure : comment choisir"),", et ",n.createElement(t.a,{href:"/fr/blog/modelisation-processus-metier/"},"la modélisation des processus métier"),".")),"\n",n.createElement(t.p,null,n.createElement(t.em,null,"Si le logiciel existe déjà et que le problème est que personne ne sait plus le maintenir, un cahier des charges n'est pas la bonne réponse : voir ",n.createElement(t.a,{href:"/fr/solutions/reprise-de-code/"},"l'audit de code et la reprise de projet"),".")))}var s=function(e={}){const{wrapper:t}=Object.assign({},(0,a.RP)(),e.components);return t?n.createElement(t,e,n.createElement(r,e)):r(e)};var o=l(4506),i=l(4755),c=l(7746),u=l(4823),m=l(7093),d=l(6585),p=l(6085),g=l(5367),x=l(4368),b=l(1840),A=l(6388),f=l(7891),h=l(7414),E=l(5515),y=l(5996);const v={h2:e=>n.createElement("h2",Object.assign({className:"text-2xl sm:text-3xl font-bold text-gray-1 mt-8 mb-4"},e)),h3:e=>n.createElement("h3",Object.assign({className:"text-xl sm:text-2xl font-bold text-gray-1 mt-6 mb-3"},e)),p:e=>n.createElement("p",Object.assign({className:"text-base sm:text-lg text-gray-2 leading-relaxed mb-4"},e)),ul:e=>n.createElement("ul",Object.assign({className:"pl-6 sm:pl-8 list-disc text-base sm:text-lg text-gray-2 leading-relaxed my-4"},e)),ol:e=>n.createElement("ol",Object.assign({className:"pl-6 sm:pl-8 text-base sm:text-lg text-gray-2 list-decimal leading-relaxed my-4"},e)),li:e=>n.createElement("li",Object.assign({className:"mb-3"},e)),img:e=>n.createElement("img",Object.assign({className:"w-full h-auto rounded-lg my-8 sm:my-12"},e)),a:e=>n.createElement("a",Object.assign({className:"text-dark-blue"},e)),strong:e=>n.createElement("strong",Object.assign({className:"font-bold text-gray-1"},e)),hr:()=>n.createElement("hr",{className:"border-t border-gray-3 my-8"}),blockquote:e=>n.createElement("blockquote",Object.assign({className:"border-l-4 border-light-blue pl-4 sm:pl-6 my-4 text-base sm:text-lg text-gray-2 italic"},e)),table:e=>n.createElement("div",{className:"overflow-x-auto my-6"},n.createElement("table",Object.assign({className:"min-w-full text-sm sm:text-base text-gray-2 border-collapse"},e))),thead:e=>n.createElement("thead",Object.assign({className:"border-b-2 border-gray-3"},e)),th:e=>n.createElement("th",Object.assign({className:"text-left font-bold text-gray-1 px-3 py-2 sm:px-4 sm:py-3"},e)),td:e=>n.createElement("td",Object.assign({className:"px-3 py-2 sm:px-4 sm:py-3 border-b border-gray-3"},e)),ArchitectureDiagram:x.A,ToolDistributionChart:b.A,DryRunFlow:A.A,InArticleCTA:E.A,SpecList:f.A,ChatPreview:h.A},w={to:"/solutions/custom-erp-tooling/",titleKey:"blog_next_custom_title",descKey:"blog_next_custom_desc"},N={to:"/solutions/reprise-de-code/",titleKey:"blog_next_takeover_title",descKey:"blog_next_takeover_desc"},q={to:"/solutions/technical-due-diligence/",titleKey:"blog_next_tdd_title",descKey:"blog_next_tdd_desc"},k={to:"/case-studies/",titleKey:"blog_next_cases_title",descKey:"blog_next_cases_desc"},_={links:[{to:"/data/",titleKey:"blog_next_data_title",descKey:"blog_next_data_desc"},{to:"/reflekt-crm/",titleKey:"blog_next_crm_title",descKey:"blog_next_crm_desc"},{to:"/technology/",titleKey:"blog_next_tech_title",descKey:"blog_next_tech_desc"}],titleKey:"blog_cta_title"},j=[["code-audit",{links:[N,q,k],titleKey:"blog_cta_title_takeover",topic:"code-takeover"}],["fractional-cto",{links:[{to:"/solutions/fractional-cto/",titleKey:"blog_next_cto_title",descKey:"blog_next_cto_desc"},q,k],titleKey:"blog_cta_title_cto"}],["custom-software",{links:[w,N,k],titleKey:"blog_cta_title_custom",topic:"custom-software"}],["ai-strategy",{links:[{to:"/solutions/audit-ia/",titleKey:"blog_next_audit_title",descKey:"blog_next_audit_desc"},k,w],titleKey:"blog_cta_title_audit",topic:"audit-ia"}]],F=e=>{const t=new Set(null!=e?e:[]),l=j.find(([e])=>t.has(e));return l?l[1]:_},C=(e,t,l,a=3)=>{const n=e.filter(e=>e.fields.slug!==t),r=(0,o.A)(n).sort((e,t)=>
1{var l,a;return(null!==(l=t.frontmatter.date)&&void 0!==l?l:"").localeCompare(null!==(a=e.frontmatter.date)&&void 0!==a?a:"")}),s=null!=l?l:[];if(0===s.length)return r.slice(0,a);const i=new Set(s),c=r.map(e=>{var t;return{post:e,shared:(null!==(t=e.frontmatter.tags)&&void 0!==t?t:[]).filter(e=>i.has(e)).length}}).filter(e=>e.shared>0).sort((e,t)=>t.shared-e.shared).map(e=>e.post);if(c.length>=a)return c.slice(0,a);const u=new Set(c.map(e=>e.fields.slug));return[].concat((0,o.A)(c),(0,o.A)(r.filter(e=>!u.has(e.fields.slug)))).slice(0,a)},B=({data:e,pageContext:t})=>{var l,a,r,s,o,i,u,m,d;const p=null===(l=e.mdx)||void 0===l?void 0:l.frontmatter;if(!p)return n.createElement("title",null,"Reflekt Lab - Blog");const{slug:g,language:x,i18n:b}=t,A=null!==(a=null==b?void 0:b.defaultLanguage)&&void 0!==a?a:"en",f=null!==(r=null==b?void 0:b.languages)&&void 0!==r?r:[x],h=e=>e===A?`/blog/${g}/`:`/${e}/blog/${g}/`,E=h(x),y=f.map(e=>({lang:e,path:h(e)})),v=(null!==(s=p.faq)&&void 0!==s?s:[]).filter(e=>(null==e?void 0:e.q)&&(null==e?void 0:e.a)),w=v.length>0?{"@context":"https://schema.org","@type":"FAQPage",mainEntity:v.map(e=>({"@type":"Question",name:e.q,acceptedAnswer:{"@type":"Answer",text:e.a}}))}:null;return n.createElement(n.Fragment,null,n.createElement(c.A,{article:!0,title:p.seoTitle||`${p.title} | Reflekt Lab`,description:p.description||p.subtitle||p.title,image:null!==(o=null===(i=p.image)||void 0===i||null===(u=i.childImageSharp)||void 0===u||null===(m=u.original)||void 0===m?void 0:m.src)&&void 0!==o?o:void 0,pathname:E,language:x,alternateLanguages:y,datePublished:p.date,author:null===(d=p.author)||void 0===d?void 0:d.name}),w&&n.createElement("script",{type:"application/ld+json"},JSON.stringify(w)))},P=({data:{mdx:e,relatedPosts:t},pageContext:l,children:r})=>{var s;const{t:o}=(0,i.useTranslation)(),{slug:c}=l,x=F(e.frontmatter.tags),b=x.links,A=x.topic?{to:(0,y.y2)(x.topic),label:o("blog_cta_describe")}:{to:"/contact",label:o("blog_cta_sample")},f=C(null!==(s=null==t?void 0:t.nodes)&&void 0!==s?s:[],c,e.frontmatter.tags);return n.createElement(d.A,null,n.createElement("div",{className:"w-full flex justify-center py-8 sm:py-12 md:py-16"},n.createElement("article",{className:"w-full max-w-3xl lg:max-w-4xl xl:max-w-5xl px-4 sm:px-6 md:px-8 lg:px-12 flex flex-col gap-6 sm:gap-8 text-gray-1"},n.createElement("header",{className:"flex flex-col gap-3 sm:gap-4"},n.createElement(u.A,{as:"h1"},e.frontmatter.title),e.frontmatter.subtitle&&n.createElement(m.A,{className:"text-gray-2"},e.frontmatter.subtitle),n.createElement("div",{className:"flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-4 text-sm text-gray-2"},e.frontmatter.author&&n.createElement("div",{className:"flex items-center gap-2"},e.frontmatter.author.avatar&&n.createElement("img",{src:e.frontmatter.author.avatar,alt:e.frontmatter.author.name,className:"w-8 h-8 rounded-full object-cover"}),n.createElement("p",null,e.frontmatter.author.link?n.createElement("a",{href:e.frontmatter.author.link,target:"_blank",rel:"noopener noreferrer",className:"text-dark-blue hover:underline"},e.frontmatter.author.name):n.createElement(n.Fragment,null,e.frontmatter.author.name))),n.createElement("p",null," ",(e=>{const t=new Date(e);return`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][t.getMonth()]} ${t.getDate()}, ${t.getFullYear()}`})(e.frontmatter.date)))),n.createElement("div",{className:"prose prose-lg max-w-none"},n.createElement(a.xA,{components:v},r)),n.createElement("aside",{"aria-label":o("blog_next_title"),className:"mt-8 sm:mt-12 pt-8 border-t border-gray-3"},n.createElement("h2",{className:"text-2xl sm:text-3xl font-bold text-gray-1 mb-4"},o("blog_next_title")),n.createElement("div",{className:"grid gap-4 sm:grid-cols-3"},b.map(e=>n.createElement(i.Link,{key:e.to,to:e.to,className:"block bg-gray-4 border border-gray-3 rounded-lg px-5 py-4 hover:border-dark-blue transition-colors"},n.createElement("span",{className:"block font-semibold text-dark-blue mb-1"},o(e.titleKey)),n.createElement("span",{className:"block text-sm text-gray-2 leading-snug"},o(e.descKey))))),n.createElement("div",{className:"mt-6 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 bg-gradient-to-br from-indigo-800 to-teal-700 rounded-lg px-6 py-5"},n.createElement("p",{className:"text-white font-semibold text-lg"},o(x.titleKey)),n.createElement("div",{className:"flex flex-col sm:flex-row gap-3 shrink-0"},n.createElement(p.Ay,{variant:"primary",placement:"blog",className:"inline-block text-center whitespace-nowrap bg-white text-dark-blue font-semibold rounded-lg px-5 py-3 hover:bg-gray-4 transition-colors"}),n.createElement(i.Link,{to:A.to,onClick:()=>(0,g.UA)(A.label,A.to,{location:"blog-footer"}),className:"inline-block text-center whitespace-nowrap border border-white/70 text-white font-semibold rounded-lg px-5 py-3 hover:bg-white/10 transition-colors"},A.label)))),f.length>0&&n.createElement("nav",{"aria-label":"Related articles",className:"mt-8 sm:mt-12 pt-8 border-t border-gray-3"},n.createElement("h2",{className:"text-2xl sm:text-3xl font-bold text-gray-1 mb-4"},"Related articles"),n.createElement("ul",{className:"flex flex-col gap-3"},f.map(e=>n.createElement("li",{key:e.id},n.createElement(i.Link,{to:`/blog/${e.fields.slug}/`,className:"text-lg text-dark-blue hover:underline"},e.frontmatter.title))))))))};function L(e){return n.createElement(P,e,n.createElement(s,e))}},7093:function(e,t,l){var a=l(6540);t.A=({children:e,className:t})=>a.createElement("h3",{className:`text-m font-semibold text-gray-1 ${null!=t?t:""}`},e)},4823:function(e,t,l){var a=l(6540);t.A=({children:e,className:t,as:l="h2",id:n})=>a.createElement(l,{id:n,className:`text-3xl md:text-5xl font-extrabold tracking-tight text-gray-900 ${null!=t?t:""}`},e)},4368:function(e,t,l){var a=l(6540);const n=({x:e,y:t,w:l,h:n,label:r,sublabel:s,fill:o="#F7FAFC",textColor:i="#1F2933"})=>a.createElement("g",null,a.createElement("rect",{x:e,y:t,width:l,height:n,rx:8,fill:o,stroke:"#E2E8F0",strokeWidth:1.5}),a.createElement("text",{x:e+l/2,y:s?t+n/2-6:t+n/2+1,textAnchor:"middle",dominantBaseline:"middle",fill:i,fontSize:13,fontWeight:600,fontFamily:"Montserrat, sans-serif"},r),s&&a.createElement("text",{x:e+l/2,y:t+n/2+12,textAnchor:"middle",dominantBaseline:"middle",fill:"#4A5568",fontSize:10,fontFamily:"Montserrat, sans-serif"},s)),r=({x1:e,y1:t,x2:l,y2:n})=>a.createElement("g",null,a.createElement("line",{x1:e,y1:t,x2:l,y2:n,stroke:"#E2E8F0",strokeWidth:1.5}),a.createElement("polygon",{points:`${l},${n} ${l-4},${n-7} ${l+4},${n-7}`,fill:"#E2E8F0"}));t.A=()=>a.createElement("div",{className:"my-8 rounded-lg border border-gray-3 bg-white p-4 sm:p-6 overflow-x-auto"},a.createElement("p",{className:"text-sm font-bold text-gray-1 mb-4 uppercase tracking-wide"},"Architecture overview"),a.createElement("svg",{viewBox:"0 0 680 360",className:"w-full max-w-2xl mx-auto",xmlns:"http://www.w3.org/2000/svg"},a.createElement(n,{x:10,y:10,w:120,h:44,label:"Claude Desktop",sublabel:"stdio proxy",fill:"#e0f2fe"}),a.createElement(n,{x:145,y:10,w:120,h:44,label:"Claude Code",sublabel:"HTTP",fill:"#e0f2fe"}),a.createElement(n,{x:280,y:10,w:120,h:44,label:"Cursor",sublabel:"HTTP",fill:"#e0f2fe"}),a.createElement(n,{x:415,y:10,w:120,h:44,label:"Telegram Bot",sublabel:"HTTP",fill:"#e0f2fe"}),a.createElement(n,{x:550,y:10,w:120,h:44,label:"Classifier",sublabel:"HTTP",fill:"#e0f2fe"}),a.createElement(r,{x1:70,y1:54,x2:70,y2:95}),a.createElement(r,{x1:205,y1:54,x2:205,y2:95}),a.createElement(r,{x1:340,y1:54,x2:340,y2:95}),a.createElement(r,{x1:475,y1:54,x2:475,y2:95}),a.createElement(r,{x1:610,y1:54,x2:610,y2:95}),a.createElement("rect",{x:40,y:95,width:600,height:75,rx:10,fill:"#2979FF",fillOpacity:.08,stroke:"#2979FF",strokeWidth:1.5}),a.createElement("text",{x:340,y:117,textAnchor:"middle",fill:"#2979FF",fontSize:13,fontWeight:700,fontFamily:"Montserrat, sans-serif"},"MCP Server"),a.createElement(n,{x:80,y:125,w:130,h:34,label:"Auth Middleware",fill:"#FFFFFF"}),a.createElement(n,{x:275,y:125,w:130,h:34,label:"Tool Registry",fill:"#FFFFFF"}),a.createElement(n,{x:470,y:125,w:130,h:34,label:"Router",fill:"#FFFFFF"}),a.createElement(r,{x1:340,y1:170,x2:340,y2:210}),[{label:"CRM",sub:"43 tools",x:15},{label:"ERP",sub:"23 tools",x:125},{label:"Sheets",sub:"7 tools",x:235},{label:"Linear",sub:"6 tools",x:345},{label:"Products",sub:"6 tools",x:455},{label:"Bank",sub:"6 tools",x:565}].map(e=>a.createElement(n,{key:e.label,x:e.x,y:210,w:100,h:44,label:e.label,sublabel:e.sub,fill:"#42A5F5",textColor:"#FFFFFF"})),[65,175,285,395,505,615].map((e,t)=>a.createElement(r,{key:t,x1:e,y1:254,x2:e,y2:295})),[{label:"PostgreSQL",x:15},{label:"REST API",x:125},{label:"Sheets API",x:235},{label:"GraphQL",x:345},{label:"Local XLSX",x:455},{label:"Local XLSX",x:565}].map(e=>a.createElement(n,{key:e.label+e.x,x:e.x,y:295,w:100,h:40,label:e.label,fill:"#F7FAFC"}))))},7414:function(e,t,l){var a=l(6540);t.A=({title:e,lines:t,actions:l})=>a.createElement("figure",{className:"my-8 mx-0 max-w-xl"},a.createElement("div",{className:"rounded-lg rounded-tl-none border border-gray-3 bg-white shadow-card px-4 py-4 sm:px-5 sm:py-5"},a.createElement("p",{className:"text-base sm:text-lg font-bold text-gray-1 m-0"},e),a.createElement("ul",{className:"list-none pl-0 mt-3 mb-0 flex flex-col gap-2"},t.map((e,t)=>a.createElement("li",{key:`${e}-${t}`,className:"flex items-start gap-2 text-base text-gray-2 leading-relaxed"},a.createElement("span",{"aria-hidden":"true",className:"text-indigo-700 shrink-0"},"â¢"),a.createElement("span",null,e)))),l&&l.length>0&&a.createElement("div",{className:"mt-4 pt-4 border-t border-gray-3 flex flex-wrap gap-2"},l.map((e,t)=>a.createElement("span",{key:`${e}-${t}`,className:"rounded px-3 py-1.5 text-sm font-semibold "+(0===t?"bg-indigo-700 text-white":"border border-gray-3 text-gray-2")},e)))))},6388:function(e,t,l){var a=l(6540);const n=[{icon:"1",label:"AI calls tool",detail:"dry_run: true",color:"#2979FF"}
1,{icon:"2",label:"Server previews",detail:"No data written",color:"#42A5F5"},{icon:"3",label:"User reviews",detail:"Confirm or cancel",color:"#0ea5e9"},{icon:"4",label:"AI commits",detail:"dry_run: false",color:"#10b981"}];t.A=()=>a.createElement("div",{className:"my-8 rounded-lg border border-gray-3 bg-gray-4 p-4 sm:p-6"},a.createElement("p",{className:"text-sm font-bold text-gray-1 mb-5 uppercase tracking-wide"},"Dry-run confirmation flow"),a.createElement("div",{className:"flex flex-col sm:flex-row items-stretch sm:items-center gap-3 sm:gap-0"},n.map((e,t)=>a.createElement(a.Fragment,{key:e.icon},a.createElement("div",{className:"flex sm:flex-col items-center gap-3 sm:gap-2 flex-1"},a.createElement("div",{className:"w-10 h-10 rounded-full flex items-center justify-center text-white text-sm font-bold shrink-0",style:{backgroundColor:e.color}},e.icon),a.createElement("div",{className:"sm:text-center"},a.createElement("p",{className:"text-sm font-bold text-gray-1"},e.label),a.createElement("p",{className:"text-xs text-gray-2"},e.detail))),t<n.length-1&&a.createElement("div",{className:"hidden sm:flex items-center px-2 text-gray-3 text-lg"},"â")))))},5515:function(e,t,l){var a=l(6540),n=l(4755),r=l(6085),s=l(5367);t.A=({heading:e,body:t,to:l,linkLabel:o,placement:i="blog-inline"})=>a.createElement("aside",{className:"my-10 rounded-xl border border-indigo-100 bg-indigo-50/70 px-6 py-6"},a.createElement("div",{className:"mb-4"},a.createElement("p",{className:"text-lg font-bold text-gray-1"},e),t&&a.createElement("p",{className:"mt-1 text-gray-2 leading-snug"},t)),a.createElement("div",{className:"flex flex-col sm:flex-row sm:items-center gap-3"},a.createElement(r.Ay,{variant:"primary",placement:i}),l&&o&&a.createElement(n.Link,{to:l,onClick:()=>(0,s.UA)(o,l,{location:i}),className:"text-dark-blue underline font-semibold text-sm"},o)))},7891:function(e,t,l){var a=l(6540);t.A=({items:e,title:t,numbered:l=!0,separator:n="â"})=>{const r=l?"ol":"ul";return a.createElement("div",{className:"my-8 rounded-lg border border-gray-3 bg-gray-4 p-4 sm:p-6"},t&&a.createElement("p",{className:"text-sm font-bold text-gray-1 mb-5 uppercase tracking-wide"},t),a.createElement(r,{className:"flex flex-col gap-4 list-none pl-0 m-0"},e.map((e,t)=>a.createElement("li",{key:`${e.label}-${t}`,className:"flex items-start gap-3 sm:gap-4"},l?a.createElement("span",{className:"mt-0.5 w-7 h-7 shrink-0 rounded-full bg-indigo-700 text-white text-sm font-bold flex items-center justify-center"},t+1):a.createElement("span",{"aria-hidden":"true",className:"mt-2.5 w-2 h-2 shrink-0 rounded-full bg-indigo-700"}),a.createElement("p",{className:"text-base sm:text-lg text-gray-2 leading-relaxed m-0"},a.createElement("span",{className:"font-bold text-gray-1"},e.label),e.text?a.createElement(a.Fragment,null," ",n," ",e.text):null)))))}},1840:function(e,t,l){var a=l(6540);const n=[{name:"CRM",tools:43,color:"#2979FF"},{name:"ERP Connector",tools:23,color:"#42A5F5"},{name:"Google Sheets",tools:7,color:"#38bdf8"},{name:"Linear",tools:6,color:"#7dd3fc"},{name:"Product DB",tools:6,color:"#0ea5e9"},{name:"Bank Statements",tools:6,color:"#e0f2fe"}];t.A=()=>a.createElement("div",{className:"my-8 rounded-lg border border-gray-3 bg-gray-4 p-4 sm:p-6"},a.createElement("p",{className:"text-sm font-bold text-gray-1 mb-4 uppercase tracking-wide"},"Tool distribution by module"),a.createElement("div",{className:"flex flex-col gap-3"},n.map(e=>a.createElement("div",{key:e.name,className:"flex items-center gap-3"},a.createElement("span",{className:"text-sm text-gray-2 w-32 sm:w-36 text-right shrink-0"},e.name),a.createElement("div",{className:"flex-1 flex items-center gap-2"},a.createElement("div",{className:"flex-1 h-7 bg-gray-3 rounded overflow-hidden"},a.createElement("div",{className:"h-full rounded transition-all",style:{width:e.tools/43*100+"%",backgroundColor:e.color}})),a.createElement("span",{className:"text-sm font-bold text-gray-1 w-8"},e.tools))))),a.createElement("p",{className:"text-xs text-gray-2 mt-4 text-center"},"91 tools total across 6 modules"))},5996:function(e,t,l){l.d(t,{Jj:function(){return s},Kj:function(){return r},y2:function(){return n}});const a=["audit-ia","custom-software","code-takeover"];function n(e){return`/contact/?topic=${e}`}function r(e){const t=new URLSearchParams(e).get("topic");return a.includes(null!=t?t:"")?t:null}function s(e,t){return`topic_${e.replace(/-/g,"_")}_${t}`}},8453:function(e,t,l){l.d(t,{RP:function(){return r},xA:function(){return o}});var a=l(6540);const n=a.createContext({});function r(e){const t=a.useContext(n);return a.useMemo(()=>"function"==typeof e?e(t):{...t,...e},[t,e])}const s={};function o({components:e,children:t,disableParentContext:l}){let o;return o=l?"function"==typeof e?e({}):e||s:r(e),a.createElement(n.Provider,{value:o},t)}}}]); 2//# sourceMappingURL=component---src-components-blog-post-tsx-content-file-path-blog-cahier-des-charges-logiciel-index-fr-mdx-07734f78f13ab2e69e16.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.