> 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/consultation-du-temps-de-travail.md).

# Consultation du temps de travail

L'API met à disposition trois opérations de consultation :

* pour une mission
* pour un travailleur mobile
* pour une entreprise

## Consultation des données d'une mission <a href="#consultation-des-donnees-dune-mission" id="consultation-des-donnees-dune-mission"></a>

{% hint style="info" %}
L'accès aux données de temps de travail d'une mission n'est autorisée que pour les membres de l'entreprise concernée par la mission.
{% endhint %}

```graphql
query {
    mission(id: Int!) {
        name
        activities {
            id
            type
            startTime
            endTime
            userId
        }
        expenditures {
            id
            type
            userId
        }
    }
}
```

La requête retourne la liste des activités associées à la mission (concernant éventuellement plusieurs utilisateurs).

## Consultation des données pour un travailleur mobile <a href="#consultation-des-donnees-pour-un-travailleur-mobile" id="consultation-des-donnees-pour-un-travailleur-mobile"></a>

{% hint style="info" %}
L'accès complet aux données de temps de travail n'est autorisé que pour les gestionnaires de l'entreprise ou pour l'utilisateur lui-même.
{% endhint %}

```graphql
query {
    user(id: Int!) {
        firstName
        lastName
        missions {
            edges {
                node {
                    name
                    activities {
                        id
                        type
                        startTime
                        endTime
                        userId
                    }
                    expenditures {
                        id
                        type
                        userId
                    }
                }
            }
        }
    }
}
```

Dans l'exemple ci-dessus, sous réserve d'un niveau d'autorisation adapté, l'API retournera la liste des missions sur lesquelles le travailleur a enregistré du temps de travail.

Si l'on souhaite uniquement récupérer les activités sans avoir un regroupement par missions, il est possible de requêter directement le champ `activities` :

```graphql
query {
    user(id: Int!) {
        firstName
        lastName
        activities {
            edges {
                node {
                    id
                    type
                    startTime
                    endTime
                    userId
                    missionId
                }
            }
        }
    }
}
```

Il est également possible de récupérer le temps de travail déjà calculé par journée.

```graphql
query {
    user(id: Int!) {
        firstName
        lastName
        workDays {
            edges {
                node {
                    startTime
                    endTime
                    activityDurations
                }
            }
        }
    }
}
```

## Consultation des données entreprise <a href="#consultation-des-donnees-entreprise" id="consultation-des-donnees-entreprise"></a>

Cette opération permet d'accéder à toutes les données de temps de travail propres à l'entreprise, c'est-à-dire toutes les missions qui ont été réalisées par des salariés de l'entreprise.

{% hint style="info" %}
L'accès complet à toutes les missions nécessite d'être rattaché en tant que gestionnaire à l'entreprise.
{% endhint %}

```graphql
query {
    company(id: Int!) {
        name
        missions {
            edges {
                node {
                    id
                    name
                    activities {
                        id
                        type
                        startTime
                        endTime
                        userId
                    }
                    expenditures {
                        id
                        type
                        userId
                    }
                }
            }
        }
    }
}
```

Il est également possible de récupérer la liste des membres actuels de l'entreprise.

```graphql
query {
    company(id: Int!) {
        name
        users {
            id
            firstName
            lastName
        }
    }
}
```

A l'instar de la consultation des données d'un travailleur mobile il est possible de récupérer le temps de travail déjà agrégé par journée.

```graphql
query {
    company(id: Int!) {
        name
        workDays {
            edges {
                node {
                    userId
                    startTime
                    endTime
                    activityDurations
                }
            }
        }
    }
}
```

### Cas d'une gestion multi-sociétés <a href="#cas-dune-gestion-multi-societes" id="cas-dune-gestion-multi-societes"></a>

Il est possible de récupérer en une seule requête la liste de toutes les entreprises sur lesquelles l'utilisateur a un droit de gestion, via le champ `adminedCompanies`.

```graphql
query {
  me {
    adminedCompanies {
      name
      workDays {
        edges {
          node {
            userId
            startTime
            endTime
            activityDurations
          }
        }
      }
    }
  }
}
```

## Choix de la période d'historique récupérée <a href="#choix-de-la-periode-dhistorique-recuperee" id="choix-de-la-periode-dhistorique-recuperee"></a>

Les trois champs permettant de récupérer des données de temps de travail prennent des arguments optionnels pour restreindre la période d'historique :

* le champ `activities(fromTime: TimeStamp, untilTime: TimeStamp)` au niveau d'un travailleur mobile
* le champ `missions(fromTime: TimeStamp, untilTime: TimeStamp)` au niveau d'un travailleur mobile ou d'une entreprise
* le champ `workDays(fromDate: Date, untilDate: Date)` au niveau d'un travailleur mobile ou d'une entreprise

```graphql
query {
    user(id: Int!) {
        firstName
        lastName
        activities(fromTime: 1577869200, untilTime: 1578081600) {
            edges {
                node {
                    # toutes les activités qui ont eu lien (au moins en partie) entre le 01/01/2020 9h et le 03/01/2020 20h
                    id
                    type
                    startTime
                    endTime
                    userId
                    missionId
                }
            }
        }
    }
}
```

```graphql
query {
    user(id: Int!) {
        firstName
        lastName
        missions(fromTime: 1577869200) {
            # toutes les missions pour lesquelles le travailleur mobile a du temps de travail après le 01/01/2020 9h
            edges {
                node {
                    name
                    activities {
                        id
                        type
                        startTime
                        endTime
                        userId
                    }
                    expenditures {
                        id
                        type
                        userId
                    }
                }
            }
        }
    }
}
```

```graphql
query {
  me {
    adminedCompanies {
      name
      workDays(fromDate: "2020-01-01") {
        edges {
          node {
            # toutes les journées de travail des entreprises concernées à partir du 01/01/2020
            userId
            startTime
            endTime
            activityDurations
          }
        }
      }
    }
  }
}
```

Sur les champs de l'entreprise il existe également un paramètre `limit` qui définit un nombre maximal de missions retournées, en plus du filtre sur les dates. Les missions les plus récentes (dans la période sélectionnée) seront renvoyées.
