Rechercher dans la documentation

Saisissez au moins deux caractères.

↑ ↓ naviguer↵ ouvriresc fermer
Référence API

API : sales-targets

4 opérations REST du groupe sales-targets.

Référence générée depuis le contrat versionné · Version Markdown

GET /sales-targets#

Objectifs individuels d'un cycle : objectif d'équipe, somme attribuée, reste, une ligne par commercial (#750)

Scopes d'app : settings:write. Les autres droits, périmètres et contrôles métier restent applicables.

Paramètres

NomEmplacementRequisSchéma
cycleIdqueryOui{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}

Aucun corps de requête déclaré dans ce contrat.

Réponses

200 : Répartition du cycle

Contenu de la réponse 200
{
  "application/json": {
    "schema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "label": {
              "type": "string"
            },
            "startsOn": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            },
            "endsOn": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            },
            "status": {
              "type": "string",
              "enum": [
                "upcoming",
                "active",
                "closed"
              ]
            }
          },
          "required": [
            "id",
            "label",
            "startsOn",
            "endsOn",
            "status"
          ],
          "additionalProperties": false
        },
        "mode": {
          "type": "string",
          "enum": [
            "equal",
            "individual"
          ],
          "description": "Mode qui s'applique au cycle (figé pour un cycle clos)"
        },
        "editable": {
          "type": "boolean",
          "description": "Faux pour un cycle clos : l'historique se lit, il ne se modifie plus"
        },
        "teamTarget": {
          "anyOf": [
            {
              "type": "string",
              "description": "Montant HT, deux décimales"
            },
            {
              "type": "null"
            }
          ],
          "description": "Somme des objectifs d'entités du cycle ; null si aucune n'en porte"
        },
        "assigned": {
          "type": "string",
          "description": "Somme des objectifs des commerciaux listés"
        },
        "remaining": {
          "anyOf": [
            {
              "type": "string",
              "description": "Montant HT, deux décimales"
            },
            {
              "type": "null"
            }
          ],
          "description": "Objectif d'équipe moins la somme attribuée ; négatif = dépassement"
        },
        "overAllocated": {
          "type": "boolean"
        },
        "divisor": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ],
          "description": "Diviseur de la répartition égale ; null en mode individuel"
        },
        "sellers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "userId": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "active": {
                "type": "boolean",
                "description": "Faux pour un commercial parti, listé en lecture s'il porte un objectif"
              },
              "target": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Montant HT, deux décimales"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Objectif tous périmètres ; null = non défini"
              },
              "entries": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "businessUnitId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Null = tous périmètres"
                    },
                    "amount": {
                      "type": "string",
                      "description": "Montant HT, deux décimales"
                    },
                    "updatedAt": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                    },
                    "updatedBy": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  },
                  "required": [
                    "businessUnitId",
                    "amount",
                    "updatedAt",
                    "updatedBy"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "userId",
              "name",
              "active",
              "target",
              "entries"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "cycle",
        "mode",
        "editable",
        "teamTarget",
        "assigned",
        "remaining",
        "overAllocated",
        "divisor",
        "sellers"
      ],
      "additionalProperties": false
    }
  }
}

default : Erreur - enveloppe problem+json (RFC 9457)

Contenu de la réponse default
{
  "application/problem+json": {
    "schema": {
      "$ref": "#/components/schemas/Problem"
    }
  }
}
Opération OpenAPI complète
{
  "summary": "Objectifs individuels d'un cycle : objectif d'équipe, somme attribuée, reste, une ligne par commercial (#750)",
  "tags": [
    "Objectifs"
  ],
  "parameters": [
    {
      "name": "cycleId",
      "in": "query",
      "required": true,
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    }
  ],
  "security": [
    {
      "oauth2": [
        "settings:write"
      ]
    },
    {
      "userSession": []
    }
  ],
  "responses": {
    "200": {
      "description": "Répartition du cycle",
      "content": {
        "application/json": {
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "cycle": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "label": {
                    "type": "string"
                  },
                  "startsOn": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                  },
                  "endsOn": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "upcoming",
                      "active",
                      "closed"
                    ]
                  }
                },
                "required": [
                  "id",
                  "label",
                  "startsOn",
                  "endsOn",
                  "status"
                ],
                "additionalProperties": false
              },
              "mode": {
                "type": "string",
                "enum": [
                  "equal",
                  "individual"
                ],
                "description": "Mode qui s'applique au cycle (figé pour un cycle clos)"
              },
              "editable": {
                "type": "boolean",
                "description": "Faux pour un cycle clos : l'historique se lit, il ne se modifie plus"
              },
              "teamTarget": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Montant HT, deux décimales"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Somme des objectifs d'entités du cycle ; null si aucune n'en porte"
              },
              "assigned": {
                "type": "string",
                "description": "Somme des objectifs des commerciaux listés"
              },
              "remaining": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Montant HT, deux décimales"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Objectif d'équipe moins la somme attribuée ; négatif = dépassement"
              },
              "overAllocated": {
                "type": "boolean"
              },
              "divisor": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Diviseur de la répartition égale ; null en mode individuel"
              },
              "sellers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "userId": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "active": {
                      "type": "boolean",
                      "description": "Faux pour un commercial parti, listé en lecture s'il porte un objectif"
                    },
                    "target": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "Montant HT, deux décimales"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Objectif tous périmètres ; null = non défini"
                    },
                    "entries": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "businessUnitId": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Null = tous périmètres"
                          },
                          "amount": {
                            "type": "string",
                            "description": "Montant HT, deux décimales"
                          },
                          "updatedAt": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                          },
                          "updatedBy": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          }
                        },
                        "required": [
                          "businessUnitId",
                          "amount",
                          "updatedAt",
                          "updatedBy"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "userId",
                    "name",
                    "active",
                    "target",
                    "entries"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "cycle",
              "mode",
              "editable",
              "teamTarget",
              "assigned",
              "remaining",
              "overAllocated",
              "divisor",
              "sellers"
            ],
            "additionalProperties": false
          }
        }
      }
    },
    "default": {
      "description": "Erreur - enveloppe problem+json (RFC 9457)",
      "content": {
        "application/problem+json": {
          "schema": {
            "$ref": "#/components/schemas/Problem"
          }
        }
      }
    }
  }
}

PUT /sales-targets#

Pose, modifie ou retire (amount null) l'objectif d'un commercial sur un cycle non clos (#750)

Un dépassement de l'objectif d'équipe est signalé dans la réponse (overAllocated), jamais refusé. Cycle clos : 422 not-editable.

Scopes d'app : settings:write. Les autres droits, périmètres et contrôles métier restent applicables.

Corps de requête

application/json

ChampTypeObligatoireDescription
userIdstringOui
cycleIdstringOui
businessUnitIdunionOui
amountunionOui
Schéma complet du corps
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "userId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "cycleId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "businessUnitId": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "amount": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "userId",
    "cycleId",
    "businessUnitId",
    "amount"
  ]
}

Réponses

200 : Répartition du cycle après écriture

Contenu de la réponse 200
{
  "application/json": {
    "schema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "label": {
              "type": "string"
            },
            "startsOn": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            },
            "endsOn": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            },
            "status": {
              "type": "string",
              "enum": [
                "upcoming",
                "active",
                "closed"
              ]
            }
          },
          "required": [
            "id",
            "label",
            "startsOn",
            "endsOn",
            "status"
          ],
          "additionalProperties": false
        },
        "mode": {
          "type": "string",
          "enum": [
            "equal",
            "individual"
          ],
          "description": "Mode qui s'applique au cycle (figé pour un cycle clos)"
        },
        "editable": {
          "type": "boolean",
          "description": "Faux pour un cycle clos : l'historique se lit, il ne se modifie plus"
        },
        "teamTarget": {
          "anyOf": [
            {
              "type": "string",
              "description": "Montant HT, deux décimales"
            },
            {
              "type": "null"
            }
          ],
          "description": "Somme des objectifs d'entités du cycle ; null si aucune n'en porte"
        },
        "assigned": {
          "type": "string",
          "description": "Somme des objectifs des commerciaux listés"
        },
        "remaining": {
          "anyOf": [
            {
              "type": "string",
              "description": "Montant HT, deux décimales"
            },
            {
              "type": "null"
            }
          ],
          "description": "Objectif d'équipe moins la somme attribuée ; négatif = dépassement"
        },
        "overAllocated": {
          "type": "boolean"
        },
        "divisor": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ],
          "description": "Diviseur de la répartition égale ; null en mode individuel"
        },
        "sellers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "userId": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "active": {
                "type": "boolean",
                "description": "Faux pour un commercial parti, listé en lecture s'il porte un objectif"
              },
              "target": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Montant HT, deux décimales"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Objectif tous périmètres ; null = non défini"
              },
              "entries": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "businessUnitId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Null = tous périmètres"
                    },
                    "amount": {
                      "type": "string",
                      "description": "Montant HT, deux décimales"
                    },
                    "updatedAt": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                    },
                    "updatedBy": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  },
                  "required": [
                    "businessUnitId",
                    "amount",
                    "updatedAt",
                    "updatedBy"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "userId",
              "name",
              "active",
              "target",
              "entries"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "cycle",
        "mode",
        "editable",
        "teamTarget",
        "assigned",
        "remaining",
        "overAllocated",
        "divisor",
        "sellers"
      ],
      "additionalProperties": false
    }
  }
}

default : Erreur - enveloppe problem+json (RFC 9457)

Contenu de la réponse default
{
  "application/problem+json": {
    "schema": {
      "$ref": "#/components/schemas/Problem"
    }
  }
}
Opération OpenAPI complète
{
  "summary": "Pose, modifie ou retire (amount null) l'objectif d'un commercial sur un cycle non clos (#750)",
  "description": "Un dépassement de l'objectif d'équipe est signalé dans la réponse (`overAllocated`), jamais refusé. Cycle clos : 422 `not-editable`.",
  "tags": [
    "Objectifs"
  ],
  "requestBody": {
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "userId": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "cycleId": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "businessUnitId": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "amount": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 999999999999.99
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "userId",
            "cycleId",
            "businessUnitId",
            "amount"
          ]
        }
      }
    }
  },
  "security": [
    {
      "oauth2": [
        "settings:write"
      ]
    },
    {
      "userSession": []
    }
  ],
  "responses": {
    "200": {
      "description": "Répartition du cycle après écriture",
      "content": {
        "application/json": {
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "cycle": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "label": {
                    "type": "string"
                  },
                  "startsOn": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                  },
                  "endsOn": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "upcoming",
                      "active",
                      "closed"
                    ]
                  }
                },
                "required": [
                  "id",
                  "label",
                  "startsOn",
                  "endsOn",
                  "status"
                ],
                "additionalProperties": false
              },
              "mode": {
                "type": "string",
                "enum": [
                  "equal",
                  "individual"
                ],
                "description": "Mode qui s'applique au cycle (figé pour un cycle clos)"
              },
              "editable": {
                "type": "boolean",
                "description": "Faux pour un cycle clos : l'historique se lit, il ne se modifie plus"
              },
              "teamTarget": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Montant HT, deux décimales"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Somme des objectifs d'entités du cycle ; null si aucune n'en porte"
              },
              "assigned": {
                "type": "string",
                "description": "Somme des objectifs des commerciaux listés"
              },
              "remaining": {
                "anyOf": [
                  {
                    "type": "string",
                    "description": "Montant HT, deux décimales"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Objectif d'équipe moins la somme attribuée ; négatif = dépassement"
              },
              "overAllocated": {
                "type": "boolean"
              },
              "divisor": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Diviseur de la répartition égale ; null en mode individuel"
              },
              "sellers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "userId": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "active": {
                      "type": "boolean",
                      "description": "Faux pour un commercial parti, listé en lecture s'il porte un objectif"
                    },
                    "target": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "Montant HT, deux décimales"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Objectif tous périmètres ; null = non défini"
                    },
                    "entries": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "businessUnitId": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Null = tous périmètres"
                          },
                          "amount": {
                            "type": "string",
                            "description": "Montant HT, deux décimales"
                          },
                          "updatedAt": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                          },
                          "updatedBy": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          }
                        },
                        "required": [
                          "businessUnitId",
                          "amount",
                          "updatedAt",
                          "updatedBy"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "userId",
                    "name",
                    "active",
                    "target",
                    "entries"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "cycle",
              "mode",
              "editable",
              "teamTarget",
              "assigned",
              "remaining",
              "overAllocated",
              "divisor",
              "sellers"
            ],
            "additionalProperties": false
          }
        }
      }
    },
    "default": {
      "description": "Erreur - enveloppe problem+json (RFC 9457)",
      "content": {
        "application/problem+json": {
          "schema": {
            "$ref": "#/components/schemas/Problem"
          }
        }
      }
    }
  }
}

GET /sales-targets/mode#

Mode de répartition des objectifs de l'organisation (#750)

Scopes d'app : settings:write. Les autres droits, périmètres et contrôles métier restent applicables.

Aucun corps de requête déclaré dans ce contrat.

Réponses

200 : Mode courant

Contenu de la réponse 200
{
  "application/json": {
    "schema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "equal",
            "individual"
          ]
        }
      },
      "required": [
        "mode"
      ],
      "additionalProperties": false
    }
  }
}

default : Erreur - enveloppe problem+json (RFC 9457)

Contenu de la réponse default
{
  "application/problem+json": {
    "schema": {
      "$ref": "#/components/schemas/Problem"
    }
  }
}
Opération OpenAPI complète
{
  "summary": "Mode de répartition des objectifs de l'organisation (#750)",
  "tags": [
    "Objectifs"
  ],
  "security": [
    {
      "oauth2": [
        "settings:write"
      ]
    },
    {
      "userSession": []
    }
  ],
  "responses": {
    "200": {
      "description": "Mode courant",
      "content": {
        "application/json": {
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "equal",
                  "individual"
                ]
              }
            },
            "required": [
              "mode"
            ],
            "additionalProperties": false
          }
        }
      }
    },
    "default": {
      "description": "Erreur - enveloppe problem+json (RFC 9457)",
      "content": {
        "application/problem+json": {
          "schema": {
            "$ref": "#/components/schemas/Problem"
          }
        }
      }
    }
  }
}

PUT /sales-targets/mode#

Change le mode de répartition, sans réécrire aucun cycle clos (#750)

Scopes d'app : settings:write. Les autres droits, périmètres et contrôles métier restent applicables.

Corps de requête

application/json

ChampTypeObligatoireDescription
modestringOui Valeurs : equal, individual
Schéma complet du corps
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "equal",
        "individual"
      ]
    }
  },
  "required": [
    "mode"
  ]
}

Réponses

200 : Mode enregistré

Contenu de la réponse 200
{
  "application/json": {
    "schema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "equal",
            "individual"
          ]
        }
      },
      "required": [
        "mode"
      ],
      "additionalProperties": false
    }
  }
}

default : Erreur - enveloppe problem+json (RFC 9457)

Contenu de la réponse default
{
  "application/problem+json": {
    "schema": {
      "$ref": "#/components/schemas/Problem"
    }
  }
}
Opération OpenAPI complète
{
  "summary": "Change le mode de répartition, sans réécrire aucun cycle clos (#750)",
  "tags": [
    "Objectifs"
  ],
  "requestBody": {
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "enum": [
                "equal",
                "individual"
              ]
            }
          },
          "required": [
            "mode"
          ]
        }
      }
    }
  },
  "security": [
    {
      "oauth2": [
        "settings:write"
      ]
    },
    {
      "userSession": []
    }
  ],
  "responses": {
    "200": {
      "description": "Mode enregistré",
      "content": {
        "application/json": {
          "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "equal",
                  "individual"
                ]
              }
            },
            "required": [
              "mode"
            ],
            "additionalProperties": false
          }
        }
      }
    },
    "default": {
      "description": "Erreur - enveloppe problem+json (RFC 9457)",
      "content": {
        "application/problem+json": {
          "schema": {
            "$ref": "#/components/schemas/Problem"
          }
        }
      }
    }
  }
}