# prescriptio_tournee

Une journee de prospection sur le terrain (offre payante) : ses rendez-vous a heure fixe, les prospects a voir autour, l'ordre de passage, le trajet, et l'action decidee pour chaque arret. Dans l'ordre : creer { nom, jour, depart } ; ajouter_etape pour les rendez-vous (nom + adresse + heure) ; proposer { tournee_id } pour voir les prospects de la base et de l'annuaire dans le rayon ; ajouter_etape { fiche_id } ou { siren } ; optimiser (ordre et trajet) ; preparer { etape_id | "toutes", action_message } pour ecrire les messages. ⚠ Prescriptio n'ENVOIE rien : le message part de la messagerie de l'utilisateur (ou de son assistant, depuis SA boite) ; marquer { statut: "envoyee" } enregistre qu'il est parti. client { etape_id } pose le statut client sur la fiche. Aucune coordonnee n'est rendue : le destinataire (email) s'ecrit, ne se relit pas.

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

## Entrée MCP

```json
{
  "properties": {
    "action": {
      "description": "lister (defaut) ; lire { tournee_id } ; creer { nom, jour, depart, rayon_km } ; modifier { tournee_id, nom?, jour?, depart?, rayon_km?, statut? } ; supprimer { tournee_id } ; ajouter_etape { tournee_id, fiche_id | siren [+ siret] | nom + adresse, nature?, heure?, duree_min? } ; retirer_etape { tournee_id, etape_id } ; regler_etape { tournee_id, etape_id, heure?, duree_min?, nature?, note?, email? } ; proposer { tournee_id, naf? } ; optimiser { tournee_id } ; preparer { tournee_id, etape_id | \"toutes\", action_message, objet?, corps? } ; marquer { tournee_id, etape_id, statut } ; client { tournee_id, etape_id, client? }",
      "enum": [
        "lister",
        "lire",
        "creer",
        "modifier",
        "supprimer",
        "ajouter_etape",
        "retirer_etape",
        "regler_etape",
        "proposer",
        "optimiser",
        "preparer",
        "marquer",
        "client"
      ],
      "type": "string"
    },
    "action_message": {
      "description": "preparer : ce que le message propose.",
      "enum": [
        "rendez_vous",
        "depot_documents",
        "presentation"
      ],
      "type": "string"
    },
    "adresse": {
      "description": "Adresse d'un arret sans fiche (un rendez-vous), geocodee par la BAN.",
      "type": "string"
    },
    "client": {
      "description": "client : true (defaut) pose le statut client sur la fiche de l'arret, false le remet en prospect.",
      "type": "boolean"
    },
    "corps": {
      "description": "preparer : corps du message. Vide = compose depuis les reglages de prospection.",
      "type": "string"
    },
    "depart": {
      "description": "Ville ou adresse de depart, resolue par la BAN (creer, modifier).",
      "type": "string"
    },
    "duree_min": {
      "description": "Duree de l'arret en minutes (defaut 30).",
      "maximum": 480,
      "minimum": 5,
      "type": "integer"
    },
    "email": {
      "description": "Le destinataire du message de l'arret : ecrit ici, JAMAIS relu par l'outil.",
      "type": "string"
    },
    "etape_id": {
      "description": "Identifiant de l'arret (rendu par lire). Pour preparer : \"toutes\" = tous les arrets sans action.",
      "type": "string"
    },
    "fiche_id": {
      "description": "Une fiche de la base de l'utilisateur (prescriptio_suivis, ou proposer).",
      "type": "string"
    },
    "heure": {
      "description": "HH:MM, l'heure fixee d'un rendez-vous. Vide = quand le trajet le veut.",
      "type": "string"
    },
    "jour": {
      "description": "Le jour, AAAA-MM-JJ. Vide = a fixer.",
      "type": "string"
    },
    "naf": {
      "description": "proposer : codes NAF (5 caracteres) separes par des virgules. Defaut : les activites les plus presentes dans la base.",
      "type": "string"
    },
    "nature": {
      "description": "rendez_vous = point fixe a heure fixe ; prospect = insere ou le trajet le veut (defaut).",
      "enum": [
        "rendez_vous",
        "prospect"
      ],
      "type": "string"
    },
    "nom": {
      "description": "Nom de la tournee (creer, modifier) ou de l'arret (ajouter_etape).",
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "objet": {
      "description": "preparer : objet du message. Vide = compose depuis les reglages de prospection.",
      "type": "string"
    },
    "rayon_km": {
      "description": "Rayon des propositions autour des arrets (defaut 20).",
      "maximum": 50,
      "minimum": 1,
      "type": "integer"
    },
    "siren": {
      "description": "Une entreprise de l'annuaire : elle entre dans la base ET dans la tournee.",
      "type": "string"
    },
    "siret": {
      "description": "Etablissement precis, facultatif avec siren.",
      "type": "string"
    },
    "statut": {
      "description": "modifier : brouillon | planifiee | faite. marquer : a_faire | preparee | envoyee | faite | sans_suite.",
      "type": "string"
    },
    "tournee_id": {
      "description": "Identifiant de la tournee (rendu par lister / creer).",
      "type": "string"
    }
  },
  "required": [
    "action"
  ],
  "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).
