# AEIG - API OPS

> API HTTP de consultation des donnees OPS de l'AEIG. Domaines couverts par ce serveur : electricity, events, fleet, it, purchase, space, stock, travel. **Lecture seule** : aucune route de cette API n'ecrit, ne modifie ni ne supprime.

- Version : 1.0.0
- Base : https://odoo.aeig.bj/api/v1
- Specification OpenAPI 3.1 : https://odoo.aeig.bj/api/openapi.json
- Documentation lisible : https://odoo.aeig.bj/api/docs

## Authentification

Toutes les routes de donnees exigent un en-tete :

```
Authorization: Bearer <cle_api>
```

La cle est une cle API Odoo, creee par le titulaire du compte technique depuis *Preferences > Securite du compte > Cles API*. Elle est nominative et porte une date d'expiration. Sans cle valide, les routes de donnees repondent `401`. Les routes de documentation (`/api/docs`, `/api/openapi.json`, `/api/llms.txt`) sont publiques et ne demandent rien.

**Le compte porteur de la cle doit etre habilite.** Une cle emise sur un compte quelconque, meme administrateur, est refusee en `403`. C'est ce qui garantit que les lectures s'effectuent avec des droits en lecture seule et non avec ceux d'une personne. Demandez a votre administrateur Odoo une cle emise par le compte technique de l'API.

## Conventions communes

Toutes les ressources s'interrogent de la meme facon.

- `GET /api/v1/<ressource>` renvoie `{"data": [...], "meta": {...}}`.
- `GET /api/v1/<ressource>/<id>` renvoie `{"data": {...}}`.
- `limit` : taille de page, defaut 50, plafond 200. Une valeur superieure est ramenee a 200 sans erreur.
- `offset` : decalage de pagination. `meta.total` donne le nombre total d'enregistrements correspondant aux filtres, ce qui permet de savoir quand s'arreter.
- `since_id` : pagination par curseur, **a preferer pour balayer une ressource entiere**. Ne retourne que les enregistrements d'identifiant superieur, tries par identifiant croissant, a cout constant quelle que soit la profondeur — la ou `offset` ralentit page apres page. La reponse porte `meta.next_since_id` : repassez-le tel quel, et arretez-vous quand il vaut `null`. Ne se combine ni avec `offset` ni avec `order`.
- `total=false` : omet `meta.total`. Le comptage ignore `limit` et parcourt toute la table ; le desactiver allege nettement un balayage complet.
- `fields` : liste de champs separes par des virgules, pour ne recevoir que ce qui est utile. Par defaut, tous les champs de la ressource.
- `order` : `champ` ou `champ desc`, uniquement sur un champ expose.
- Les filtres sont nommes et listes par ressource. Il n'est pas possible de transmettre un domaine Odoo brut : toute autre cle de requete est refusee en `400`.
- Les dates sont en ISO 8601. Les horodatages sont en UTC et se terminent par `Z`.
- Une relation vide vaut `null`.

### Erreurs

Les erreurs ont la forme `{"error": {"code": "...", "message": "..."}}`. Seule exception : le `405`, emis par le routage avant que l'application ne prenne la main, conserve un corps HTML. Fiez-vous au code de statut.

| Statut | Code | Signification |
| --- | --- | --- |
| 400 | `bad_request` | Parametre inconnu ou tri invalide |
| 401 | `unauthorized` | Cle API absente, invalide ou expiree |
| 403 | `forbidden` | Compte non habilite a consommer l'API, ou sans droit de lecture sur ce modele |
| 404 | `not_found` | Ressource inconnue, ou enregistrement hors du perimetre expose |
| 405 | *(corps HTML)* | Seul GET est accepte sur les routes de donnees |
| 422 | `invalid_value` | Valeur de filtre non exploitable (date mal formee, entier attendu) |

### Exemple

```bash
curl -s \
  -H "Authorization: Bearer $AEIG_API_KEY" \
  "https://odoo.aeig.bj/api/v1/electricity/counters?limit=5&fields=id,code,label"
```

### Balayer une ressource entiere

Enchainez les pages avec `since_id` et coupez le comptage : le cout reste constant du debut a la fin.

```bash
since=0
while : ; do
  page=$(curl -s -H "Authorization: Bearer $AEIG_API_KEY" \
    "https://odoo.aeig.bj/api/v1/electricity/counters?limit=200&total=false&since_id=$since")
  echo "$page" | jq -c '.data[]'
  since=$(echo "$page" | jq -r '.meta.next_since_id')
  [ "$since" = "null" ] && break
done
```

## Ressources

### electricity/counters

Compteurs electriques prepayes, avec solde et autonomie projetee.

- Liste : `GET https://odoo.aeig.bj/api/v1/electricity/counters`
- Detail : `GET https://odoo.aeig.bj/api/v1/electricity/counters/<id>`
- Tri par defaut : `code asc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du compteur. |
| `code` | string | Code du compteur. |
| `label` | string | Libelle du compteur. |
| `environment` | string | Site ou environnement desservi. |
| `current_kwh` | number | Solde courant estime, en kWh. |
| `last_reading_kwh` | number | Solde au dernier releve, en kWh. |
| `last_reading_date` | string | Date et heure du dernier releve. |
| `days_since_reading` | integer | Nombre de jours ecoules depuis le dernier releve. |
| `avg_daily_consumption` | number | Consommation journaliere moyenne, en kWh. |
| `projected_autonomy_days` | integer | Autonomie restante projetee, en jours. |
| `total_purchased_kwh` | number | Cumul des kWh achetes. |
| `total_purchased_amount` | number | Cumul des montants achetes. |
| `currency` | string | Devise des montants. |
| `status` | string | Statut d'alerte du compteur selon l'autonomie restante. Valeurs : `ok` = OK, `warning` = Surveillance, `critical` = Critique, `no_data` = Aucune donnee. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `status` | `=` | Statut d'alerte exact. Valeurs : `ok`, `warning`, `critical`, `no_data`. |
| `environment_id` | `=` | Identifiant du site desservi. |
| `code` | `ilike` | Recherche partielle sur le code du compteur. |
| `autonomy_below` | `<=` | Compteurs dont l'autonomie projetee est inferieure ou egale a ce nombre de jours. |

### electricity/purchases

Achats de credit electrique : kWh acquis, montant et prix unitaire.

- Liste : `GET https://odoo.aeig.bj/api/v1/electricity/purchases`
- Detail : `GET https://odoo.aeig.bj/api/v1/electricity/purchases/<id>`
- Tri par defaut : `date_purchase desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de l'achat. |
| `reference` | string | Reference de l'achat. |
| `counter` | string | Code du compteur credite. |
| `counter_id` | integer | Identifiant du compteur credite. |
| `environment` | string | Site ou environnement desservi. |
| `date_purchase` | string | Date de l'achat. |
| `purchased_kwh` | number | Quantite de kWh achetee. |
| `amount` | number | Montant paye. |
| `currency` | string | Devise du montant. |
| `price_per_kwh` | number | Prix unitaire au kWh. |
| `state` | string | Etat de l'achat. Valeurs : `active` = Actif, `cancelled` = Annule. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact de l'achat. Valeurs : `active`, `cancelled`. |
| `counter_id` | `=` | Identifiant du compteur credite. |
| `environment_id` | `=` | Identifiant du site desservi. |
| `date_after` | `>=` | Achats a partir de cette date (AAAA-MM-JJ). |
| `date_before` | `<=` | Achats jusqu'a cette date. |

### electricity/readings

Releves de compteur et consommation deduite entre deux releves.

- Liste : `GET https://odoo.aeig.bj/api/v1/electricity/readings`
- Detail : `GET https://odoo.aeig.bj/api/v1/electricity/readings/<id>`
- Tri par defaut : `date_reading desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du releve. |
| `counter` | string | Code du compteur releve. |
| `counter_id` | integer | Identifiant du compteur releve. |
| `environment` | string | Site ou environnement desservi. |
| `date_reading` | string | Date et heure du releve. |
| `remaining_kwh` | number | Solde restant releve, en kWh. |
| `consumed_kwh` | number | Consommation depuis le releve precedent, en kWh. |
| `days_elapsed` | number | Nombre de jours ecoules depuis le releve precedent. |
| `daily_consumption` | number | Consommation journaliere moyenne sur l'intervalle, en kWh. |
| `is_excluded_from_avg` | boolean | Vrai si le releve est exclu du calcul des moyennes. |
| `note` | string | Note libre saisie lors du releve. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `counter_id` | `=` | Identifiant du compteur releve. |
| `environment_id` | `=` | Identifiant du site desservi. |
| `date_after` | `>=` | Releves a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `date_before` | `<=` | Releves jusqu'a cette date. |

### events/events

Evenements : dates, salle reservee, jauge et avancement de la checklist.

- Liste : `GET https://odoo.aeig.bj/api/v1/events/events`
- Detail : `GET https://odoo.aeig.bj/api/v1/events/events/<id>`
- Tri par defaut : `date_begin desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de l'evenement. |
| `name` | string | Intitule de l'evenement. |
| `event_type` | string | Modele d'evenement applique. |
| `activity` | string | Nature de l'evenement. |
| `stage` | string | Etape du cycle de vie de l'evenement. |
| `date_begin` | string | Debut de l'evenement. |
| `date_end` | string | Fin de l'evenement. |
| `is_ongoing` | boolean | Vrai si l'evenement est en cours a l'instant de la requete. |
| `space` | string | Espace accueillant l'evenement. |
| `space_id` | integer | Identifiant de l'espace accueillant l'evenement. |
| `reservation_id` | integer | Identifiant de la reservation d'espace associee. |
| `space_capacity` | integer | Capacite de l'espace retenu. |
| `seats_max` | integer | Jauge maximale de l'evenement. |
| `seats_taken` | integer | Nombre de places deja prises. |
| `seats_available` | integer | Nombre de places encore disponibles. |
| `organizer` | string | Organisateur de l'evenement. |
| `responsible` | string | Utilisateur responsable. |
| `referent` | string | Referent designe pour l'evenement. |
| `origin` | string | Canal d'origine de la demande d'evenement. Valeurs : `internal` = Interne, `public` = Formulaire public. |
| `review_state` | string | Etat de la revue de la demande. Valeurs : `approved` = Approuve, `pending` = En attente, `refused` = Refuse. |
| `hidden_public` | boolean | Vrai si l'evenement est masque sur le site public. |
| `checklist_enabled` | boolean | Vrai si une checklist de preparation est activee. |
| `checklist_progress` | number | Avancement de la checklist, en pourcentage. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `stage_id` | `=` | Identifiant de l'etape du cycle de vie. |
| `space_id` | `=` | Identifiant de l'espace accueillant l'evenement. |
| `review_state` | `=` | Etat exact de la revue. Valeurs : `approved`, `pending`, `refused`. |
| `origin` | `=` | Canal d'origine exact. Valeurs : `internal`, `public`. |
| `hidden_public` | `=` | Ne retenir que les evenements masques (true) ou visibles (false). |
| `begin_after` | `>=` | Evenements commencant a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `begin_before` | `<=` | Evenements commencant au plus tard a cette date. |

### events/registrations

Inscriptions aux evenements.

- Liste : `GET https://odoo.aeig.bj/api/v1/events/registrations`
- Detail : `GET https://odoo.aeig.bj/api/v1/events/registrations/<id>`
- Tri par defaut : `id desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de l'inscription. |
| `event_id` | integer | Identifiant de l'evenement. |
| `event` | string | Intitule de l'evenement. |
| `ticket` | string | Categorie de billet retenue. |
| `attendee` | string | Nom du participant. |
| `email` | string | Adresse electronique du participant. |
| `phone` | string | Numero de telephone du participant. |
| `booked_by` | string | Contact ayant effectue la reservation. |
| `state` | string | Etat de l'inscription. Valeurs : `draft` = Unconfirmed, `open` = Registered, `done` = Attended, `cancel` = Cancelled. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `event_id` | `=` | Identifiant de l'evenement. |
| `state` | `=` | Etat exact : draft, open, done, cancel. Valeurs : `draft`, `open`, `done`, `cancel`. |
| `partner_id` | `=` | Identifiant du contact ayant reserve. |
| `email` | `ilike` | Recherche partielle sur l'adresse electronique. |

### events/tasks

Taches de la checklist de preparation d'un evenement.

- Liste : `GET https://odoo.aeig.bj/api/v1/events/tasks`
- Detail : `GET https://odoo.aeig.bj/api/v1/events/tasks/<id>`
- Tri par defaut : `event_id desc, sequence asc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de la tache. |
| `event_id` | integer | Identifiant de l'evenement. |
| `event` | string | Intitule de l'evenement. |
| `name` | string | Intitule de la tache. |
| `done` | boolean | Vrai si la tache est accomplie. |
| `assignee` | string | Utilisateur charge de la tache. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `event_id` | `=` | Identifiant de l'evenement. |
| `done` | `=` | Ne retenir que les taches accomplies (true) ou restantes (false). |
| `assigned_user_id` | `=` | Identifiant de l'utilisateur charge de la tache. |

### fleet/alerts

Alertes d'echeance sur les vehicules : assurance, visite technique, permis.

- Liste : `GET https://odoo.aeig.bj/api/v1/fleet/alerts`
- Detail : `GET https://odoo.aeig.bj/api/v1/fleet/alerts/<id>`
- Tri par defaut : `due_date asc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de l'alerte. |
| `name` | string | Intitule de l'alerte. |
| `vehicle` | string | Vehicule concerne. |
| `vehicle_id` | integer | Identifiant du vehicule concerne. |
| `type` | string | Nature de l'echeance surveillee. Valeurs : `assurance` = Assurance, `controle_technique` = Controle technique, `entretien_km` = Entretien km, `permit` = Permis conducteur, `custom` = Personnalisee. |
| `due_date` | string | Date d'echeance. |
| `state` | string | Etat de traitement de l'alerte. Valeurs : `pending` = En attente, `handled` = Traitee, `late` = En retard. |
| `handled_at` | string | Date et heure de prise en charge. |
| `handled_by` | string | Utilisateur ayant traite l'alerte. |
| `reminder_days` | integer | Nombre de jours de preavis avant echeance. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact de l'alerte. Valeurs : `pending`, `handled`, `late`. |
| `type` | `=` | Nature exacte de l'echeance. Valeurs : `assurance`, `controle_technique`, `entretien_km`, `permit`, `custom`. |
| `vehicle_id` | `=` | Identifiant du vehicule concerne. |
| `due_before` | `<=` | Alertes echeant au plus tard a cette date (AAAA-MM-JJ). |
| `due_after` | `>=` | Alertes echeant a partir de cette date. |

### fleet/fuel-logs

Ravitaillements carburant, avec detection d'anomalie de consommation.

- Liste : `GET https://odoo.aeig.bj/api/v1/fleet/fuel-logs`
- Detail : `GET https://odoo.aeig.bj/api/v1/fleet/fuel-logs/<id>`
- Tri par defaut : `date desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du ravitaillement. |
| `reference` | string | Reference du ravitaillement. |
| `vehicle` | string | Vehicule ravitaille. |
| `vehicle_id` | integer | Identifiant du vehicule ravitaille. |
| `driver` | string | Conducteur ayant effectue le plein. |
| `date` | string | Date et heure du plein. |
| `station` | string | Station ou lieu du ravitaillement. |
| `liters` | number | Volume en litres. |
| `price_per_liter` | number | Prix au litre. |
| `total_amount` | number | Montant total du plein. |
| `currency` | string | Devise du montant. |
| `odometer` | number | Kilometrage au moment du plein. |
| `distance` | number | Distance parcourue depuis le plein precedent, en km. |
| `consumption` | number | Consommation constatee sur l'intervalle, en litres aux 100 km. |
| `is_anomaly` | boolean | Vrai si la consommation s'ecarte anormalement de la moyenne du vehicule. |
| `anomaly_severity` | string | Gravite de l'anomalie detectee. Valeurs : `none` = Aucune, `low` = Faible, `medium` = Moyenne, `high` = Elevee. |
| `anomaly_reason` | string | Explication de l'anomalie detectee. |
| `reviewed` | boolean | Vrai si l'anomalie a ete revue par un gestionnaire. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `vehicle_id` | `=` | Identifiant du vehicule ravitaille. |
| `is_anomaly` | `=` | Ne retenir que les pleins en anomalie (true) ou sains (false). |
| `reviewed` | `=` | Filtre sur le fait que l'anomalie ait ete revue. |
| `date_after` | `>=` | Pleins a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `date_before` | `<=` | Pleins jusqu'a cette date. |

### fleet/incidents

Incidents imputes aux conducteurs, avec gravite et cout d'impact.

- Liste : `GET https://odoo.aeig.bj/api/v1/fleet/incidents`
- Detail : `GET https://odoo.aeig.bj/api/v1/fleet/incidents/<id>`
- Tri par defaut : `date desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de l'incident. |
| `name` | string | Intitule de l'incident. |
| `vehicle` | string | Vehicule concerne. |
| `vehicle_id` | integer | Identifiant du vehicule concerne. |
| `driver` | string | Conducteur mis en cause. |
| `date` | string | Date de l'incident. |
| `severity` | string | Gravite de l'incident. Valeurs : `minor` = Mineur, `moderate` = Modere, `major` = Majeur, `critical` = Critique. |
| `cost` | number | Cout d'impact estime. |
| `currency` | string | Devise du cout. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `vehicle_id` | `=` | Identifiant du vehicule concerne. |
| `driver_id` | `=` | Identifiant du conducteur mis en cause. |
| `severity` | `=` | Gravite exacte. Valeurs : `minor`, `moderate`, `major`, `critical`. |
| `date_after` | `>=` | Incidents a partir de cette date (AAAA-MM-JJ). |
| `date_before` | `<=` | Incidents jusqu'a cette date. |

### fleet/locations

Referentiel des lieux frequents utilises comme point de depart ou destination.

- Liste : `GET https://odoo.aeig.bj/api/v1/fleet/locations`
- Detail : `GET https://odoo.aeig.bj/api/v1/fleet/locations/<id>`
- Tri par defaut : `sequence asc, name asc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du lieu. |
| `name` | string | Nom du lieu. |
| `code` | string | Code court, par exemple SIEGE ou AEROPORT. |
| `address` | string | Adresse postale. |
| `city` | string | Ville. |
| `country` | string | Pays. |
| `latitude` | number | Latitude en degres decimaux. |
| `longitude` | number | Longitude en degres decimaux. |
| `is_default_pickup` | boolean | Vrai si le lieu est le point de prise en charge par defaut. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `code` | `=` | Code court exact. |
| `city` | `ilike` | Recherche partielle sur la ville. |

### fleet/reservations

Demandes de reservation de vehicule et leur cycle de validation.

- Liste : `GET https://odoo.aeig.bj/api/v1/fleet/reservations`
- Detail : `GET https://odoo.aeig.bj/api/v1/fleet/reservations/<id>`
- Tri par defaut : `start desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de la reservation. |
| `reference` | string | Reference de la reservation. |
| `vehicle` | string | Vehicule reserve. |
| `vehicle_id` | integer | Identifiant du vehicule reserve. |
| `driver` | string | Conducteur designe pour la course. |
| `requester` | string | Utilisateur a l'origine de la demande. |
| `start` | string | Debut de la reservation. |
| `stop` | string | Fin de la reservation. |
| `duration` | number | Duree en heures. |
| `motive` | string | Motif declare de la course. |
| `pickup_location` | string | Lieu de prise en charge. |
| `destination` | string | Destination declaree. |
| `expected_km` | number | Distance previsionnelle en km. |
| `attendees_count` | integer | Nombre de passagers attendus. |
| `origin` | string | Canal d'origine de la demande. Valeurs : `internal` = Interne, `public` = Public. |
| `state` | string | Etat du cycle de validation. Valeurs : `draft` = Brouillon, `pending` = En attente, `approved` = Approuvee, `in_progress` = En cours, `done` = Terminee, `refused` = Refusee, `cancelled` = Annulee. |
| `approver` | string | Utilisateur ayant approuve la demande. |
| `approved_at` | string | Date et heure de l'approbation. |
| `refusal_reason` | string | Motif du refus, le cas echeant. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact : draft, pending, approved, in_progress, done, refused, cancelled. Valeurs : `draft`, `pending`, `approved`, `in_progress`, `done`, `refused`, `cancelled`. |
| `vehicle_id` | `=` | Identifiant du vehicule reserve. |
| `driver_id` | `=` | Identifiant du conducteur designe. |
| `start_after` | `>=` | Reservations commencant a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `start_before` | `<=` | Reservations commencant au plus tard a cette date. |

### fleet/services

Entretiens et reparations des vehicules, avec leur cout.

- Liste : `GET https://odoo.aeig.bj/api/v1/fleet/services`
- Detail : `GET https://odoo.aeig.bj/api/v1/fleet/services/<id>`
- Tri par defaut : `date desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de l'entretien. |
| `vehicle` | string | Vehicule entretenu. |
| `vehicle_id` | integer | Identifiant du vehicule entretenu. |
| `date` | string | Date de l'intervention. |
| `description` | string | Description de l'intervention. |
| `service_type` | string | Nature de la prestation. |
| `service_kind` | string | Categorie d'entretien : preventif, curatif, etc. Valeurs : `preventive` = Preventif, `curative` = Curatif. |
| `amount` | number | Cout de l'intervention. |
| `total_cost` | number | Cout total, lignes de detail incluses. |
| `currency` | string | Devise des montants. |
| `odometer` | number | Kilometrage au moment de l'intervention. |
| `next_service_odometer` | number | Kilometrage prevu pour le prochain entretien. |
| `vendor` | string | Prestataire ou garage. |
| `invoice_ref` | string | Reference de la facture fournisseur. |
| `state` | string | Etat de l'intervention. Valeurs : `new` = New, `running` = Running, `done` = Done, `cancelled` = Cancelled. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `vehicle_id` | `=` | Identifiant du vehicule entretenu. |
| `state` | `=` | Etat exact de l'intervention. Valeurs : `new`, `running`, `done`, `cancelled`. |
| `service_kind` | `=` | Categorie d'entretien exacte. Valeurs : `preventive`, `curative`. |
| `date_after` | `>=` | Interventions a partir de cette date (AAAA-MM-JJ). |
| `date_before` | `<=` | Interventions jusqu'a cette date. |

### fleet/trips

Trajets realises : kilometrage reel, destination, imputation analytique.

- Liste : `GET https://odoo.aeig.bj/api/v1/fleet/trips`
- Detail : `GET https://odoo.aeig.bj/api/v1/fleet/trips/<id>`
- Tri par defaut : `date desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du trajet. |
| `reference` | string | Reference du trajet. |
| `reservation_id` | integer | Identifiant de la reservation d'origine, si le trajet en decoule. |
| `vehicle` | string | Vehicule utilise. |
| `vehicle_id` | integer | Identifiant du vehicule utilise. |
| `driver` | string | Conducteur du trajet. |
| `date` | string | Date du trajet. |
| `date_start` | string | Heure de depart. |
| `date_end` | string | Heure d'arrivee. |
| `odometer_start` | number | Kilometrage au depart. |
| `odometer_end` | number | Kilometrage a l'arrivee. |
| `distance` | number | Distance parcourue en km. |
| `motive` | string | Motif du deplacement. |
| `destination` | string | Destination atteinte. |
| `analytic_account` | string | Compte analytique impute. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `vehicle_id` | `=` | Identifiant du vehicule utilise. |
| `driver_id` | `=` | Identifiant du conducteur. |
| `date_after` | `>=` | Trajets a partir de cette date (AAAA-MM-JJ). |
| `date_before` | `<=` | Trajets jusqu'a cette date (AAAA-MM-JJ). |

### fleet/vehicles

Vehicules du parc automobile, avec leurs echeances reglementaires.

- Liste : `GET https://odoo.aeig.bj/api/v1/fleet/vehicles`
- Detail : `GET https://odoo.aeig.bj/api/v1/fleet/vehicles/<id>`
- Tri par defaut : `license_plate asc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du vehicule. |
| `plate` | string | Plaque d'immatriculation. |
| `model` | string | Marque et modele du vehicule. |
| `vin` | string | Numero de chassis (VIN). |
| `driver` | string | Conducteur actuellement affecte. |
| `seats` | integer | Nombre de places assises. |
| `fuel_type` | string | Type de carburant. Valeurs : `diesel` = Diesel, `gasoline` = Gasoline, `full_hybrid` = Full Hybrid, `plug_in_hybrid_diesel` = Plug-in Hybrid Diesel, `plug_in_hybrid_gasoline` = Plug-in Hybrid Gasoline, `cng` = CNG, `lpg` = LPG, `hydrogen` = Hydrogen, `electric` = Electric. |
| `odometer` | number | Dernier kilometrage releve. |
| `state` | string | Etat du vehicule dans le cycle de vie du parc. |
| `assignation_state` | string | Etat d'affectation : disponible, affecte, indisponible. Valeurs : `free` = Disponible, `assigned` = Affecte, `maintenance` = En maintenance, `out_of_service` = Hors service, `sold` = Vendu. |
| `acquisition_date` | string | Date de mise en circulation. |
| `insurance_expiry` | string | Date d'expiration de l'assurance. |
| `technical_control_expiry` | string | Date d'expiration de la visite technique. |
| `next_alert_date` | string | Prochaine echeance a traiter, toutes categories confondues. |
| `avg_consumption` | number | Consommation moyenne constatee, en litres aux 100 km. |
| `total_km_last_year` | number | Distance parcourue sur les douze derniers mois, en km. |
| `company` | string | Societe proprietaire du vehicule. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `assignation_state` | `=` | Filtre sur l'etat d'affectation exact. Valeurs : `free`, `assigned`, `maintenance`, `out_of_service`, `sold`. |
| `driver_id` | `=` | Identifiant du conducteur affecte. |
| `fuel_type` | `=` | Type de carburant exact. Valeurs : `diesel`, `gasoline`, `full_hybrid`, `plug_in_hybrid_diesel`, `plug_in_hybrid_gasoline`, `cng`, `lpg`, `hydrogen`, `electric`. |
| `plate` | `ilike` | Recherche partielle, insensible a la casse, sur la plaque. |
| `insurance_expiry_before` | `<=` | Assurance expirant au plus tard a cette date (AAAA-MM-JJ). |
| `technical_control_expiry_before` | `<=` | Visite technique expirant au plus tard a cette date (AAAA-MM-JJ). |

### it/assets

Materiels du parc informatique, identifies par numero de serie.

- Liste : `GET https://odoo.aeig.bj/api/v1/it/assets`
- Detail : `GET https://odoo.aeig.bj/api/v1/it/assets/<id>`
- Tri par defaut : `name asc`
- Perimetre : seuls les enregistrements verifiant `aeig_in_parc = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du materiel. |
| `serial` | string | Numero de serie du materiel. |
| `internal_ref` | string | Reference interne, si differente du numero constructeur. |
| `product` | string | Modele de materiel. |
| `quantity` | number | Quantite en stock pour ce numero de serie. |
| `location` | string | Emplacement de stockage courant. |
| `holder` | string | Personne detentrice du materiel. |
| `lifecycle` | string | Etape du cycle de vie du materiel. Valeurs : `available` = Disponible, `assigned` = Affecté, `maintenance` = Maintenance, `retired` = Réformé, `external` = Hors parc. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `lifecycle` | `=` | Etape exacte du cycle de vie. Valeurs : `available`, `assigned`, `maintenance`, `retired`, `external`. |
| `holder_id` | `=` | Identifiant de la personne detentrice. |
| `serial` | `ilike` | Recherche partielle sur le numero de serie. |

### it/consumable-moves

Sorties et retours de consommables informatiques.

- Liste : `GET https://odoo.aeig.bj/api/v1/it/consumable-moves`
- Detail : `GET https://odoo.aeig.bj/api/v1/it/consumable-moves/<id>`
- Tri par defaut : `date desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du mouvement. |
| `ticket_id` | integer | Identifiant du ticket a l'origine du mouvement. |
| `ticket_number` | string | Numero du ticket a l'origine du mouvement. |
| `beneficiary` | string | Beneficiaire du consommable. |
| `product` | string | Consommable concerne. |
| `location` | string | Zone de stockage. |
| `quantity` | number | Quantite sortie. |
| `returned_quantity` | number | Quantite retournee. |
| `remaining_quantity` | number | Quantite non retournee. |
| `state` | string | Etat du mouvement. Valeurs : `out` = Sortie, `partial` = Retour partiel, `returned` = Retournée. |
| `date` | string | Date et heure du mouvement. |
| `handled_by` | string | Utilisateur ayant enregistre le mouvement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact du mouvement. Valeurs : `out`, `partial`, `returned`. |
| `partner_id` | `=` | Identifiant du beneficiaire. |
| `product_id` | `=` | Identifiant du consommable. |
| `date_after` | `>=` | Mouvements a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `date_before` | `<=` | Mouvements jusqu'a cette date. |

### it/tickets

Demandes adressees au service informatique et leur avancement.

- Liste : `GET https://odoo.aeig.bj/api/v1/it/tickets`
- Detail : `GET https://odoo.aeig.bj/api/v1/it/tickets/<id>`
- Tri par defaut : `id desc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du ticket. |
| `number` | string | Numero du ticket, visible par le demandeur. |
| `name` | string | Objet de la demande. |
| `category` | string | Categorie de la demande. |
| `type` | string | Type de demande au sein de la categorie. |
| `stage` | string | Etape courante du traitement. |
| `is_closed` | boolean | Vrai si l'etape courante est une etape de cloture. |
| `team` | string | Equipe en charge du ticket. |
| `assignee` | string | Technicien assigne. |
| `requester` | string | Nom du demandeur. |
| `requester_email` | string | Adresse electronique du demandeur. |
| `priority` | string | Priorite du ticket. Valeurs : `0` = Basse, `1` = Normale, `2` = Haute, `3` = Critique. |
| `kanban_state` | string | Indicateur de blocage : en cours, bloque, pret. Valeurs : `normal` = En cours, `done` = Prêt, `blocked` = Bloqué. |
| `validation_state` | string | Etat de la validation hierarchique, si la demande en requiert une. Valeurs : `none` = Non requise, `to_validate` = À valider, `validated` = Validée, `rejected` = Rejetée. |
| `assigned_date` | string | Date et heure d'assignation. |
| `closed_date` | string | Date et heure de cloture. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `is_closed` | `=` | Ne retenir que les tickets clos (true) ou ouverts (false). |
| `team_id` | `=` | Identifiant de l'equipe en charge. |
| `user_id` | `=` | Identifiant du technicien assigne. |
| `priority` | `=` | Priorite exacte. Valeurs : `0`, `1`, `2`, `3`. |
| `validation_state` | `=` | Etat exact de la validation hierarchique. Valeurs : `none`, `to_validate`, `validated`, `rejected`. |
| `number` | `ilike` | Recherche partielle sur le numero de ticket. |

### purchase/order-lines

Lignes de commande fournisseur : articles, quantites et prix unitaires.

- Liste : `GET https://odoo.aeig.bj/api/v1/purchase/order-lines`
- Detail : `GET https://odoo.aeig.bj/api/v1/purchase/order-lines/<id>`
- Tri par defaut : `id desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de la ligne. |
| `order_id` | integer | Identifiant de la commande. |
| `order_reference` | string | Reference de la commande. |
| `description` | string | Libelle de la ligne. |
| `product` | string | Article commande. |
| `product_id` | integer | Identifiant de l'article commande. |
| `quantity` | number | Quantite commandee. |
| `uom` | string | Unite de mesure. |
| `price_unit` | number | Prix unitaire. |
| `price_subtotal` | number | Sous-total hors taxes. |
| `price_total` | number | Total toutes taxes comprises. |
| `currency` | string | Devise des montants. |
| `qty_received` | number | Quantite receptionnee. |
| `qty_invoiced` | number | Quantite facturee. |
| `date_planned` | string | Date de reception prevue pour la ligne. |
| `state` | string | Etat de la commande dont la ligne depend. Valeurs : `draft` = RFQ, `sent` = RFQ Sent, `to approve` = To Approve, `purchase` = Purchase Order, `cancel` = Cancelled. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `order_id` | `=` | Identifiant de la commande. |
| `product_id` | `=` | Identifiant de l'article commande. |
| `state` | `=` | Etat exact de la commande. Valeurs : `draft`, `sent`, `to approve`, `purchase`, `cancel`. |
| `planned_after` | `>=` | Lignes attendues a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `planned_before` | `<=` | Lignes attendues jusqu'a cette date. |

### purchase/orders

Commandes fournisseur : montants, echeances et etat de facturation.

- Liste : `GET https://odoo.aeig.bj/api/v1/purchase/orders`
- Detail : `GET https://odoo.aeig.bj/api/v1/purchase/orders/<id>`
- Tri par defaut : `date_order desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de la commande. |
| `reference` | string | Reference de la commande. |
| `vendor` | string | Fournisseur. |
| `vendor_id` | integer | Identifiant du fournisseur. |
| `vendor_reference` | string | Reference de la commande chez le fournisseur. |
| `origin` | string | Document a l'origine de la commande. |
| `date_order` | string | Date limite de commande. |
| `date_approve` | string | Date de confirmation. |
| `date_planned` | string | Date de reception prevue. |
| `amount_untaxed` | number | Montant hors taxes. |
| `amount_total` | number | Montant toutes taxes comprises. |
| `currency` | string | Devise des montants. |
| `state` | string | Etat de la commande. Valeurs : `draft` = RFQ, `sent` = RFQ Sent, `to approve` = To Approve, `purchase` = Purchase Order, `cancel` = Cancelled. |
| `invoice_status` | string | Etat de facturation de la commande. Valeurs : `no` = Nothing to Bill, `to invoice` = Waiting Bills, `invoiced` = Fully Billed. |
| `buyer` | string | Acheteur en charge. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact : draft, sent, purchase, done, cancel. Valeurs : `draft`, `sent`, `to approve`, `purchase`, `cancel`. |
| `invoice_status` | `=` | Etat de facturation exact. Valeurs : `no`, `to invoice`, `invoiced`. |
| `vendor_id` | `=` | Identifiant du fournisseur. |
| `user_id` | `=` | Identifiant de l'acheteur en charge. |
| `origin` | `ilike` | Recherche partielle sur le document d'origine. |
| `ordered_after` | `>=` | Commandes a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `ordered_before` | `<=` | Commandes jusqu'a cette date. |
| `amount_above` | `>=` | Commandes dont le montant TTC est superieur ou egal a cette valeur. |

### space/activities

Referentiel des natures d'activite pouvant motiver une reservation.

- Liste : `GET https://odoo.aeig.bj/api/v1/space/activities`
- Detail : `GET https://odoo.aeig.bj/api/v1/space/activities/<id>`
- Tri par defaut : `sequence asc, name asc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de l'activite. |
| `name` | string | Nom de l'activite. |
| `code` | string | Code court de l'activite. |
| `default_duration` | number | Duree par defaut proposee, en heures. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `code` | `=` | Code court exact. |
| `name` | `ilike` | Recherche partielle sur le nom. |

### space/categories

Referentiel des categories d'espaces.

- Liste : `GET https://odoo.aeig.bj/api/v1/space/categories`
- Detail : `GET https://odoo.aeig.bj/api/v1/space/categories/<id>`
- Tri par defaut : `sequence asc, name asc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de la categorie. |
| `name` | string | Nom de la categorie. |
| `description` | string | Description de la categorie. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `name` | `ilike` | Recherche partielle sur le nom. |

### space/equipments

Referentiel des equipements installables dans un espace.

- Liste : `GET https://odoo.aeig.bj/api/v1/space/equipments`
- Detail : `GET https://odoo.aeig.bj/api/v1/space/equipments/<id>`
- Tri par defaut : `name asc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de l'equipement. |
| `name` | string | Nom de l'equipement. |
| `code` | string | Code court de l'equipement. |
| `category` | string | Categorie d'equipement. |
| `description` | string | Description de l'equipement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `category_id` | `=` | Identifiant de la categorie d'equipement. |
| `name` | `ilike` | Recherche partielle sur le nom. |

### space/maintenances

Operations de maintenance sur les espaces, bloquantes ou non.

- Liste : `GET https://odoo.aeig.bj/api/v1/space/maintenances`
- Detail : `GET https://odoo.aeig.bj/api/v1/space/maintenances/<id>`
- Tri par defaut : `start desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de la maintenance. |
| `name` | string | Intitule de l'operation. |
| `space` | string | Espace concerne. |
| `space_id` | integer | Identifiant de l'espace concerne. |
| `start` | string | Debut de l'operation. |
| `stop` | string | Fin de l'operation. |
| `state` | string | Etat d'avancement de l'operation. Valeurs : `planned` = Planifiee, `in_progress` = En cours, `done` = Terminee, `cancelled` = Annulee. |
| `category` | string | Categorie de maintenance. Valeurs : `preventive` = Preventive, `curative` = Curative, `cleaning` = Nettoyage, `other` = Autre. |
| `technician` | string | Technicien interne en charge. |
| `external_technician` | string | Prestataire externe en charge. |
| `blocks_reservations` | boolean | Vrai si l'operation empeche toute reservation sur le creneau. |
| `check_progress` | number | Avancement de la checklist, en pourcentage. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact de l'operation. Valeurs : `planned`, `in_progress`, `done`, `cancelled`. |
| `space_id` | `=` | Identifiant de l'espace concerne. |
| `category` | `=` | Categorie de maintenance exacte. Valeurs : `preventive`, `curative`, `cleaning`, `other`. |
| `blocks_reservations` | `=` | Ne retenir que les operations bloquantes (true) ou non (false). |
| `start_after` | `>=` | Operations commencant a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `start_before` | `<=` | Operations commencant au plus tard a cette date. |

### space/reservations

Reservations d'espaces et leur cycle de validation.

- Liste : `GET https://odoo.aeig.bj/api/v1/space/reservations`
- Detail : `GET https://odoo.aeig.bj/api/v1/space/reservations/<id>`
- Tri par defaut : `start desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de la reservation. |
| `reference` | string | Reference de la reservation. |
| `space` | string | Espace reserve. |
| `space_id` | integer | Identifiant de l'espace reserve. |
| `activity` | string | Nature de l'activite prevue. |
| `start` | string | Debut de la reservation. |
| `stop` | string | Fin de la reservation. |
| `duration` | number | Duree en heures. |
| `attendees_expected` | integer | Nombre de participants attendus. |
| `attendees_actual` | integer | Nombre de participants effectivement presents. |
| `requester` | string | Utilisateur a l'origine de la demande. |
| `origin` | string | Canal d'origine de la demande. Valeurs : `internal` = Interne, `public` = Public. |
| `state` | string | Etat du cycle de validation. Valeurs : `pending` = En attente, `approved` = Approuvee, `refused` = Refusee, `cancelled` = Annulee, `done` = Terminee. |
| `approver` | string | Utilisateur ayant approuve la demande. |
| `approved_at` | string | Date et heure de l'approbation. |
| `refusal_reason` | string | Motif du refus, le cas echeant. |
| `cancellation_reason` | string | Motif de l'annulation, le cas echeant. |
| `check_in_at` | string | Heure d'arrivee constatee. |
| `check_out_at` | string | Heure de depart constatee. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact de la reservation. Valeurs : `pending`, `approved`, `refused`, `cancelled`, `done`. |
| `space_id` | `=` | Identifiant de l'espace reserve. |
| `activity_id` | `=` | Identifiant de la nature d'activite. |
| `origin` | `=` | Canal d'origine exact. Valeurs : `internal`, `public`. |
| `start_after` | `>=` | Reservations commencant a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `start_before` | `<=` | Reservations commencant au plus tard a cette date. |

### space/sites

Sites hebergeant les espaces reservables, organises en arborescence.

- Liste : `GET https://odoo.aeig.bj/api/v1/space/sites`
- Detail : `GET https://odoo.aeig.bj/api/v1/space/sites/<id>`
- Tri par defaut : `complete_name asc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du site. |
| `name` | string | Nom du site. |
| `complete_name` | string | Nom complet, chemin hierarchique inclus. |
| `code` | string | Code court du site. |
| `parent_id` | integer | Identifiant du site parent, si le site est un sous-ensemble. |
| `address` | string | Adresse postale du site. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `code` | `=` | Code court exact. |
| `parent_id` | `=` | Identifiant du site parent. |
| `name` | `ilike` | Recherche partielle sur le nom. |

### space/spaces

Espaces reservables : salles, bureaux, capacites et tarifs.

- Liste : `GET https://odoo.aeig.bj/api/v1/space/spaces`
- Detail : `GET https://odoo.aeig.bj/api/v1/space/spaces/<id>`
- Tri par defaut : `sequence asc, name asc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de l'espace. |
| `name` | string | Nom de l'espace. |
| `code` | string | Code court de l'espace. |
| `site` | string | Site hebergeant l'espace. |
| `site_id` | integer | Identifiant du site hebergeant l'espace. |
| `state` | string | Etat de l'espace : disponible, en travaux, ferme. Valeurs : `available` = Disponible, `restricted` = Restreint, `closed` = Ferme. |
| `location` | string | Localisation libre au sein du site. |
| `floor` | string | Etage. |
| `surface` | number | Surface en metres carres. |
| `capacity` | integer | Capacite d'accueil, en nombre de personnes. |
| `hourly_price` | number | Tarif horaire de reference. |
| `currency` | string | Devise du tarif. |
| `categories` | array | Categories auxquelles l'espace appartient. |
| `public_visibility` | string | Niveau de visibilite de l'espace sur le portail public. Valeurs : `private` = Prive, `internal` = Interne, `public` = Public. |
| `approval_required` | boolean | Vrai si toute reservation doit etre approuvee. |
| `min_lead_hours` | integer | Delai minimal de reservation, en heures. |
| `max_lead_days` | integer | Horizon maximal de reservation, en jours. |
| `cancel_deadline_hours` | integer | Delai limite d'annulation, en heures avant le debut. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact de l'espace. Valeurs : `available`, `restricted`, `closed`. |
| `site_id` | `=` | Identifiant du site hebergeant l'espace. |
| `capacity_min` | `>=` | Capacite d'accueil minimale requise. |
| `approval_required` | `=` | Ne retenir que les espaces soumis (true) ou non (false) a approbation. |
| `name` | `ilike` | Recherche partielle sur le nom. |

### stock/pickings

Transferts de stock : receptions, livraisons et mouvements internes.

- Liste : `GET https://odoo.aeig.bj/api/v1/stock/pickings`
- Detail : `GET https://odoo.aeig.bj/api/v1/stock/pickings/<id>`
- Tri par defaut : `scheduled_date desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du transfert. |
| `reference` | string | Reference du transfert. |
| `origin` | string | Document d'origine ayant genere le transfert. |
| `picking_type` | string | Type d'operation : reception, livraison, transfert interne. |
| `partner` | string | Contact associe au transfert. |
| `source_location` | string | Emplacement source. |
| `destination_location` | string | Emplacement de destination. |
| `scheduled_date` | string | Date prevue du transfert. |
| `date_done` | string | Date effective de realisation. |
| `priority` | string | Priorite du transfert. Valeurs : `0` = Normal, `1` = Urgent. |
| `state` | string | Etat du transfert. Valeurs : `draft` = Draft, `waiting` = Waiting Another Operation, `confirmed` = Waiting, `assigned` = Ready, `done` = Done, `cancel` = Cancelled. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact : draft, waiting, confirmed, assigned, done, cancel. Valeurs : `draft`, `waiting`, `confirmed`, `assigned`, `done`, `cancel`. |
| `partner_id` | `=` | Identifiant du contact associe. |
| `origin` | `ilike` | Recherche partielle sur le document d'origine. |
| `scheduled_after` | `>=` | Transferts prevus a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `scheduled_before` | `<=` | Transferts prevus jusqu'a cette date. |

### travel/perdiem-rates

Bareme des per diem par pays et par ville.

- Liste : `GET https://odoo.aeig.bj/api/v1/travel/perdiem-rates`
- Detail : `GET https://odoo.aeig.bj/api/v1/travel/perdiem-rates/<id>`
- Tri par defaut : `id desc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du bareme. |
| `country` | string | Pays couvert par le bareme. |
| `country_id` | integer | Identifiant du pays couvert. |
| `city` | string | Ville couverte, si le bareme est specifique a une ville. |
| `daily_rate` | number | Taux journalier de reference. |
| `currency` | string | Devise du taux. |
| `has_tiers` | boolean | Vrai si le bareme comporte des paliers de duree. |
| `environment` | string | Environnement de bareme. |
| `note` | string | Note explicative sur le bareme. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `country_id` | `=` | Identifiant du pays couvert. |
| `city_id` | `=` | Identifiant de la ville couverte. |
| `environment_id` | `=` | Identifiant de l'environnement de bareme. |
| `has_tiers` | `=` | Ne retenir que les baremes avec (true) ou sans (false) paliers. |

### travel/perdiem-requests

Demandes de per diem : bareme applique, abattements et montant du.

- Liste : `GET https://odoo.aeig.bj/api/v1/travel/perdiem-requests`
- Detail : `GET https://odoo.aeig.bj/api/v1/travel/perdiem-requests/<id>`
- Tri par defaut : `date_debut desc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de la demande. |
| `reference` | string | Reference de la demande. |
| `name` | string | Intitule de la demande. |
| `state` | string | Etat du cycle de validation. Valeurs : `draft` = Brouillon, `pending` = En attente, `approved` = Approuvée, `rejected` = Rejetée, `cancelled` = Annulée. |
| `trip_id` | integer | Identifiant de la mission rattachee. |
| `trip_reference` | string | Reference de la mission rattachee. |
| `traveler` | string | Utilisateur beneficiaire. |
| `mission_object` | string | Objet de la mission. |
| `country` | string | Pays du sejour. |
| `city` | string | Ville du sejour. |
| `date_start` | string | Debut du sejour. |
| `date_end` | string | Fin du sejour. |
| `duration_days` | number | Duree retenue pour le calcul, en jours. |
| `prorata_start` | string | Regle de prorata appliquee au premier jour. Valeurs : `full` = Journée pleine, `half` = Demi-journée, `none` = Aucun. |
| `prorata_end` | string | Regle de prorata appliquee au dernier jour. Valeurs : `full` = Journée pleine, `half` = Demi-journée, `none` = Aucun. |
| `calc_model` | string | Modele de calcul retenu. Valeurs : `flat_with_abatement` = Taux + abattement, `tiered` = Grille à paliers. |
| `daily_rate` | number | Taux journalier applique. |
| `rate_id` | integer | Identifiant du bareme applique. |
| `duration_abatement_pct` | number | Abattement de duree applique, en pourcentage. |
| `duration_abatement_amount` | number | Montant de l'abattement de duree. |
| `total_amount` | number | Montant total du. |
| `financing_type` | string | Mode de financement de la demande. Valeurs : `aeig` = AEIG uniquement, `partner` = Partenaire uniquement, `mixed` = Mixte AEIG / partenaire. |
| `partner` | string | Partenaire cofinanceur, le cas echeant. |
| `partner_share_pct` | number | Part du partenaire, en pourcentage. |
| `amount_company` | number | Part a la charge de la societe. |
| `amount_partner` | number | Part a la charge du partenaire. |
| `currency` | string | Devise des montants. |
| `environment` | string | Environnement de bareme applique. |
| `validator` | string | Utilisateur validateur. |
| `submit_date` | string | Date et heure de soumission. |
| `approve_date` | string | Date et heure d'approbation. |
| `reject_date` | string | Date et heure de rejet. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact de la demande. Valeurs : `draft`, `pending`, `approved`, `rejected`, `cancelled`. |
| `trip_id` | `=` | Identifiant de la mission rattachee. |
| `traveler_user_id` | `=` | Identifiant de l'utilisateur beneficiaire. |
| `country_id` | `=` | Identifiant du pays du sejour. |
| `financing_type` | `=` | Mode de financement exact. Valeurs : `aeig`, `partner`, `mixed`. |
| `start_after` | `>=` | Sejours commencant a partir de cette date (AAAA-MM-JJ). |
| `start_before` | `<=` | Sejours commencant au plus tard a cette date. |

### travel/trip-expenses

Frais rattaches a une mission, hors per diem.

- Liste : `GET https://odoo.aeig.bj/api/v1/travel/trip-expenses`
- Detail : `GET https://odoo.aeig.bj/api/v1/travel/trip-expenses/<id>`
- Tri par defaut : `id desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du frais. |
| `name` | string | Intitule du frais. |
| `trip_id` | integer | Identifiant de la mission rattachee. |
| `trip_reference` | string | Reference de la mission rattachee. |
| `cost` | number | Montant du frais. |
| `currency` | string | Devise du montant. |
| `notes` | string | Note libre sur le frais. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `trip_id` | `=` | Identifiant de la mission rattachee. |
| `cost_above` | `>=` | Frais dont le montant est superieur ou egal a cette valeur. |

### travel/trip-stages

Etapes d'une mission : trajets successifs, aller et retour.

- Liste : `GET https://odoo.aeig.bj/api/v1/travel/trip-stages`
- Detail : `GET https://odoo.aeig.bj/api/v1/travel/trip-stages/<id>`
- Tri par defaut : `trip_id desc, sequence asc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de l'etape. |
| `name` | string | Intitule de l'etape. |
| `trip_id` | integer | Identifiant de la mission a laquelle l'etape appartient. |
| `trip_reference` | string | Reference de la mission. |
| `position` | integer | Rang de l'etape dans la mission. |
| `is_return_leg` | boolean | Vrai si l'etape constitue le trajet de retour. |
| `city_from` | string | Ville de depart de l'etape. |
| `country_from` | string | Pays de depart de l'etape. |
| `city_to` | string | Ville d'arrivee de l'etape. |
| `country_to` | string | Pays d'arrivee de l'etape. |
| `date_from` | string | Debut de l'etape. |
| `date_to` | string | Fin de l'etape. |
| `duration_days` | integer | Duree de l'etape, en jours. |
| `has_transport` | boolean | Vrai si un transport est prevu sur cette etape. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `trip_id` | `=` | Identifiant de la mission. |
| `is_return_leg` | `=` | Ne retenir que les trajets retour (true) ou aller (false). |
| `country_to_id` | `=` | Identifiant du pays d'arrivee. |
| `date_after` | `>=` | Etapes commencant a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `date_before` | `<=` | Etapes commencant au plus tard a cette date. |

### travel/trip-types

Referentiel des types de mission.

- Liste : `GET https://odoo.aeig.bj/api/v1/travel/trip-types`
- Detail : `GET https://odoo.aeig.bj/api/v1/travel/trip-types/<id>`
- Tri par defaut : `sequence asc, name asc`
- Perimetre : seuls les enregistrements verifiant `active = True` sont exposes.

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo du type. |
| `name` | string | Nom du type de mission. |
| `code` | string | Code court du type. |
| `description` | string | Description du type de mission. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `code` | `=` | Code court exact. |
| `name` | `ilike` | Recherche partielle sur le nom. |

### travel/trips

Missions et deplacements : trajet, dates et cout complet.

- Liste : `GET https://odoo.aeig.bj/api/v1/travel/trips`
- Detail : `GET https://odoo.aeig.bj/api/v1/travel/trips/<id>`
- Tri par defaut : `date_start desc`

Champs :

| Champ | Type | Description |
| --- | --- | --- |
| `id` | integer | Identifiant technique Odoo de la mission. |
| `reference` | string | Reference de la mission. |
| `name` | string | Intitule de la mission. |
| `state` | string | Etat du cycle de validation. Valeurs : `draft` = Brouillon, `pending` = En attente validation, `planned` = Planifié, `in_progress` = En cours, `done` = Terminé, `cancelled` = Annulé. |
| `traveler` | string | Utilisateur voyageur. |
| `traveler_name` | string | Nom du voyageur tel que declare. |
| `traveler_email` | string | Adresse electronique du voyageur. |
| `trip_type` | string | Type de mission. |
| `description` | string | Objet de la mission. |
| `city_departure` | string | Ville de depart. |
| `country_departure` | string | Pays de depart. |
| `city_destination` | string | Ville de destination. |
| `country_destination` | string | Pays de destination. |
| `date_submission` | string | Date de soumission de la demande. |
| `date_start` | string | Debut de la mission. |
| `date_end` | string | Fin de la mission. |
| `duration_days` | integer | Duree de la mission, en jours. |
| `transport_cost` | number | Cout du transport. |
| `accommodation_cost_total` | number | Cout total de l'hebergement. |
| `per_diem_total` | number | Montant total des per diem. |
| `insurance_premium` | number | Prime d'assurance voyage. |
| `currency` | string | Devise des montants. |
| `has_per_diem` | boolean | Vrai si la mission ouvre droit a un per diem. |
| `has_return_stage` | boolean | Vrai si une etape de retour est prevue. |
| `company` | string | Societe de rattachement. |

Filtres :

| Parametre | Operateur | Description |
| --- | --- | --- |
| `state` | `=` | Etat exact de la mission. Valeurs : `draft`, `pending`, `planned`, `in_progress`, `done`, `cancelled`. |
| `traveler_id` | `=` | Identifiant de l'utilisateur voyageur. |
| `trip_type_id` | `=` | Identifiant du type de mission. |
| `country_destination_id` | `=` | Identifiant du pays de destination. |
| `has_per_diem` | `=` | Ne retenir que les missions avec (true) ou sans (false) per diem. |
| `start_after` | `>=` | Missions commencant a partir de cette date (AAAA-MM-JJ ou ISO 8601). |
| `start_before` | `<=` | Missions commencant au plus tard a cette date. |

## Ce que cette API ne fait pas

- Aucune ecriture : ni POST, ni PUT, ni PATCH, ni DELETE. Une tentative d'ecriture par un autre canal avec la meme cle est refusee au niveau des droits Odoo, pas seulement au niveau des routes.
- Aucun champ hors de la liste blanche ci-dessus n'est accessible, meme s'il existe sur le modele Odoo sous-jacent.
- Aucune donnee d'un module absent de cette page n'est exposee.
