# Auto-validations

Nous avons mis en place un système d'auto-validations ayant pour objectifs de valider les missions après un certain délai si cela n'a pas été fait par le salarié ou le gestionnaire :

* validation salarié **un jour ouvré** après le démarrage de la mission (moment où la première activité est ajoutée dans la mission pour un utilisateur)
* validation gestionnaire **deux jours ouvrés** après la validation salarié

L'auto-validation ne s'effectue qu'en cas d'oubli de validation dans le délai imparti.

L'objet `MissionValidation` contient un nouveau champ `is_auto` . De plus le champ `submitter` peut être null (car une auto-validation n'a pas de submitter).

```graphql
validations {
  id
  isAdmin
  isAuto     # NEW: true pour une auto-validation
  justification
  userId
  receptionTime
  missionId
  submitter { # peut être null
    id
    firstName
    lastName
  }
}
```

### Auto-validation salarié

Une auto-validation salarié est équivalente à une validation salarié classique, il n'est plus possible pour le salarié de modifier ou de valider la mission.

Si un salarié tente de valider une mission auto-validée une erreur sera retournée

```python
class MissionAlreadyAutoValidatedError(MobilicError):
    code = "MISSION_ALREADY_AUTO_VALIDATED"
    default_message = "This mission has already been automatically validated"
```

### Auto-validation gestionnaire

Un gestionnaire peut toujours modifier/valider une mission auto-validée à sa place, mais dans ce cas il est nécessaire d'ajouter un argument `justification` qui peut prendre un des valeurs suivantes :

* personal
* professional
* time\_off

```python
class OverValidationJustification(str, Enum):
    PERSONAL = "personal"
    PROFESSIONAL = "professional"
    TIME_OFF = "time_off"
    __description__ = """
Enumération des valeurs suivantes.
- "personal" : Raisons personnelles
- "professional" : Raisons professionnelles
- "time_off" : Congé
"""
```

mutation de validation gestionnaire :

```graphql
mutation validateMission(
    $missionId: Int!
    $usersIds: [Int]!
    $creationTime: TimeStamp
    $activityItems: [BulkActivityItem]
    $expendituresCancelIds: [Int]
    $expendituresInputs: [BulkExpenditureItem]
    $justification: OverValidationJustificationEnum # NEW: argument nécessaire si la mission a déja été auto-validée
  ) {
    activities {
      validateMission(
        missionId: $missionId
        usersIds: $usersIds
        creationTime: $creationTime
        activityItems: $activityItems
        expendituresCancelIds: $expendituresCancelIds
        expendituresInputs: $expendituresInputs
        justification: $justification # NEW: argument nécessaire si la mission a déja été auto-validée
      ) {
        ...FullMissionData
      }
    }
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.mobilic.beta.gouv.fr/guides/auto-validations.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
