---
# System prepended metadata

title: Modifications des preuves à posteriori
tags: [Mode d'emploi]

---

---
tags: Mode d'emploi
---

# Modifications des preuves à posteriori

Ce document traite de la question des **modifications ou invalidations** de preuve à posteriori de son envoi.

Le principal problème de cette fonctionnalité est qu'elle a des impacts sur plusieurs autres systèmes : 
- le moteur d'incitation ;
- l'édition d'attestation ;
- le moteur de détection d'anomalie.

Idéalement, il faudrait que les modifications se fassent dans le laps de temps autorisé par le registre de preuve de covoiturage ([5 jours](https://registre-preuve-de-covoiturage.gitbook.io/produit/mode-demploi/envoyer-des-trajets#quel-est-le-delai-denvoi-des-preuves-de-covoiturage)) actuellement. Comme cela ne correspond pas au besoin des opérateurs, il faut proposer des solutions alternatives.

## Impacts
### Incitations
Sur le moteur d'incitation, actuellement, on fonctionne en "flux tendu", un trajet est envoyé pour être processé 5 jours après sa réalisation (un trajet du 11 est processé le 16). Si on fait le calcul, le résultat va : 
- être accessible par les AOM ;
- être accessible par les opérateurs - notamment ceux qui n'ont pas de moteur de calcul en interne ;

On ne peut pas modifier ce résultat puisqu'il est public. Si on a un trajet qui est invalidé par la suite, cela peut avoir un impact sur l'ensemble des calculs d'incitation qui suivent : 
- problème de plafond de trajet par jour ;
- problème de plafond de budget ;
- etc.

### Attestations
De manière analogue, l'édition d'attestation est une photographie a un instant T, difficile de l'éditer sachant qu'un trajet pourrait être invalidé par la suite.

### Anomalies & Fraudes
Sur le moteur de détection d'anomalie, l'impact est limité : on peut refaire passer les calculs. Par contre, lorsque le moteur de détection d'anomalie impacte le moteur d'incitation, alors, on a le même problème que pour celui-ci.

## Pistes de travail
Pour essayer de trouver une solution qui convienne, il faut : 
- permettre d'invalider un trajet dans un laps de temps qui suit son envoie ;
- que l'intégrité du résultat des calculs d'inciation/ de fraude sont conservées.

La solution que nous proposons est de décaler l'application des 3 systèmes dépendants de l'acquisition à la fin de la période sur laquelle les trajets peuvent être modifiés/supprimés. L'impact concret est donc un décalage plus important qu'actuellement entre la date du trajet et son traitement.

### Période
Sur ce décalage, deux possibilités : 
- soit on est sur un nombre de jour glissant - par ex 30 jours ;
- soit on est sur une période fixe - par ex, chaque mois.

Pour permettre aux AOMs d'avoir des chiffres - bien que non "réel" - on peut faire un mix entre le système actuel de traitement à J+5 (draft) et un calcul **complet** en fin de période. Les première données ne servant finalement qu'à des fins d'affichage.

### Scope (modification vs invalidations)
Concernant le scope, deux possibilités : 
- modification des trajets à posteriori ;
- invalidation des trajets à posteriori.

Il semble que la modification des trajets à posteriori revienne à modifier la période à laquelle les opérateurs doivent envoyer les trajets. Par ailleurs, les effets de bords potentiels sont à mesurer. **C'est pourquoi, dans un premier temps, nous proposons de nous limiter à l'invalidation**. 

## Synthèse
Mise en place d'une période de calcul (exemple, J+X, la périodicité est à discuter voir ci-avant) : 
- Envoie des trajets par les opérateur, via API, à J+5 au plus tard ;
- Traitement de ces données pour incitation à J+5 en version "draft". Ces données sont accessibles par les AOMs pour prévisualiser leurs incitations ;
- Lancement du traitement fraude à J+X ;
- Lancement des calculs d'incitation à J+X (après la fraude) ;
- Ouverture des points d'API "attestation" à J+X ;

## Endpoints
### Endpoint d'invalidation d'un trajet
- DELETE /journeys/{journey_id}
Request :
```json
{
    code: 1,
    message: "Too many trip in period"
}
```

Response :
- OK
    - code 204
    - pas de body
- Not found
    - 404
- Hors délais
    - 403

---
---

### Endpoint d'information sur un trajet
- GET /journeys/{journey_id}
Response 
- OK 200
- Not Found 404 (mm si journey_id d'un autre opé)

```json
{
    journey_id: "",
    status: "accepted",
    error: {},
    result: {},
}
```

Status possible =
```js
const status = [
  "waiting_normalization", // received, waiting for processing 
  "acquisition_error", // received but not saved due to acquisition error
  "normalization_error", // processing error
  "waiting_fraudcheck"  // processed, waiting for fraudcheck
  "fraudcheck_error", // fraudcheck detected
  "canceled", // cancelled by operator
  "ok", // evrything is ok :)
]
```
## Retours du webinaire
Les opérateurs en présence n'ont pas utilisé de VETO. Les propositions faites semblent être acceptées par tous. 

Proposition des opérateurs : standardiser les retours d’erreurs.

Du point de vue technique les règles sont divisées en deux catégories : 
* Règles basiques.
* Règles avec états.

Chronologie : 
- Envoie des trajets par les opérateur, via API, à J+5 au plus tard ;
- Traitement de ces données pour incitation à J+5 en version "draft" avec des règles basiques. Ces données sont accessibles par les AOMs pour prévisualiser leurs incitations ;
- Lancement du traitement fraude à J+X ;
- Itération des calculs d'incitation (règles avec états) le 6 de chaque mois sur les données du mois précédent ;
    - Opération 1 : annulation des incitations sur les trajets annulés ;
    * Opération 2 : application des limites (exemple : 10 trajets / mois) ; 
    * Opération 3 : restriction externe (exemple : priorisation des campagnes).
- Ouverture des points d'API "attestation" à J+X.
