Se rendre au contenu
Icône de Marchés publics — analyse IA des appels d'offres et tableau des exigences

Marchés publics — analyse IA des appels d'offres et tableau des exigences

par Dyonysos
Gratuit Hérité 19.0 Module Contrôle qualité : Vérifiée OPL-1 (propriétaire Odoo)

Public Tender AI Analysis — rules plus optional local AI (Ollama) or API. Analyse l'avis et le DCE : émetteur, montant sourcé, nature, lots, critères, conditions et tableau des exigences à valider, exporter et transmettre ; chaque valeur avec son document et son extrait.

Captures d'écran

Marchés publics · Analyse IA et exigences

Le DCE lu pour vous : chiffres clés, points bloquants et tableau des exigences, chacun avec sa preuve

Le module lit l'avis et le dossier de consultation et remplit la fiche : émetteur, montant, nature, lots, critères, conditions, et une ligne par exigence du CCTP. Les règles travaillent sans IA ; une IA locale (Ollama) ou par API ne fait que compléter, et chaque extrait qu'elle cite est vérifié dans le document.

In English — Public Tender Analysis with AI. Reads the notice and the tender documents and fills in buyer type, estimated amount, nature, lots, award criteria, eligibility conditions and a requirements matrix — every value with its source document and excerpt. Works with rules only; optional local AI (Ollama, LM Studio) or API providers (Anthropic, OpenAI, Mistral, xAI, Groq, OpenRouter).

Odoo 19 Community — On Premise✔
Odoo.sh✔
Odoo Online (SaaS)✘

Le problème

Décider en dix minutes s'il faut répondre suppose d'avoir lu quarante pages : le montant, la visite obligatoire, l'assurance exigée, le poids du prix, et les dizaines d'obligations du CCTP qu'il faudra couvrir soi-même ou confier à un partenaire. Une IA générique résume vite, mais personne ne peut vérifier d'où sort le chiffre qu'elle avance.

Ce que fait le module

Chaque valeur a sa preuve

Montant, durée, date des questions : la fiche affiche le document et la phrase qui l'établissent. Inconnu reste vide.

Le tableau des exigences

Une ligne par phrase prescriptive : document, page, article, extrait, niveau, catégorie, quantité, confiance — à valider ligne à ligne ou en masse.

L'IA que vous choisissez

Ollama en local (rien ne quitte votre réseau), LM Studio / vLLM, ou une API : l'assistant « Choisir mon IA » compare confidentialité, coût et vitesse.

Vos corrections tiennent

Une valeur saisie, validée, corrigée ou rejetée par un humain n'est jamais réécrite par une nouvelle analyse.

Le module en images

Captures prises dans Odoo 19 Community, en français, sur une base de démonstration aux données fictives, avec la suite complète installée : certains onglets ou menus visibles appartiennent à d'autres modules de la suite.

L'onglet Analyse : cartes montant, émetteur, nature, échéance, exigences et score ; les ch
01 — L'onglet Analyse : cartes montant, émetteur, nature, échéance, exigences et score ; les chiffres clés avec le document et l'extrait qui les prouvent.
Les exigences relevées sur l'avis, avec leur niveau, leur origine et leur confiance, et le
02 — Les exigences relevées sur l'avis, avec leur niveau, leur origine et leur confiance, et les boutons Valider les lignes sûres, Exporter (XLSX) et Transmettre.
Le tableau complet des exigences d'un avis, prêt à être validé, exporté ou envoyé aux part
03 — Le tableau complet des exigences d'un avis, prêt à être validé, exporté ou envoyé aux partenaires.
L'assistant « Choisir mon IA » : où partent les textes, coût indicatif, vitesse et qualité
04 — L'assistant « Choisir mon IA » : où partent les textes, coût indicatif, vitesse et qualité attendue de chaque préréglage.
Les 9 fournisseurs d'IA préréglés — Ollama actif, les autres inactifs tant que vous ne les
05 — Les 9 fournisseurs d'IA préréglés — Ollama actif, les autres inactifs tant que vous ne les avez pas configurés — avec un bouton Tester.
Les réglages : analyse automatique après le rapatriement, usage de l'IA, plafond de blocs
06 — Les réglages : analyse automatique après le rapatriement, usage de l'IA, plafond de blocs par avis, plafond de destinataires par transmission.
Les consignes (prompts) livrées, versionnées et modifiables, une par usage.
07 — Les consignes (prompts) livrées, versionnées et modifiables, une par usage.

Fonctionnalités

01

Émetteur et défense

Règles d'émetteur éditables (France, Belgique) : collectivité, État, santé, enseignement, défense…

02

Montant sourcé

Montant estimé, minimum, maximum, avec la source (avis, DCE, IA, saisi) ; « non publié » plutôt qu'un zéro inventé.

03

Nature, secteur, lots

Produits, services, mixte, travaux ; division CPV ; lots avec leur intitulé.

04

Critères et conditions

Critères pondérés écrits seulement si la grille fait 100 % ; conditions d'éligibilité du module de base.

05

Alertes « À vérifier »

Pondérations incohérentes, minimum supérieur au maximum, somme des lots, date des questions, DCE incomplet, extrait cité par l'IA introuvable…

06

Score d'opportunité

De 0 à 100, avec le détail de chaque point gagné ou perdu.

07

Contrôle de l'IA

Un extrait cité par l'IA et introuvable dans le document divise sa confiance par deux et lève une alerte ; la synthèse IA est marquée « à vérifier ».

08

Export et transmission

Tableau des exigences en XLSX ; transmission aux partenaires en brouillon par défaut, avec un plafond de destinataires.

09

Journal IA

Chaque appel : consigne, fournisseur, durée, jetons, coût estimé, erreur.

Ce que le module ne fait pas

  • Ne décide pas à votre place : chaque exigence est « à valider », et le Go / No-go reste une décision humaine.
  • La reconnaissance des exigences est lexicale (« doit », « devra », « est tenu », « shall », « moet »…) : une obligation formulée autrement peut manquer.
  • Ne lit pas un PDF scanné sans l'OCR facultatif du module de rapatriement.
  • N'inclut aucun abonnement IA : une IA distante s'utilise avec votre propre clé, à vos frais ; les tarifs affichés sont indicatifs.
  • Aucune IA n'est appelée tant que vous n'en avez pas activé une ; les tâches planifiées qui sortent de la base sont livrées inactives.

Prérequis et dépendances

  • Odoo 19 Community ou Enterprise, On Premise ou Odoo.sh (les modules Python tiers ne s'installent pas sur Odoo Online).
  • Dépend de « Marchés publics — rapatriement du DCE et des avis » (et de ses propres dépendances, incluses dans le prix affiché par l'Apps Store).
  • Bibliothèques Python : xlsxwriter et requests (présentes dans l'image Odoo standard).
  • Facultatif : un serveur Ollama ou LM Studio sur votre réseau, ou une clé d'API d'un fournisseur d'IA.
Nom techniquemarches_publics_ia
Version19.0.1.0.2
LicenceOPL-1 (Odoo Proprietary License v1.0)
Dépendances directesmarches_publics_documents
ÉditeurDYONYSOS

Support

Questions, installation, paramétrage : welcome@dyonysos.fr. Le guide utilisateur en français est livré dans le module (doc/GUIDE_UTILISATEUR.md). DYONYSOS, éditeur d’applications Odoo 19 Community. Licence OPL-1, une base de production par achat.

Marchés publics — analyse IA des appels d'offres et tableau des exigences — capture 1
Marchés publics — analyse IA des appels d'offres et tableau des exigences — capture 1
Marchés publics — analyse IA des appels d'offres et tableau des exigences — capture 2
Marchés publics — analyse IA des appels d'offres et tableau des exigences — capture 2
Marchés publics — analyse IA des appels d'offres et tableau des exigences — capture 3
Marchés publics — analyse IA des appels d'offres et tableau des exigences — capture 3
Marchés publics — analyse IA des appels d'offres et tableau des exigences — capture 4
Marchés publics — analyse IA des appels d'offres et tableau des exigences — capture 4
Marchés publics — analyse IA des appels d'offres et tableau des exigences — capture 5
Marchés publics — analyse IA des appels d'offres et tableau des exigences — capture 5

Ce que l'application ne fait pas

  • Ne décide pas à votre place : chaque exigence est « à valider », et le Go / No-go reste une décision humaine.
  • La reconnaissance des exigences est lexicale (« doit », « devra », « est tenu », « shall », « moet »…) : une obligation formulée autrement peut manquer.
  • Ne lit pas un PDF scanné sans l'OCR facultatif du module de rapatriement.
  • N'inclut aucun abonnement IA : une IA distante s'utilise avec votre propre clé, à vos frais ; les tarifs affichés sont indicatifs.
  • Aucune IA n'est appelée tant que vous n'en avez pas activé une ; les tâches planifiées qui sortent de la base sont livrées inactives.

Applications du magasin nécessaires

Modules Odoo Community utilisés

Aucun.

Bibliothèques Python

xlsxwriter requests

Applications qui la complètent

SérieVersionÉtatPubliée le
19.019.0.1.4.0 Disponible 02/10/2026

Fiche générée depuis le code de l'éditeur (dépôt privé, branche 19.0) : le code source n'est pas publié.

Contrôle automatique du magasin (distinct de l'éditeur), appliqué à toutes les applications. Conforme.

ContrôleRésultatEffet si absent
Manifeste lisible sans exécution conforme bloquant
Licence reconnue (OPL-1) conforme bloquant
Aucune dépendance vers Odoo Enterprise conforme bloquant
Aucun import de code Enterprise conforme bloquant
Aucun en-tête de licence Enterprise conforme bloquant
Icône static/description/icon.png conforme déclasse
Description (static/description/index.html ou README) conforme déclasse
Tests automatisés (tests/test_*.py) conforme déclasse
Traduction française (i18n/fr.po) conforme info
Section « Ce que le module ne fait pas » conforme info
Titre de 70 caractères au plus (73 actuellement) absent info
Résumé en français conforme info

Guide utilisateur — analyse automatique et tableau des exigences

Ce module lit l'avis de marché et son dossier de consultation (DCE) et remplit à votre place les onglets de l'avis : Analyse, Exigences, Lots, Critères d'attribution et Conditions d'éligibilité. Vous n'avez plus qu'à consulter, valider, voir les erreurs et transmettre aux partenaires et fournisseurs.

Il fonctionne sans IA. Une IA (locale ou distante) peut être ajoutée pour compléter ce que les règles laissent vide ; elle n'est jamais indispensable.


1. Lancer une analyse

  • Automatiquement : dès que les documents d'un avis sont rapatriés (bouton « Rapatrier les documents », ou tâche planifiée du module documents), l'analyse se lance — réglage Paramètres → Marchés publics → Analyser automatiquement après le rapatriement (coché par défaut).
  • À la main : sur l'avis, bouton Analyser (en-tête ou onglet « Analyse »). Plusieurs avis d'un coup : cochez-les dans la liste, puis Action → Analyser les avis sélectionnés.
  • Par tâche planifiée : Paramètres → Technique → Tâches planifiées → « Marchés publics : analyse des avis », livrée inactive (elle peut appeler une IA). Activée, elle traite 10 avis ouverts par heure (« à analyser », ou en erreur depuis plus d'un jour).

Sans DCE, l'analyse se fait sur l'avis seul (objet, avis structuré) et le dit dans les alertes. Pour un DCE retiré sur une plateforme, déposez les fichiers dans l'onglet « Documents » puis cliquez Réanalyser.

2. Ce que vous trouvez dans l'onglet « Analyse »

  • Cartes des chiffres clés : montant (et d'où il vient : avis, DCE, IA, saisi à la main — « non publié » quand rien n'est lu, jamais 0 inventé), émetteur (et badge Défense), nature, échéance (rouge sous 10 jours), nombre d'exigences, score d'opportunité.
  • Points bloquants : visite obligatoire, certification, chiffre d'affaires minimum, assurance, pénalités, niveau de service, langue…
  • Chiffres clés avec leur preuve : chaque valeur est suivie du document et de la phrase qui l'établissent.
  • Les 10 exigences majeures (celles qui éliminent d'abord) et les critères avec la part du prix en rouge.
  • Synthèse rédigée par l'IA (si une IA est active) : encadrée et marquée « Rédigée par l'IA — à vérifier ».
  • Alertes « À vérifier » : pondérations qui ne font pas 100 %, minimum supérieur au maximum, somme des lots différente du total (± 5 %), date des questions après la date limite, date limite dépassée, document rédigé dans une autre langue que la langue obligatoire, DCE incomplet, aucune exigence, prix pondéré au-delà de votre seuil, extrait cité par l'IA introuvable…
  • Score d'opportunité : 0 à 100, avec le détail de chaque point gagné ou perdu (délai restant, montant, poids du prix, filtre Go/No-go, nature, défense, votre métier). Le métier se lit dans le profil que vous avez renseigné : CPV exécutés en propre (comparés au CPV principal de l'avis), compétences (mots-clés dans l'intitulé ou l'objet), « objets de votre métier » ; +10 si l'avis y entre, −10 sinon, 0 si le profil est vide.

D'où vient chaque valeur (ordre de priorité)

L'avis structuré (XML eForms de TED, données du BOAMP) est la source de ce qu'il publie ; le PDF de l'avis n'en est qu'une mise en page et n'est jamais la source d'un montant ni de la nature.

  • Montant : celui de l'avis structuré (procédure, ou lot unique ; maximum d'accord-cadre publié sous le lot unique compris). Quand seuls les lots sont valorisés, leur somme est dite dans la synthèse, jamais écrite comme montant du marché. À défaut, une pièce du DCE (« montant estimé du marché… ») ; un montant qui qualifie le candidat (« … 500 000 € par référence », chiffre d'affaires, assurance, capital) ou un lot n'est jamais retenu. Un montant écrit en toutes lettres dans le texte de l'avis (« avec un montant maximum de 3 000 000 € HT ») est montré dans le tableau (ligne « information ») sans être repris : à vous de confirmer.
  • Maximum écrit seulement dans la description de l'avis (642930 : aucun maximum structuré, « montant maximum de 3 000 000,00 euros HT » dans la description libre) : repris en Montant maximum, avec une Confiance du maximum réduite à 60 % (95 % pour un maximum publié dans un champ, 70 % lu dans une pièce du DCE), une ligne « information » avec l'extrait, et la synthèse le dit (« lu dans la description libre de l'avis — confiance réduite, à vérifier »). Aucun montant estimé n'en est déduit.
  • Montant d'un lot : celui que l'avis structuré publie pour le lot ; à défaut, celui écrit dans l'intitulé ou la description du lot (« montant estimé 180 000 € HT ») avec les mêmes expressions et les mêmes exclusions que le montant du marché. Onglet « Lots », colonnes Source du montant (« Intitulé / description du lot »), Confiance du montant (70 %) et Extrait du montant (la phrase). Un montant de lot saisi à la main passe « Saisie manuelle » et n'est plus jamais réécrit.
  • Nature : montage spécifique déclaré (directive concessions, partenariat d'innovation, taille DSP) ou écrit comme objet d'une pièce du DCE (« contrat de concession », « délégation de service public »…) ; sinon la nature principale publiée (une fourniture assortie de CPV de services devient « produits et services ») ; sinon le CPV. L'en-tête « Avis de marché ou de concession » des PDF TED ne compte pas.
  • Émetteur : vos règles d'émetteur (sur le nom) d'abord ; si aucune ne correspond, le type d'acheteur publié (collectivité, État, organisme de droit public, entreprise publique, institution de l'UE…), précisé par l'activité (enseignement, santé, défense).
  • Langue de l'offre : les langues de soumission publiées. Une seule : c'est elle (français, néerlandais, allemand, anglais) ; plusieurs : « au choix » si vous en parlez une (Paramètres → Marchés publics → langues de rédaction), sinon la première, pour que la barrière de langue vous prévienne. La fiche dit « lue à l'avis structuré (FRA) ». Une langue saisie à la main n'est jamais remplacée.
  • Objet et procédure : repris de l'avis structuré s'ils sont vides ; la synthèse s'ouvre sur l'intitulé sans le préfixe TED « Pays – libellé CPV – ».
  • Critères d'attribution : la grille publiée si elle vaut pour tout le marché et fait 100 %. Grilles différentes par lot : rien sur l'avis (elle y serait fausse), chaque lot garde la sienne (onglet « Lots », colonne « Critères du lot ») et une alerte les liste. Grille en points (ex. 105 points) : non convertie, signalée en points. Un libellé qui n'est qu'un renvoi (« Cf articles 7.1… », « Please consult… ») est remplacé par le type (« Prix », « Qualité »).
  • Conditions d'éligibilité (onglet « Conditions ») : les critères de sélection publiés (chiffre d'affaires minimum avec son seuil, références, effectifs, inscription à un registre…), avec le lot, le seuil, l'unité et la description complète ; puis, pour les natures non publiées, la phrase entière du DCE qui les exige. La colonne « Écrite par l'analyse » dit d'où elles viennent ; une condition que vous avez travaillée (satisfaite, couverte, pièce produite) n'est jamais remplacée.

Le PDF de l'avis TED dans le tableau des exigences

Seules ses rubriques de texte libre sont lues (« Description », « Informations complémentaires », « Description du critère de sélection », « Conditions relatives à l'exécution du contrat », « Description des options »…). Les rubriques de formulaire (voies de recours, identifiants, adresses, cases oui/non, « Conditions de soumission ») ne produisent jamais d'exigence, pas plus que « … doivent être mentionnés : Non requises » ou « sans objet ». Le XML de l'avis structuré n'est jamais lu comme du texte. La page citée est celle de la phrase elle-même (pieds de page TED retirés) ; elle vaut toujours 1 au moins.

Les champs (émetteur, montant, nature, durée, visite…) restent modifiables : une valeur corrigée à la main n'est plus jamais réécrite par l'analyse. Un montant saisi passe « Saisi à la main ».

3. Le tableau des exigences (onglet « Exigences », menu « Exigences »)

Une ligne par obligation relevée dans le RC, le CCTP, le CCAP, le BPU… : référence (article + document), page, catégorie (sécurité, niveau de service, pénalité, formation, pièce de candidature, pièce de l'offre, visite…), niveau (obligatoire, souhaitée, optionnelle — variante, option, PSE —, information — volumes utiles au chiffrage), quantité et unité (« 50 licences », « 200 jours »), extrait exact (la preuve), confiance.

Couleurs : gras = à valider ; rouge = erreur signalée ; vert = validée ou corrigée ; grisé = rejetée.

Exigence proposée par l'IA dont l'extrait est introuvable dans le document (ou sans extrait du tout) : elle arrive en erreur — rouge, motif « extrait introuvable dans le document — à vérifier », confiance divisée par deux — et non « à valider ». Cherchez la phrase dans la pièce : si elle existe, corrigez l'extrait ou validez la ligne ; sinon, rejetez-la (l'IA l'a inventée). Tant qu'il en reste, l'analyse ne se valide pas. Une réanalyse refait ces lignes (elle ne touche jamais une erreur signalée par une personne).

Regroupé (par catégorie, niveau, document…), le tableau affiche la moyenne de la confiance par groupe (et non plus une somme du type « 455 % ») ; le coût estimé est totalisé ; quantités et pages ne sont pas additionnées (unités différentes). Même règle ailleurs : scores, confiances, pondérations moyennes d'un groupe d'avis, durées en moyenne ; montants en total.

Actions : - par ligne : ✓ Valider, ⚠ Signaler une erreur (un motif est demandé), ✗ Rejeter (ce n'est pas une exigence : elle ne reviendra pas) ; - modifier une ligne automatique (libellé, niveau, catégorie…) la fait passer « corrigée » : une réanalyse n'y touchera plus ; - en masse (cochez des lignes, menu Action) : valider, rejeter, signaler une erreur, remettre à valider, affecter un responsable (votre société, partenaire, fournisseur) et un partenaire, marquer à transmettre ; - Valider les lignes sûres : valide d'un coup les lignes lues par règle ou à l'avis structuré avec une confiance ≥ 80 % (les propositions de l'IA se relisent une à une) ; - le menu Exigences offre aussi un tableau croisé et un graphique (catégories × statut, coût estimé).

Ajouter une exigence à la main : dernière ligne du tableau. Elle est « validée » d'office et n'est jamais supprimée par une réanalyse.

Valider l'analyse : refusé tant qu'une ligne est en erreur ou qu'une exigence obligatoire reste « à valider » (le message dit lesquelles). Un responsable peut Valider malgré tout — c'est tracé dans le fil. Rouvrir repasse l'analyse « à valider ».

4. Réanalyser sans rien perdre

Réanalyser ne remplace que les lignes automatiques encore « à valider » (et celles que l'analyse elle-même a mises en erreur : extrait IA introuvable). Les lignes validées, corrigées, rejetées ou manuelles, les lots existants, les critères saisis à la main et les champs corrigés restent tels quels. Une ligne rejetée ne revient pas.

5. Exporter et transmettre

  • Exporter (XLSX) : classeur Synthèse, Exigences, Lots, Critères, Conditions, Documents, Alertes ; première ligne figée, filtres, largeurs réglées, couleurs par niveau et par statut. Une copie est jointe à l'avis.
  • Transmettre : choisissez les destinataires (partenaires, fournisseurs, chacun avec une adresse de courriel), les pièces du DCE, les lignes du tableau (toutes, « à transmettre », ou d'un responsable), relisez le message proposé.
  • Mode Brouillon (par défaut) : une note interne liste destinataires et pièces dans le fil de l'avis. Rien n'est envoyé.
  • Mode Envoyer : un courriel part, avec le tableau et les pièces ; les lignes transmises portent la date d'envoi. Refusé au-delà du plafond de destinataires (Paramètres → Marchés publics, 20 par défaut).
  • Anti-doublon : les mêmes pièces (mêmes documents, tableau joint ou non) déjà envoyées au même destinataire pour le même avis il y a moins de 7 jours ne repartent pas : l'assistant affiche un avertissement (« Mêmes pièces déjà envoyées… », qui, quand, par qui) et l'envoi est refusé tant que vous ne cochez pas Renvoyer quand même (relance, pièce égarée). Une pièce ajoutée ou retirée, ou un autre destinataire : ce n'est pas un doublon. Une piste de réponse (envoi automatique) ne renvoie jamais un doublon : elle prépare la transmission en brouillon et le note au journal.
  • Trace : chaque transmission, brouillon compris, laisse une ligne par destinataire (date, courriel, mode, pièces, tableau joint, auteur, renvoi confirmé) sous le tableau des exigences, section « Transmissions aux partenaires ». Lecture seule pour les utilisateurs.

6. Choisir son IA (facultatif)

Marchés publics → Configuration → IA et analyse → Choisir mon IA (responsables) : un tableau compare les préréglages — confidentialité (local : rien ne sort de votre serveur ; distant : les textes du DCE sont envoyés), coût indicatif, vitesse, qualité d'extraction. Choisissez, collez la clé si nécessaire, Activer et tester : la réponse et la latence s'affichent.

Préréglages livrés (tous inactifs sauf Ollama local) :

Préréglage Où Usage conseillé
Ollama local (qwen2.5 3B) votre serveur rapide : classement de l'acheteur, synthèse courte
LM Studio / vLLM local votre réseau tout, avec une carte graphique
Claude (Anthropic) distant profond : analyse et extraction
OpenAI (gpt-4o-mini) distant profond
Mistral distant (UE) profond
xAI Grok (léger) distant profond — vérifiez le nom exact du modèle chez xAI
Groq (Llama 8B) distant rapide, très rapide
OpenRouter distant selon le modèle choisi
Point d'accès personnalisé selon vous tout service compatible OpenAI

Deux usages : rapide (tri, synthèse courte — un petit modèle local suffit) et profond (analyse de l'avis, extraction du tableau des exigences). Sans fournisseur « profond », l'extraction est faite par les règles : c'est voulu, un modèle de 3 milliards de paramètres sur un serveur sans carte graphique mettrait des minutes par bloc pour un résultat moins sûr.

Clés d'API : saisies dans l'assistant, sur la fiche du fournisseur (champ « Clé d'API ») ou dans Paramètres → Marchés publics → Clés d'API. Elles sont rangées dans les paramètres système, jamais affichées ni journalisées.

utilisez http://ollama:11434 si le conteneur Ollama est sur le même réseau Docker.

Garde-fous : délai de 60 s au plus vers un service distant (180 s en local), repli sur le fournisseur suivant en cas d'erreur, de quota (429), de clé refusée (401/403) ou de réponse illisible ; réparation des JSON mal formés ; découpage des DCE longs en blocs (≈ 3,5 caractères par jeton, par paragraphes, avec chevauchement), au plus 8 blocs par avis (Blocs d'IA au plus par avis). Chaque appel est journalisé (Journal des appels : durée, jetons, coût estimé, erreur). Utiliser l'IA dans les traitements automatiques peut être décoché : l'IA ne sert alors qu'aux traitements lancés à la main (bouton), ni à l'analyse automatique ni à ce qui s'enchaîne derrière (orientation de piste, offre générée dans la foulée).

Consignes (prompts) : Configuration → IA et analyse → Consignes, en français, modifiables (incrémentez la version) ; les variables s'écrivent {{ variable }} et sont remplacées sans exécution de code.

7. Règles d'émetteur

Configuration → IA et analyse → Règles d'émetteur : une expression régulière par type d'acheteur (défense, État, collectivité, santé, enseignement/recherche, organisme social, entreprise publique, UE, établissement public), livrées pour la France et la Belgique. La première règle qui correspond (dans l'ordre) l'emporte. Ajoutez vos acheteurs récurrents en tête de liste.

Un marché est marqué défense si l'acheteur relève d'une règle défense, si l'avis structuré cite la directive 2009/81/CE (32009L0081), ou si un CPV 35 (équipements de sécurité et de défense) est acheté par un acheteur de la défense — un CPV 35 acheté par une commune ne suffit pas.

8. IA de nuit : faire rédiger et analyser la nuit

Une offre complète rédigée par un modèle local sur processeur prend près de deux heures ; une demande de réouverture, quelques minutes. Plutôt que d'attendre devant l'écran, on programme le travail : l'IA le fait la nuit, dans une fenêtre que vous choisissez, une tâche après l'autre, et vous trouvez le matin un bilan. Rien n'est envoyé : offres et courriers restent en brouillon ou « à valider ».

8.1 Régler (une fois)

Paramètres → Marchés publics → bloc IA de nuit (chaque réglage a sa bulle d'aide) :

  1. IA de nuit activée : cochez. La tâche planifiée « Marchés publics : IA de nuit » (livrée inactive) s'active ; elle passe toutes les 5 minutes et ne fait rien hors de la fenêtre.
  2. Fenêtre : par exemple 00:00 → 02:00. Une fenêtre 23:00 → 02:00 traverse minuit ; elle appartient au jour où elle commence (cochez ce jour-là). Jours : ceux où la fenêtre commence. Fuseau : vide = celui de la société.
  3. Fournisseur de nuit : celui qui travaille la nuit. Vide : le premier fournisseur actif « profond » ou « tout usage ». Recommandé pour la rédaction : Groq GPT-OSS 120B (préréglage livré inactif : collez la clé Groq, activez-le). Fournisseur de secours (facultatif, recommandé : Ollama local, Llama) : il prend le relais seulement si le fournisseur de nuit est inutilisable — inactif ou incomplet (clé, URL ou modèle manquant), injoignable, délai dépassé, erreur du serveur (5xx), clé refusée ou modèle introuvable (401, 403, 404), quota ou débit dépassé (429). Il ne sert pas quand le fournisseur de nuit a répondu mais que sa réponse est vide ou illisible : l'étape est réessayée comme d'habitude (3 tentatives). Aucun autre service n'est jamais appelé. Une tâche qui impose son fournisseur n'a pas de secours (c'est un choix explicite : confidentialité, qualité). - Combien de temps : après une panne, la nuit reste sur le secours 30 minutes, puis réessaie une fois le fournisseur de nuit (au plus deux appels perdus par heure) ; après une clé refusée, jusqu'à la fin de la nuit ; après un 429, un délai annoncé court (15 s au plus) est d'abord attendu une fois, sinon le secours prend la main jusqu'à la fin du délai annoncé (5 minutes au moins). Un fournisseur inactif ou sans clé est revu à chaque étape, sans appel. - Jamais au milieu d'une étape : la rubrique entière est refaite par le secours, après une nouvelle vérification de la fenêtre et du budget avec sa vitesse et ses tarifs. Un modèle local à 0 € ne consomme pas de budget, mais il est bien plus lent : une rubrique qui ne tient plus avant l'arrêt de sécurité attend la nuit suivante (une étape plus longue que la fenêtre entière ne part qu'en tout début de fenêtre, comme d'habitude). Une panne du fournisseur de nuit ne compte pas de tentative à la tâche. - Le secours doit être différent du fournisseur de nuit.
  4. Budget par nuit / par mois (€, 0 = illimité) et taux $ → € (0,92 par défaut, à vérifier) : avant chaque rubrique ou courrier, on ajoute au coût réel déjà dépensé le coût de l'étape au pire, c'est-à-dire avec la réponse la plus longue que l'on demande au fournisseur ; si cela dépasse, on s'arrête avant. La nuit, cette réponse maximale est ramenée près de l'estimation (longueur visée × 1,3, plus une petite marge) : une réponse plus longue que prévu est coupée, jamais facturée au-delà. Deux limites : la garde suppose que le fournisseur respecte cette réponse maximale (max_tokens) ; un fournisseur qui l'ignore peut faire dépasser le budget d'une étape — la dernière de la nuit, puisque la suivante ne part plus (mesuré : 3,2 fois le budget sur un petit budget). Et le texte envoyé est compté sur sa longueur estimée (± 20 %) : la dernière étape peut dépasser de cet écart (+4 % mesuré). Choisissez donc un fournisseur qui respecte max_tokens (vérifiez-le sur un essai : le journal des appels donne les jetons écrits, à comparer au plafond noté sur l'étape) et gardez une marge sous le budget que vous ne voulez pas franchir.
  5. Tâches au plus par nuit (0 = illimité) et arrêt de sécurité (10 minutes par défaut : rien n'est commencé dans les 10 dernières minutes, ni une étape dont la durée estimée dépasserait la fin ; une étape plus longue que la fenêtre entière — un modèle local très lent — ne part que dans les 10 premières minutes de la fenêtre). Au passage à l'heure d'hiver, une fenêtre qui finit à 02:00 ferme au premier 02:00.
  6. Autoriser hors fenêtre : laissez décoché (le serveur sert d'abord vos utilisateurs).
  7. Destinataire du bilan du matin : vide = le destinataire de la veille.

8.2 Mesurer la vitesse de votre IA

Configuration → IA et analyse → Fournisseurs d'IA → ouvrez le fournisseur → Mesurer la vitesse. Trois appels chronométrés (latence, lecture d'un long texte, écriture d'environ 150 mots) remplissent « Vitesse de génération » et « Vitesse de lecture ». Sur un modèle local chargé, comptez 1 à 3 minutes. Ensuite, dès que le journal compte au moins 3 vrais appels, c'est leur moyenne qui sert aux estimations (« Vitesse utilisée pour estimer » dit laquelle).

8.3 Programmer

  • Sur un avis : bouton Programmer l'IA de nuit (en-tête).
  • Sur une réponse en brouillon : bouton Programmer la rédaction IA.
  • En masse : dans la liste des avis ou des réponses, cochez (par exemple les 31 demandes de réouverture), menu Action → Programmer la rédaction IA.

L'assistant montre, pour chaque fournisseur (même inactif, avec son état « prêt », « inactif » ou « clé manquante ») : jetons lus et écrits, durée, coût, nombre de nuits avec votre fenêtre, nuits en comptant ce qui attend déjà, date de fin estimée, et la vitesse retenue. Choisissez le travail :

Travail Ce que l'IA produit
Offre complète toutes les rubriques du mémoire (≈ 600 mots chacune), la matrice de conformité (sans IA), la lettre d'accompagnement
Offre intermédiaire lettre + proposition technique courte (6 rubriques d'environ 500 mots, 5 à 8 pages) + chiffrage dont les lignes restent « à chiffrer »
Demande de réouverture le courrier (consigne « demande_reouverture »)
Gré à gré le courrier (consigne « offre_gre_a_gre ») ; au-dessus du seuil de dispense, une demande de réouverture à la place
Analyse IA de l'avis (exigences et synthèse) l'analyse complète de l'avis refaite avec l'IA de nuit : tableau des exigences, champs de l'avis, synthèse

Il n'y a plus de travail « exigences seules » ni « synthèse seule » : l'analyse refait toujours tout, et ces deux choix coûtaient donc une analyse complète sous un autre nom (et une estimation trop basse pour la synthèse). Les tâches déjà programmées avec ces anciens types s'affichent « (ancien type : analyse complète) », sont faites et estimées comme l'analyse complète ; l'assistant ne les propose plus.

« Selon le type de chaque réponse » (proposé seulement depuis les réponses) : offre → offre complète, réouverture → réouverture. Un même travail n'est jamais programmé deux fois pour un avis ; offre complète et offre intermédiaire s'excluent (elles écrivent la même offre). Sans DCE (avis seul) : l'offre est réduite à 6 rubriques plus courtes, et le résultat dit « rédigé à partir de l'avis seul : texte générique ».

8.4 Suivre

Menu Marchés publics → IA de nuit : - Tableau de bord : file (en attente, commencées, en erreur), coût du mois et budget, travail restant estimé (durée, coût, nuits), prochaine fenêtre, dernières nuits ; bouton « Lancer un passage maintenant » (la fenêtre s'applique quand même). - File d'attente (kanban par état, liste) : avancement en %, estimation, réel. Une tâche commencée qui n'a pas fini dans la fenêtre reprend la nuit suivante à la rubrique suivante (onglet « Étapes » : chaque rubrique faite ou à faire, ses jetons et son coût). - Bilans des nuits : une ligne par nuit ; chaque matin une activité « Bilan IA de la nuit » (une seule ouverte à la fois) : tâches faites, restantes, coût, durée, erreurs, motif d'arrêt (fin de fenêtre, budget, plafond…). Avec un secours : combien d'étapes il a faites, et chaque bascule avec son heure et sa raison (« 00:12 — fournisseur de nuit en panne : HTTP 503… (secours jusqu'à 00:42) »), et les étapes du secours raison par raison (« 5 après « …503… » ; 1 après « …401… » ») ; le tableau des tâches dit qui a rédigé (« Llama local (secours : 3 étape(s)) »). - Sur la tâche : « Fournisseur utilisé » (celui qui a répondu ; vide si personne n'a répondu), « Étapes faites par le secours » et sa raison ; l'onglet « Étapes » marque « faite (secours : …) », et le journal des appels a une colonne « Secours ». L'assistant de programmation montre en tête le fournisseur de nuit (en gras) et son secours (surligné), avec leur état.

8.5 Relire, et en cas d'erreur

  • Chaque rubrique rédigée l'est à sa place dans le mémoire ; le « Rapport de génération » et les « Points à vérifier » de la réponse disent ce que l'IA a fait. Relisez, complétez les « [À COMPLÉTER] » et les prix, puis Soumettre → Valider → Envoyer comme d'habitude.
  • Retouche à la main : si vous modifiez le mémoire entre deux nuits, l'IA ne l'écrase pas ; la tâche s'arrête « en erreur » en le disant (ce qui est déjà rédigé reste).
  • Aucun prix inventé : si l'IA écrit un montant dans une rubrique, la lettre ou un courrier, il est remplacé par « [À COMPLÉTER : prix] » (sauf s'il figure déjà dans l'avis ou dans vos lignes de prix confirmées), et un point de vigilance le signale.
  • Une réponse validée (ou envoyée) entre deux nuits n'est plus touchée : ni la lettre, ni les points à vérifier ; la tâche s'arrête « en erreur » en le disant.
  • Un appel qui échoue compte une tentative ; au 3e échec la tâche passe en erreur (message dans la tâche et dans le bilan). Un refus « quota ou débit dépassé » (HTTP 429) n'en compte pas : sans secours, la nuit s'interrompt et reprend au passage suivant ; avec un secours, voir § 8.1. Si le secours tombe aussi en panne (injoignable, délai, 5xx, 429…), la bascule prend fin : la tâche attend, sans tentative comptée, et le fournisseur de nuit est réessayé au passage suivant (vérifiez que votre Ollama répond depuis le serveur Odoo : bouton « Tester » du fournisseur). Si aucun des deux n'est prêt (inactif, sans clé), rien n'est appelé et la tâche attend (« Aucun fournisseur de nuit prêt »).
  • Une tâche qui impose un fournisseur en panne (injoignable, 5xx, 429, clé refusée) attend, sans tentative ; les autres tâches de la file passent. Le fournisseur n'est réessayé qu'après un délai qui s'allonge à chaque échec de la nuit : 5 minutes, puis 15, 30, et 60 minutes au plus (la tâche dit à partir de quelle heure) ; dès qu'il répond, le délai repart de zéro. Les tâches qui imposent le même fournisseur attendent avec elle.
  • Une étape qui échoue sur une erreur inattendue après avoir déjà appelé l'IA garde ces appels au journal : leur coût compte dans le réel de la tâche et dans le budget de la nuit et du mois. Remettre en file la relance là où elle en était (refusé, avec un message, si le même travail est déjà dans la file).
  • Le bilan du matin va au destinataire réglé, sinon au destinataire de la veille, au premier responsable, ou à défaut à celui qui a programmé le travail.

8.6 Ordres de grandeur (31 dossiers, fenêtre 0 h – 2 h, 1 h 50 utiles)

Fournisseur 31 réouvertures 31 offres intermédiaires 31 offres complètes
Ollama qwen2.5 3B, serveur 8 vCPU sans carte graphique (3 jetons/s mesurés) ≈ 2 h, 2 nuits, 0 € ≈ 21 h, 12 nuits ≈ 55 h, 31 nuits
Groq GPT-OSS 120B ≈ 1 min 30, 1 nuit, ≈ 0,02 € ≈ 14 min, ≈ 0,20 € ≈ 35 min, ≈ 0,51 €
Groq Llama 3.3 70B ≈ 2 min, ≈ 0,03 € ≈ 16 min, ≈ 0,27 € ≈ 40 min, ≈ 0,64 €

Les 93 dossiers avec GPT-OSS : ≈ 50 min et ≈ 0,72 € au total. Estimations du module (tailles réelles des consignes livrées, profil d'exemple « esn », avis avec DCE, tarifs en dollars convertis à 0,92 €) ; le bilan de la première nuit donne les vrais chiffres. Le budget, lui, est contrôlé sur le pire cas (réponse maximale), un peu au-dessus. Un petit modèle local convient aux courriers ; pour des offres, sa qualité est faible et sa lenteur rend la file très longue.

8.7 À régler sur le serveur

  • Un appel à un modèle local peut durer plusieurs minutes : la nuit, le délai d'un appel local passe à 30 minutes. Le travailleur des tâches planifiées ne doit pas être coupé avant : limit_time_real_cron = 3600 (ou plus) dans la configuration d'Odoo. Une exécution de la tâche planifiée fait un passage : il rend la main après l'étape en cours dès que la tâche planifiée a épuisé le temps qu'elle accorde (10 s dans Odoo 19), après 20 étapes, ou avant une étape qui le ferait dépasser 50 minutes ou 80 % de limit_time_real_cron. Il déclenche alors le passage suivant pour tout de suite (ir.cron._trigger, qui réveille le travailleur aussitôt) : pas d'attente d'une minute entre deux passages, et les autres tâches planifiées passent entre les deux. Seule la première étape d'un passage part quelle que soit sa durée (elle ne se coupe pas) : la limite doit donc dépasser l'étape la plus longue. Un travailleur coupé en pleine étape compte une tentative.
  • Plusieurs sociétés : elles sont servies à tour de rôle ; chaque passage commence par celle qui attend depuis le plus longtemps. Une société très chargée n'empêche plus les autres d'avancer (deux sociétés chargées font chacune une étape en deux passages).
  • Si le journal du serveur répète « IA de nuit : … passages « occupé » d'affilée », un passage est bloqué ou une connexion garde le verrou : le message la nomme ; redémarrez le service Odoo si aucun passage long n'est en cours.
  • Groq : l'offre gratuite limite fortement les jetons par minute (erreurs 429) ; pour une file de nuit, prenez l'offre payante. Vérifiez sur la page des modèles de Groq que le modèle choisi est proposé à votre offre.

9. Limites connues

  • Un montant, une langue ou un critère de sélection que l'avis structuré ne publie pas et qui n'est écrit que dans le PDF de l'avis n'est pas repris automatiquement (il est au mieux montré en « information ») : c'est voulu, la mise en page TED mêle les valeurs des lots et du marché.
  • La reconnaissance des rubriques TED suit le libellé français des PDF (et les principaux libellés anglais) ; un avis BOAMP en PDF est lu avec les filtres génériques (rubriques de recours, identifiants, adresses, négations).

  • Les règles lisent le texte extrait : un PDF scanné sans OCR n'a pas de texte (alerte « Texte vide »), ses exigences manquent.

  • La reconnaissance des phrases prescriptives est lexicale (« doit », « devra », « est tenu », « shall », « moet »…) : une obligation formulée autrement peut manquer, une phrase descriptive peut être prise pour une exigence. C'est pourquoi chaque ligne est « à valider ».
  • Les montants ne sont lus qu'annoncés par un mot-clé (« montant estimé », « valeur estimée », « budget »…) ; en toutes lettres, seule l'IA peut les proposer, et seulement avec l'extrait qui les porte.
  • Plafonds : 300 exigences par document, 1 000 par avis.
  • Les tarifs affichés pour les IA distantes sont indicatifs, à vérifier chez chaque fournisseur.
  • IA de nuit : les durées et coûts affichés avant programmation sont des estimations (≈ 2 jetons par mot rédigé, vitesse du journal ou de la fiche) ; un modèle « à raisonnement » écrit plus que sa réponse (multiplicateur réglable sur sa fiche).

Avis des clients connectés. Un avis noté par client ; l'éditeur peut y répondre. Connectez-vous pour laisser un avis.

Éditeur
DYONYSOS
E-mail
contact@omnifloo.com
Clients Omnifloo
Support inclus selon votre formule : centre d'aide.