# Consultation des calculs de seuils réglementaires

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

### Exemple d'appel à l'API

```graphql
query {
    user(id: Int!) {
      regulationComputationsByDay(fromDate: Date, toDate: Date) {
        day
        regulationComputations {
          submitterType
          regulationChecks(unit: "day" | "week") {
            type
            label
            description
            unit
            alert {
              extra
            }
          }
        }
      }
    }
  }
```

L'API renvoie une liste pour chaque jour contenant des calculs de seuils. Il est possible d'indiquer le jour de début et de fin du tableau grâce aux paramètres `fromDate` et `toDate`.

\
Chaque élement de la liste contient une liste de `RegulationComputation` représentant les calculs de seuils effectués pour le jour en question.

Un `RegulationComputation` possède

* un `submitterType` qui vaut `admin` ou `employee` . Ceci indique si le calcul a été effectué en prenant en compte la version salarié ou gestionnaire des activités.
* une liste de `regulationCheck` représentant les seuils règlementaires calculés pour la journée

Un `regulationCheck` possède

* un `type` pour identifier le seuil dépassé
* un `label`  correspondant au seuil dépassé
* une `description`
* une `unit` valant soit `day` ou `week` selon qu'il s'agisse d'une règle quotidienne ou hebdomadaire
* un objet `alert` qui est null s'il n'y a pas eu de dépassement de seuil pour la règle en question. S'il y a eu dépassement, l'objet sera non null et un champ `extra` contiendra un JSON avec des informations complémentaires relatives au dépassement

### Exemple de réponse

```graphql
user: {
  regulationComputationsByDay: [
    { 
      # le tableau contient une entrée par journée
      day: 2023-03-15,
      regulationComputations: [
        {
          day: 2023-03-15,
          # les calculs concernent les version salariés des données
          submitterType: employee, 
          regulationChecks: [
            {
              # identifiant de la règle vérifiée
              type: minimumDailyRest,
              label: Non-respect(s) du repos quotidien,
              description: La dur\u00e9e du repos quotidien ...,
              # indique si la règle est journalière ou hebdomadaire
              unit: day,
              # pas d'alerte relevée ici
              alert: null,
            },
            {
              type: maximumWorkDayTime,
              label: D\u00e9passement(s) de la dur\u00e9e maximale du travail quotidien,
              description: La dur\u00e9e du travail ...,
              unit: day,
              # un dépassement de seuil a été relevé
              alert: {
                # le champ extra contient des informations supplémentaires
                extra: {\night_work\: true, \max_time_in_hours\: 10},
              },
            },
            {
              type: maximumUninterruptedWorkTime,
              label: D\u00e9passement(s) de la dur\u00e9e maximale du travail ininterrompu,
              description: Lorsque le temps de travail ...,
              regulationRule: dailyRest,
              unit: day,
              # un dépassement de seuil a été relevé mais il n'y a pas d'informations supplémentaires
              alert: {
                extra: null,
              },
            },
            {
              # example de règle hebdomadaire
              type: maximumWorkedDaysInWeek,
              label: Non-respect(s) du repos hebdomadaire,
              description: Il est interdit de travailler plus ...,
              unit: week,
              alert: null,
            }         
          ],
        }
      ],
    }
  ],
}
```

### Explication des données "extra"

Le champ `extra` contient des informations différentes selon le type d'alerte

#### minimumDailyRest

* `min_daily_break_in_hours`  La durée du repos quotidien en heures à laquelle est soumise le salarié
* `breach_period_start` et `breach_period_end`  Le début et la fin de la période de 24h sur laquelle il a été constaté que le repos quotidien n'a pas été respecté
* `breach_period_max_break_in_seconds` La plus longue période de repos constaté sur cette période de 24h. Celle-ci est forcément inférieure à la durée légale du repos quotidien et c'est pourquoi une alerte a été levée
* `sanction_code` le code NATINF de la sanction liée à ce dépassement

**Exemple**

```
{
  min_daily_break_in_hours: 10,
  breach_period_start: 2023-02-18T05:10:00,
  breach_period_end: 2023-02-19T05:10:00,
  breach_period_max_break_in_seconds: 31380,
  sanction_code: NATINF 20525
}
# 10h de repos était nécessaire sur cette période de 24h 
# mais la plus longue pause a été de 8h 43m
```

#### maximumWorkDayTime

* `night_work` indique si le salarié est considéré comme travailleur de nuit dans le cadre du calcul du dépassement de seuil
* `max_work_range_in_hours` L'amplitude maximale du travail journalier en heures à laquelle est soumise le salarié. Cette valeur est différente pour un travailleur de nuit
* `work_range_in_seconds` La durée de l'amplitude du travail en secondes constatée qui a déclenché l'alerte. Cette durée est forcément supérieure à la durée maximale du travail journalier
* `work_range_start` et `work_range_end` Le début et la fin de la période sur laquelle le travail trop long a été constaté
* `sanction_code` le code NATINF de la sanction liée à ce dépassement

**Exemple**

```
{
  night_work: false, 
  max_work_range_in_hours: 12, 
  work_range_in_seconds: 46260, 
  work_range_start: 2022-12-12T06:59:00, 
  work_range_end: 2022-12-12T20:45:00, 
  sanction_code: NATINF 11292
}
# Amplitude maximale de 12h
# Amplitude constatée de 12h51m
```

#### minimumWorkDayBreak

* `work_range_start, work_range_end et` work\_range\_in\_seconds Début, fin et durée en secondes du temps de travail sur lequel le calcul se base. La durée du temps de travail influe sur le temps de pause nécessaire au salarié.
* `min_break_time_in_minutes` Temps de pause obligatoire en minutes auquel est soumis le salarié
* `total_break_time_in_seconds` Temps de pause constaté en secondes (ce temps est donc inférieur au temps de pause obligatoire)
* `sanction_code` la sanction liée à ce dépassement

**Exemple**

```
{
  total_break_time_in_seconds: 900.0,
  work_range_in_seconds: 30060,
  work_range_start: 2022-04-12T09:45:00,
  sanction_code: Sanction du Code du Travail,
  work_range_end: 2022-04-12T18:36:00,
  min_break_time_in_minutes: 30
}
# Pour une amplitude de 8h21m, 30 minutes de pause sont nécessaires
# Seulement 15 minutes de pause ont été constatées
```

#### maximumUninterruptedWorkTime

* `longest_uninterrupted_work_start` et `longest_uninterrupted_work_end` début et fin de la période de travail ininterrompu trop longue
* `longest_uninterrupted_work_in_seconds` durée en secondes du temps de travail ininterrompu trop long non conforme à la règlementation
* `max_uninterrupted_work_in_hours` durée en heures de la durée maximale de travail ininterrompu spécifiée par la règlementation
* `sanction_code` le code NATINF de la sanction liée à ce dépassement

**Exemple**

```
{
  max_uninterrupted_work_in_hours: 6,
  longest_uninterrupted_work_in_seconds: 22200.0,
  longest_uninterrupted_work_start: 2023-01-06T09:00:00,
  longest_uninterrupted_work_end: 2023-01-06T15:10:00,
  sanction_code: Sanction du Code du Travail
}
# Travail ininterrompu maximal: 6h
# 6h10m constaté
```

#### maximumWorkedDaysInWeek

* `max_nb_days_worked_by_week` nombre de jours travaillés par semaine maximum d'après la règlementation
* `min_weekly_break_in_hours` chaque semaine doit contenir au moins une pause consécutive d'une durée indiquée ici en heures
* `too_many_days` boolean indiquant si trop de jours travaillés ont été constatés dans la semaine
* `rest_duration_s` durée en secondes de la plus longue pause consécutive dans la semaine. Ce champ ne sera présent que si cette pause est insuffisante
* `sanction_code` le code NATINF de la sanction liée à ce dépassement

**Exemple**

```
{
  max_nb_days_worked_by_week: 6,
  min_weekly_break_in_hours: 34,
  too_many_days: false,
  rest_duration_s: 111240.0,
  sanction_code: NATINF 13152
}
# Plus longue pause de la semaine: 30h54m contre 34h règlementaires
```
