[{"data":1,"prerenderedAt":232},["ShallowReactive",2],{"seite-\u002Ffr\u002Fopen-source\u002Fdms-selbst-gebaut\u002F":3},{"id":4,"title":5,"body":6,"description":223,"extension":224,"meta":225,"navigation":226,"path":227,"robots":228,"seo":229,"stem":230,"__hash__":231},"seiten_fr\u002Fopen-source\u002Fdms-selbst-gebaut.md","Trois programmes ou un programme maison",{"type":7,"value":8,"toc":213},"minimark",[9,13,17,22,25,44,47,51,54,57,61,64,86,89,93,96,107,125,132,135,146,150,153,156,159,163,166,169,172,175,178,182,196],[10,11,5],"h1",{"id":12},"trois-programmes-ou-un-programme-maison",[14,15,16],"p",{},"En février 2026, je voulais me débarrasser de mes papiers : factures, contrats,\nlettres médicales, documents fiscaux. Les photographier ou les téléverser en\nPDF, le reste devait se faire tout seul. Avant, j’ai examiné plus de 30 projets\nopen source, puis j’ai construit moi-même. Cet article explique pourquoi, et à\nquoi ressemble la situation six mois plus tard.",[18,19,21],"h2",{"id":20},"cinq-exigences-et-un-ordinateur-portable-faible","Cinq exigences et un ordinateur portable faible",[14,23,24],{},"La liste était courte, et chaque point était obligatoire :",[26,27,28,32,35,38,41],"ol",{},[29,30,31],"li",{},"Téléversement de photos et de PDF avec une archive derrière",[29,33,34],{},"Reconnaissance de texte (OCR) via Mistral OCR",[29,36,37],{},"Des tags qui découlent du contenu, sans que je les pose",[29,39,40],{},"Recherche plein texte et un chat qui répond aux questions sur tous les documents",[29,42,43],{},"Une seule interface pour tout",[14,45,46],{},"Le point 2 venait du matériel. Mon ordinateur portable a 4 Go de mémoire\ngraphique et peu de RAM. MinerU en demande 16 à 32 Go, Docling a des pics de 3 à\n4 Go, PaddleOCR veut un GPU correct. Une reconnaissance de texte locale de bonne\nqualité était donc exclue.",[18,48,50],{"id":49},"le-motif-dans-lévaluation","Le motif dans l’évaluation",[14,52,53],{},"J’ai examiné des archivages de documents comme Paperless-ngx, Papermerge,\nDocspell, Mayan EDMS et Teedy, des outils RAG comme AnythingLLM, kotaemon, Open\nWebUI, Dify et RAGFlow, ainsi que des ERP avec module documentaire. Chaque projet\na eu une ligne, chaque exigence une colonne.",[14,55,56],{},"Après quelques lignes, le motif était clair. Les archivages savaient archiver,\ntaguer et chercher, mais pas répondre aux questions. Les outils RAG savaient\nrépondre aux questions, mais rien classer : pas de dossiers, pas de tags par\ndocument, pas d’archive que l’on parcourt. Chaque groupe avait exactement la\nmoitié.",[18,58,60],{"id":59},"la-meilleure-combinaison-comptait-trois-programmes","La meilleure combinaison comptait trois programmes",[14,62,63],{},"Le plus proche était Paperless-ngx avec deux extensions :",[65,66,67,74,80],"ul",{},[29,68,69,73],{},[70,71,72],"strong",{},"Paperless-ngx"," comme archive avec recherche plein texte",[29,75,76,79],{},[70,77,78],{},"paperless-gpt"," pour Mistral OCR et les tags par modèle de langage",[29,81,82,85],{},[70,83,84],{},"paperless-ai"," pour le chat sur tous les documents",[14,87,88],{},"Cela fait trois programmes avec trois interfaces, trois configurations et deux\nindex qui doivent correspondre à l’archive. Qui téléverse un document va dans\nune interface ; qui pose une question, dans une autre. C’est exactement ce que\nje ne voulais pas. L’exigence 5 a été la raison de construire moi-même.",[18,90,92],{"id":91},"ce-qui-est-né-à-la-place","Ce qui est né à la place",[14,94,95],{},"Le DMS est une interface Vue 3 avec PrimeVue sur Supabase : PostgreSQL avec\npgvector pour les vecteurs, Storage pour les fichiers, Edge Functions pour le\ntraitement. Un téléversement passe par quatre étapes :",[97,98,103],"pre",{"className":99,"code":101,"language":102},[100],"language-text","upload-document → process-ocr → extract-data → generate-embed\n","text",[104,105,101],"code",{"__ignoreMap":106},"",[14,108,109,112,113,116,117,120,121,124],{},[104,110,111],{},"upload-document"," calcule le SHA-256 du fichier et refuse les doublons.\n",[104,114,115],{},"process-ocr"," lit localement les PDF avec couche texte et n’envoie à Mistral OCR\nque les photos et les scans. ",[104,118,119],{},"extract-data"," détermine le type de document, lit\ndes champs comme le montant et l’échéance selon un schéma et attribue des tags.\n",[104,122,123],{},"generate-embed"," découpe le texte en sections de 1000 caractères qui se\nchevauchent de 200, et enregistre leurs vecteurs.\nSi une étape échoue, l’erreur est indiquée sur le document.",[14,126,127,128,131],{},"La recherche combine les deux choses que PostgreSQL apporte : la recherche plein\ntexte allemande avec ",[104,129,130],{},"tsvector"," et la recherche vectorielle avec pgvector,\npondérées à 0,4 et 0,6. Le chat récupère par la même recherche les sections\npertinentes et indique pour chaque réponse les documents dont elle provient.",[14,133,134],{},"Comme tout se trouve dans une seule base de données, les droits s’appliquent\naussi à un seul endroit. Une équipe peut réserver des types de documents comme\nles certificats de salaire aux seuls admins. La fonction de recherche filtre\nselon les mêmes règles que la liste de documents, si bien qu’un document bloqué\nn’apparaît ni dans les résultats ni comme source dans le chat. Avec trois\nprogrammes, chaque index aurait dû reproduire les droits de l’archive.",[14,136,137,138,145],{},"Aucune partie de l’application n’appelle Mistral directement. Tous les appels\npassent par un ",[139,140,144],"a",{"href":141,"rel":142},"https:\u002F\u002Fgithub.com\u002Fgstrainovic\u002Fai-proxy",[143],"nofollow","proxy maison",", qui\ndétient la clé et compte la consommation par organisation.",[18,147,149],{"id":148},"mistral-ocr-était-il-le-bon-choix","Mistral OCR était-il le bon choix ?",[14,151,152],{},"En février, c’était le seul que l’ordinateur portable permettait. En septembre,\nj’ai mesuré à nouveau : Mistral OCR contre des modèles de vision proposés en\nSuisse par Infomaniak et kvant, avec des justificatifs artificiels et réels,\npropres et déformés.",[14,154,155],{},"Sur des scans propres, les grands modèles de vision comme Kimi K2.6 et Qwen3.5\nfont aussi bien ou mieux, mais plus lentement et plus cher. Dès que le document\ndevient difficile, Mistral OCR passe devant : sur des pages déformées avec des\ntableaux denses, il a trouvé 91 % des cellules, les modèles de vision 82 % au\nplus. Sur des documents suisses comme les QR-factures et les certificats de\nsalaire, il a fait le moins d’erreurs de caractères, sur de vraies photos de\ntéléphone il a trouvé 97 à 99 % des champs.",[14,157,158],{},"Pour la protection des données, Mistral n’est pas le meilleur choix, mais un\nchoix admissible. Les serveurs sont en France, et la loi suisse sur la\nprotection des données autorise la transmission vers l’UE sans garanties\nsupplémentaires. Un fournisseur suisse serait meilleur pour l’emplacement. La\nrègle du test était donc : la qualité avant l’emplacement. Les détails feront\nl’objet d’un article à part.",[18,160,162],{"id":161},"à-quoi-cela-ressemble-aujourdhui","À quoi cela ressemble aujourd’hui",[14,164,165],{},"Pour cet article, j’ai refait l’évaluation en septembre 2026. Le domaine évolue\nvite : certains projets ont intégré Mistral OCR, Papermerge cherche de nouveaux\nmainteneurs, OpenKM ne distribue plus sa version communautaire que sans code\nsource.",[14,167,168],{},"C’est chez Paperless-ngx que les choses ont le plus bougé. La version 3.0 est\nsortie en juillet 2026 avec de l’IA intégrée : des suggestions de titre, de tags et de type de document,\net un chat sur un ou plusieurs documents, avec des liens vers les sources. Comme\nmodèle de langage servent Ollama ou toute API compatible OpenAI. La\nreconnaissance de texte dans le cloud, Paperless-ngx ne la propose lui-même que\nvia Azure. Mistral OCR et les tags dès l’import, c’est toujours paperless-gpt\nqui les apporte. D’après son README, paperless-ai n’est plus maintenu.",[14,170,171],{},"Papra, un archivage léger, a depuis juillet Mistral OCR et les tags par modèle\nde langage. Il ne lui manque que le chat.",[14,173,174],{},"De trois programmes, on est donc passé à deux. Qui veut aujourd’hui un archivage\nprivé avec chat et peut vivre avec deux interfaces devrait d’abord essayer\nPaperless-ngx 3 avec paperless-gpt. C’est plus mûr que mon projet ne peut le\ndevenir en six mois.",[14,176,177],{},"Construire soi-même en vaut la peine si l’une des cinq exigences n’est pas\nnégociable, ou si l’archivage doit tourner pour d’autres. Des organisations avec\ndes rôles, des droits par type de document jusque dans le chat, la consommation\npar organisation : cela se greffe difficilement sur trois programmes reliés.",[18,179,181],{"id":180},"ce-qui-est-transposable","Ce qui est transposable",[65,183,184,187,190,193],{},[29,185,186],{},"Écrire les exigences en colonnes avant de remplir la première ligne, et noter\nla source de chaque cellule.",[29,188,189],{},"Chercher des motifs, pas le vainqueur. « Chaque groupe a la moitié » en dit\nplus que trente jugements isolés.",[29,191,192],{},"Compter les combinaisons : trois programmes qui, ensemble, savent tout faire\nsont une solution à part entière avec sa propre charge de maintenance.",[29,194,195],{},"Refaire l’évaluation avant une décision si elle date de plus de quelques\nmois. Dans ce domaine, beaucoup de choses changent en six mois.",[14,197,198,199,204,205,208,209,212],{},"Le code source est ouvert :\n",[139,200,203],{"href":201,"rel":202},"https:\u002F\u002Fgithub.com\u002Fgstrainovic\u002Fdms",[143],"github.com\u002Fgstrainovic\u002Fdms",".\nL’évaluation complète avec les deux états se trouve dans ",[104,206,207],{},"docs\u002Fevaluation.md",", le\ntraitement dans ",[104,210,211],{},"supabase\u002Ffunctions\u002F",".",{"title":106,"searchDepth":214,"depth":214,"links":215},2,[216,217,218,219,220,221,222],{"id":20,"depth":214,"text":21},{"id":49,"depth":214,"text":50},{"id":59,"depth":214,"text":60},{"id":91,"depth":214,"text":92},{"id":148,"depth":214,"text":149},{"id":161,"depth":214,"text":162},{"id":180,"depth":214,"text":181},"Pourquoi j’ai construit moi-même mon archivage de documents avec OCR, tags et chat, plutôt que d’assembler Paperless-ngx et des extensions. Ce que l’évaluation a montré et à quoi cela ressemble six mois plus tard.","md",{},true,"\u002Fopen-source\u002Fdms-selbst-gebaut",null,{"title":5,"description":223},"open-source\u002Fdms-selbst-gebaut","iyyb0yx06ffYSX5CqvQkZP6V3nNjzBrEiCUSrRcXtZE",1790517213006]