> For the complete documentation index, see [llms.txt](https://developers.mobilic.beta.gouv.fr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.mobilic.beta.gouv.fr/guides/auto-validations.md).

# 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
      }
    }
```
