# prescriptio_pipeline

Le pipeline commercial de l'organisation : ses etapes et leurs effectifs (offre payante). SANS argument : lit le pipeline en place — celui de l'organisation, ou celui par defaut si elle n'a rien configure. AVEC « etapes » : REMPLACE entierement la configuration. Chaque etape porte un libelle libre ET une regle du catalogue ferme : l'organisation choisit ses etapes et leurs noms, elle ne choisit pas comment un contact y entre. L'appartenance est CALCULEE a chaque affichage, jamais saisie — c'est ce qui empeche le pipeline de se perimer. Seule la regle « manuel » fait exception, et son etape reste vide tant qu'un humain ne l'alimente pas.

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

## Entrée MCP

```json
{
  "properties": {
    "etapes": {
      "description": "La liste COMPLETE des etapes, dans l'ordre. Remplace entierement la configuration existante. Omettre pour LIRE le pipeline actuel.",
      "items": {
        "properties": {
          "label": {
            "description": "Ce que l'utilisateur lit. Exemple : « Vivier », « Il repond », « RDV ».",
            "maxLength": 40,
            "type": "string"
          },
          "regle": {
            "description": "Le FAIT qui fait entrer un contact dans cette etape. jamais_touche = aucun message parti. touche = au moins un message parti. a_repondu = il a repondu. inscrit = son adresse correspond a un compte. actif = ce compte s'est connecte. client = ce compte est payant. grille = adresse en rebond ou desabonnee (etape de sortie). ecarte = quelqu'un a sorti le fil du flux depuis le pipeline (etape de sortie ; c'est la seule regle adossee a une decision humaine, elle lit le statut ecrit par le geste). manuel = pose a la main, AUCUN fait ne la remplit : l'etape restera vide tant que personne ne l'alimente.",
            "enum": [
              "jamais_touche",
              "touche",
              "a_repondu",
              "inscrit",
              "actif",
              "client",
              "grille",
              "ecarte",
              "manuel"
            ],
            "type": "string"
          },
          "terminale": {
            "description": "Etape de SORTIE (perdu, desabonne) : comptee a part, exclue des files d'envoi. Vaut true par defaut pour la regle grille.",
            "type": "boolean"
          }
        },
        "required": [
          "label",
          "regle"
        ],
        "type": "object"
      },
      "maxItems": 12,
      "type": "array"
    },
    "reinitialiser": {
      "description": "Efface la configuration et revient au pipeline par defaut (6 etapes, toutes calculees).",
      "type": "boolean"
    }
  },
  "required": [],
  "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).
