Okouro doc

La livraison repose sur une seule chaîne : un client possède des missions, une mission affecte des consultants via des affectations, et chaque mission porte un budget que vous pouvez comparer au réalisé. Ce guide parcourt toute la chaîne dans l’ordre.

1. Créer un client

POST /clients HTTP/1.1
Authorization: Bearer <access_token>
Content-Type: application/json

{ "name": "Acme Corp", "status": "customer", "industry": "Manufacturing" }

Renvoie 201 Created avec un ClientResponse. status vaut prospect ou customer (par défaut customer). Conservez l’id renvoyé.

2. Ouvrir une mission

Une mission appartient à un client et passe par draft, active, completed ou cancelled.

POST /missions HTTP/1.1
Authorization: Bearer <access_token>
Content-Type: application/json

{
  "client_id": "0190a1c2-...",
  "name": "Apollo",
  "start_date": "2026-01-01",
  "end_date": "2026-06-30"
}

Renvoie 201 Created avec un MissionResponse. Modifiez-la avec PUT /missions/{id}, qui accepte aussi le status vers lequel vous souhaitez la faire évoluer.

3. Affecter un consultant

Une affectation relie un consultant à une mission sur une plage de dates, avec un tarif facturable facultatif. Voir Gérer les personnes pour créer le consultant.

POST /assignments HTTP/1.1
Authorization: Bearer <access_token>
Content-Type: application/json

{
  "mission_id": "0190a1c2-...",
  "consultant_id": "0190a1c2-...",
  "start_date": "2026-01-01",
  "billing_rate": "900.00"
}

Renvoie 201 Created avec une AssignmentResponse. status vaut active, completed ou cancelled. Le billing_rate revient à null pour les appelants avec le rôle consultant (voir Rôles et permissions). Une affectation active est ce qui passe le statut du consultant à active et déverrouille ses lignes de feuille de temps (voir Suivre le temps).

4. Définir le budget

Un budget déclare le mode de vente et le chiffre d’affaires / coût prévisionnels. Seul un administrateur peut le définir.

PATCH /missions/{id}/budget HTTP/1.1
Authorization: Bearer <access_token>
Content-Type: application/json

{
  "sale_mode": "time_and_materials",
  "budget_revenue": "100000.00",
  "budget_cost": "60000.00"
}

sale_mode vaut time_and_materials (par défaut) ou fixed_price.

5. Consulter le budget face au réalisé

GET /missions/{id}/budget HTTP/1.1
Authorization: Bearer <access_token>

Renvoie un MissionBudgetResponse qui compare le prévisionnel, le réalisé et la projection :

{
  "sale_mode": "time_and_materials",
  "health": "on_track",
  "reasons": [],
  "progress_percent": 42.0,
  "budget":   { "revenue": "100000.00", "cost": "60000.00", "margin": "40000.00" },
  "actuals":  { "revenue": "41000.00", "cost": "25000.00", "margin": "16000.00" },
  "forecast": { "revenue": "98000.00", "cost": "59000.00", "margin": "39000.00" },
  "variance": { "revenue": "-2000.00", "cost": "-1000.00", "margin": "-1000.00" },
  "days_worked": "46"
}

health vaut unknown, on_track, at_risk ou over. cost et margin sont null pour les appelants avec le rôle consultant ; revenue est toujours visible. Pour comparer plusieurs missions à la fois, utilisez GET /kpi/mission-budgets?ids=... (voir Lire les indicateurs).

Points d’entrée en un coup d’œil

ActionMéthodeCheminSuccès
Créer un clientPOST/clients201
Lister / récupérer des clientsGET/clients, /clients/{id}200
Créer une missionPOST/missions201
Modifier une missionPUT/missions/{id}200
Créer une affectationPOST/assignments201
Modifier une affectationPUT/assignments/{id}200
Définir le budgetPATCH/missions/{id}/budget200
Consulter le budgetGET/missions/{id}/budget200

Une fois les affectations en place, les flux du quotidien Suivre le temps et Gérer les frais se rattachent tous deux à la mission.