---
tags: 🗑️ Corbeille
---
# IRT System X
XP lancée à partir du lundi 27 janvier
OVX + RidyGo
15 équipages ~ sur la période d'XP
RidyGo veut être sur la prod pour l'XP (pas liés au 8 janvier).
Envoie des preuves fonctionne sur l'acquisition mais après ne passe pas jusqu'au front.
IRT donne un operator_journey_id aux opérateurs qui gardent leur partie de la preuve
besoin : pouvoir envoyer des 1/2 preuves qui sont consolidées chez nous
envoie de la preuve complète une fois que c'est fait (chaque opérateur envoie sa partie)
> faire un proto pour faire le tampon d'acquisition qui renvoie vers le pipeline normal à posteriori.
mm operator_journey_id
! modifs de schemas
- concatenation des niveaux de preuve (B+B=C)
- operator_id dans le passager et le conducteur
- Créer un opérateur temporaire pour l'expérimentation pour ne pas casser le schema actuel.
- nom de l'opérateur consolidé : nom de l'XP créé pour l'occasion
- politique de la campagne configurée par Margot. >> passer l'enveloppe à 1000 points
- vues SQL pour le reporting de l'XP. Pas faire de développement spé pour ça.
> Note : afficher une modale d'infos pour les opérateurs pour qu'ils modifient leur visibilité opérateur.
> Issue : changer le rôle d'un utilisateur
TODO
- partager l'email de Gilles.
- ajouter les schemas existants et les modifier ici pour ce cas d'usage
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Journey Schema V2 - Proto LyonXP IRT SystemX + OVX + RidyGo",
"$id": "rpc.journey.v2",
"definitions": {
"macros": {
"varchar": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"longchar": {
"type": "string",
"minLength": 1,
"maxLength": 511
},
"email": {
"type": "string",
"format": "email",
"minLength": 5,
"maxLength": 256
},
"phone": {
"type": "string",
"format": "phone",
"minLength": 10,
"maxLength": 15
},
"phone_trunc": {
"type": "string",
"minLength": 8,
"maxLength": 15
},
"timestamp": {
"type": "string",
"format": "date-time"
},
"lat": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"lon": {
"type": "number",
"minimum": -180,
"maximum": 180
},
"insee": {
"type": "string",
"format": "insee",
"minLength": 5,
"maxLength": 5
},
"siret": {
"type": "string",
"format": "siret",
"minLength": 14,
"maxLength": 14
}
},
"travelpass": {
"type": "object",
"minProperties": 2,
"additionalProperties": false,
"properties": {
"name": {
"enum": ["navigo"]
},
"user_id": {
"$ref": "#/definitions/macros/varchar"
}
}
},
"identity": {
"type": "object",
"anyOf": [
{"required": ["phone"]},
{"required": ["operator_user_id", "phone_trunc"]}
],
"additionalProperties": false,
"properties": {
"firstname": {
"$ref": "#/definitions/macros/varchar"
},
"lastname": {
"$ref": "#/definitions/macros/varchar"
},
"email": {
"$ref": "#/definitions/macros/email"
},
"phone": {
"$ref": "#/definitions/macros/phone"
},
"phone_trunc": {
"$ref": "#/definitions/macros/phone_trunc"
},
"operator_user_id": {
"$ref": "#/definitions/macros/varchar"
},
"company": {
"$ref": "#/definitions/macros/varchar"
},
"over_18": {
"enum": [true, false, null],
"default": null
},
"travel_pass": { "$ref": "#/definitions/travelpass" }
}
},
"position": {
"type": "object",
"required": ["datetime"],
"additionalProperties": false,
"minProperties": 2,
"dependencies": {
"lat": ["lon"],
"lon": ["lat"],
"country": ["literal"]
},
"properties": {
"datetime": {
"$ref": "#/definitions/macros/timestamp"
},
"lat": {
"$ref": "#/definitions/macros/lat"
},
"lon": {
"$ref": "#/definitions/macros/lon"
},
"insee": {
"$ref": "#/definitions/macros/insee"
},
"country": {
"$ref": "#/definitions/macros/varchar"
},
"literal": {
"$ref": "#/definitions/macros/longchar"
}
}
},
"incentive": {
"type": "object",
"required": ["index", "siret", "amount"],
"additionalProperties": false,
"properties": {
"index": {
"type": "integer",
"minimum": 0
},
"siret": {
"$ref": "#/definitions/macros/siret"
},
"amount": {
"type": "number",
"minimum": 0,
"maximum": 20000
}
}
},
"payment": {
"type": "object",
"required": ["pass", "amount"],
"additionalProperties": false,
"properties": {
"index": {
"type": "integer",
"minimum": 0,
"maximum": 42
},
"siret": {
"$ref": "#/definitions/macros/siret"
},
"type": {
"$ref": "#/definitions/macros/varchar"
},
"amount": {
"type": "integer",
"minimum": 0,
"maximum": 100000
}
}
},
"passenger": {
"type": "object",
"required": ["identity", "start", "end", "contribution", "incentives"],
"additionalProperties": false,
"properties": {
// TODO ajouter operator_id, operator_class
"identity": { "$ref": "#/definitions/identity" },
"start": { "$ref": "#/definitions/position" },
"end": { "$ref": "#/definitions/position" },
"seats": {
"type": "integer",
"default": 1,
"minimum": 1,
"maximum": 8
},
"contribution": {
"type": "integer",
"minimum": 0,
"maximum": 1000000,
"$comment": "Montant après que toutes les incitations aient été attribuées"
},
"incentives": {
"type": "array",
"minItems": 0,
"items": { "$ref": "#/definitions/incentive" }
},
"payments": {
"type": "array",
"minItems": 0,
"items": { "$ref": "#/definitions/payment" }
},
"distance": {
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"duration": {
"type": "integer",
"minimum": 0,
"maximum": 86400
}
}
},
"driver": {
"type": "object",
"required": ["identity", "start", "end", "revenue", "incentives"],
"additionalProperties": false,
"properties": {
// TODO ajouter operator_id, operator_class
"identity": { "$ref": "#/definitions/identity" },
"start": { "$ref": "#/definitions/position" },
"end": { "$ref": "#/definitions/position" },
"revenue": {
"type": "integer",
"minimum": 0,
"maximum": 1000000,
"$comment": "Montant perçu après que toutes les incitations et contributions des passagers aient été attribuées"
},
"incentives": {
"type": "array",
"minItems": 0,
"maxItems": 20,
"items": { "$ref": "#/definitions/incentive" }
},
"payments": {
"type": "array",
"minItems": 0,
"items": { "$ref": "#/definitions/payment" }
},
"distance": {
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"duration": {
"type": "integer",
"minimum": 0,
"maximum": 86400
}
}
}
},
"type": "object",
"required": ["journey_id", "operator_class"],
"anyOf": [
{"required": ["passenger"]},
{"required": ["driver"]}
],
"additionalProperties": false,
"properties": {
"journey_id": {
"$ref": "#/definitions/macros/varchar"
},
"operator_journey_id": {
"$ref": "#/definitions/macros/varchar"
},
"operator_class": {
"enum": ["A", "B", "C"] // TODO déplacer dans passenger et driver
},
"passenger": { "$ref": "#/definitions/passenger" },
"driver": { "$ref": "#/definitions/driver" }
}
}
```