# prescriptio_ao_analyse

Pousse VOTRE analyse d'un dossier d'appel d'offres : verdict (go / no_go / a_verifier) et ses motifs, critères pondérés, pièces de candidature et d'offre (une pièce par entrée), qualifications, modalités de dépôt, tâches datées (échéance en date ou relative à la remise : J-15), remarques, synthèse. Écrire en français, avec les accents. Lire d'abord les pièces avec prescriptio_dce, puis pousser ici ; l'analyse coexiste avec l'analyse partagée de Prescriptio quand elle existe (les faits du règlement), elle porte le jugement. Désigner le dossier par draft_id, ou par marche_id / annonce_id (il est alors ouvert en même temps, idempotent). L'analyse remplit la fiche du dossier et reste PRIVÉE à l'organisation ; prescriptio_ao la rend (context.analyse_personnelle). Repousser REMPLACE l'analyse précédente. Un payload hors bornes est refusé avec le détail de ce qui dépasse (jamais tronqué en silence).

État : implémenté ; distribution : historique uniquement ; offre payante : true ; effets : lecture et écriture possibles.

## Entrée MCP

```json
{
  "properties": {
    "annonce_id": {
      "description": "Reference d'un DCE (annonce_id), a defaut de draft_id — la cle des cards DCE et du viewer.",
      "maxLength": 200,
      "type": "string"
    },
    "ca_minimum": {
      "description": "Chiffre d'affaires minimal exigé, en euros.",
      "minimum": 0,
      "type": "number"
    },
    "criteres": {
      "description": "Critères d'attribution pondérés : [{nom, pct, sous:[...]}]. pct en pourcentage (0-100).",
      "items": {
        "properties": {
          "nom": {
            "maxLength": 300,
            "type": "string"
          },
          "pct": {
            "maximum": 100,
            "minimum": 0,
            "type": "number"
          },
          "sous": {
            "items": {
              "maxLength": 300,
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "nom"
        ],
        "type": "object"
      },
      "maxItems": 40,
      "type": "array"
    },
    "draft_id": {
      "description": "UUID du dossier (prescriptio_ao_track ou prescriptio_ao le renvoient). Sinon fournir marche_id ou annonce_id : le dossier est ouvert en meme temps (idempotent).",
      "type": "string"
    },
    "marche_id": {
      "description": "UUID d'un marche public (marches_publics), a defaut de draft_id.",
      "type": "string"
    },
    "modele": {
      "description": "Modèle qui a produit l'analyse (traçabilité).",
      "maxLength": 80,
      "type": "string"
    },
    "motifs": {
      "description": "Les raisons du verdict, une par entrée, en français accentué.",
      "items": {
        "maxLength": 300,
        "type": "string"
      },
      "maxItems": 10,
      "type": "array"
    },
    "notes": {
      "description": "Remarques qui ne sont ni une pièce ni une tâche (pénalités, retenue de garantie, ce qui n'est PAS à remettre).",
      "items": {
        "maxLength": 300,
        "type": "string"
      },
      "maxItems": 10,
      "type": "array"
    },
    "pieces_candidature": {
      "description": "Une pièce = une entrée (un livrable à produire), en français accentué. Les remarques (« CCAP et CCTP ne sont pas à remettre ») vont dans notes, pas ici : chaque entrée devient une case à cocher sur la fiche.",
      "items": {
        "maxLength": 300,
        "type": "string"
      },
      "maxItems": 60,
      "type": "array"
    },
    "pieces_offre": {
      "description": "Une pièce = une entrée (un livrable à produire). Les pièces du stade attributaire (Kbis, attestations) y ont leur place, une par entrée.",
      "items": {
        "maxLength": 300,
        "type": "string"
      },
      "maxItems": 60,
      "type": "array"
    },
    "plateforme": {
      "description": "Plateforme et heure limite de remise.",
      "maxLength": 200,
      "type": "string"
    },
    "qualifications": {
      "items": {
        "maxLength": 300,
        "type": "string"
      },
      "maxItems": 30,
      "type": "array"
    },
    "references_exigees": {
      "maximum": 100,
      "minimum": 0,
      "type": "integer"
    },
    "resume": {
      "description": "Synthèse courte, en français accentué : de quoi décider d'y aller ou pas. Le verdict lui-même va dans verdict.",
      "maxLength": 4000,
      "type": "string"
    },
    "signature_electronique": {
      "type": "boolean"
    },
    "taches": {
      "description": "Tâches datées proposées : [{titre, echeance}]. Elles s'affichent comme SUGGESTIONS sur la fiche, et s'ajoutent au planning en un clic ; sans adresse e-mail ni téléphone de personne dans le titre.",
      "items": {
        "properties": {
          "echeance": {
            "description": "Une date (AAAA-MM-JJ), ou relative à la remise des offres : J-15, J+3, J. Un autre texte est gardé mais ne se date pas.",
            "maxLength": 40,
            "type": "string"
          },
          "titre": {
            "maxLength": 300,
            "type": "string"
          }
        },
        "required": [
          "titre"
        ],
        "type": "object"
      },
      "maxItems": 40,
      "type": "array"
    },
    "verdict": {
      "description": "Le verdict, SÉPARÉ du résumé : go, no_go, ou a_verifier (par exemple une remise passée dont la relance est à confirmer).",
      "enum": [
        "go",
        "no_go",
        "a_verifier"
      ],
      "type": "string"
    },
    "visite_obligatoire": {
      "type": "boolean"
    }
  },
  "type": "object"
}
```

## Sortie MCP

```json
{
  "properties": {
    "action": {
      "type": "string"
    },
    "download_url": {
      "type": [
        "string",
        "null"
      ]
    },
    "fields": {
      "type": "object"
    },
    "files": {
      "items": {
        "type": "object"
      },
      "type": "array"
    },
    "ok": {
      "type": "boolean"
    },
    "page": {
      "type": [
        "integer",
        "null"
      ]
    },
    "pages_total": {
      "type": [
        "integer",
        "null"
      ]
    },
    "quota": {
      "type": "object"
    },
    "texte": {
      "description": "Contenu textuel (pièce de DCE, PV…).",
      "type": "string"
    }
  },
  "type": "object"
}
```

[Contrats externes et limites](/docs/reference/concepts.md).
