# Reflexion évolution activation
## PdlActivation (ex SSR "oneShot")
Permet de suivre 1 activation d'un "site", du tout début de l'activation, jusqu'à la fin de la désactivation.
Ainsi PdlActivation est un objet très technique par opposition à l'objet Contrat.
Dates du Contrat => volonté de d'activer ou pas
Dates du PdlActivation => dates réèlles
Dans la mesure ou on pourrait avoir n PdlActivation avec n Contrats, il est nécéssaire de séparer ces objets.
### PdlActivation.statut
En cas d'erreur à n'importe quelle étape, on revient au départ et la raison et origine de l'erreur est dans "errors".
```mermaid
stateDiagram
[*] --> readyToRequestSwitch
readyToRequestSwitch --> switchPending: switch-ok
readyToRequestSwitch --> switchFailed: switch-ko
readyToRequestSwitch --> abandonned: abandon-in-frontend
switchPending --> switchDone: checkSwitchAffaire-ok
switchPending --> switchFailed: checkSwitchAffaire-ko
switchFailed --> switchPending: switch-in-frontend
switchFailed --> abandonned: abandon-in-frontend
switchDone --> outed
switchDone --> kickedOut
switchDone --> stolen
stolen --> outed : stolen-acté
stolen --> [*] : newPdlActivation
```
Les status outed, stolen, kickedOut sont finaux.
- outed: RIC (resil initative client) ou CFN tierce dans les temps
- stolen : CFN trop tôt (cf DPContract)
- kickedOut : RIF (resil initiative fournisseur)
### Champs
#### Site
- Site.activation
- Site.activationHumanCheck
- Lors de la création "needed" pour tous les sites, sauf C5 où "unneeded"
- needed => check fail avec erreur need-Human-check
- unneeded => création du PdlActivation au moment du passage en unneeded
- checked => création du PdlActivation au moment du passage en checked
- abandonned
- Site.CurrentPdlActivation(): lien vers le PdlActivation en cours
#### PdlActivation
- PdlActivation.statut
- PdlActivation.statusUpdatedAt
- PdlActivation.statusErrorCategory (erreur dans checkTech, switch ou checkSwitchAffaire)
- PdlActivation.statusErrors (cf gestion des erreurs dans Invoice)
- PdlActivation.Site
- PdlActivation.realActivationDate
- PdlActivation.realDeactivationDate
```mermaid
classDiagram
PdlActivation --> Site
Site --* PdlActivation: PdlActivation "en cours"
PdlActivation : id_site
DPContract --> DeliveryPeriod
DeliveryPeriod --> Site
DeliveryPeriod : id_site
Site: humanCheckFlag
PdlActivation: statut
PdlActivation: statusUpdatedAt
PdlActivation: errors
PdlActivation: realActivationDate
PdlActivation: realDeactivationDate
PdlActivation: affaireId
PdlActivation: requestData
PdlActivation: responseData
DPContract: start
DPContract: end
```
Règle: il ne peut y avoir qu'1 seul PdlActivation "en cours" par Site
### Paramètres:
- delai_demande_activation correspond à
- MES:
- C2-C4: 10 jours avant Contrat.start
- C5: 10 jours avant Contrat.start
- CFN:
- C2-C4: 30 jours avant Contrat.start
- C5: 30 jours avant Contrat.start
- delai_creation_pdc_activation: 10j (= on créé le PdlActivation 10j avant date_prevue_activation)
### Règles création du PdlActivation
- comment détecter le fait qu'il faille créer une PdlActivation ?
- site non activé (champs Site.activation == 'none')
- ET date_jour >= Contrat.start - (delai_demande_activation + delai_creation_pdc_activation)
- ET
- PdlActivation non existante pour ce Site (PdlActivation.id_site)
### Actions / Commandes
- checkPdlActivationAffaire
- màj des statuts des affaires d'activation sur SGE
- switchPdlActivation
- lance l'activation
- techCheckSiteForPdlActivation
### GUI
- écran qui affiche la liste des Site qui démarrent dans moins de x jours
- 1 bouton par site pour passer en abandonned le humanCheck
- 1 bouton qui, pour chaque site,
- fait checkTech
- valide le human check
- créé la PdlActivation
(équivalenr commande techCheckSiteForPdlActivation)
- écran qui affiche
- les PdlActivation "readyToRequestSwitch" + date d'activation dans `delai_demande_activation`
- et les PdlActivation en erreur
- 1 bouton switch pour tout l'écran
(équivalent commande switchPdlActivation)
- filtre par PdlActivation.statusErrorCategory
- bouton+input pour renseigner le numéro d'affaire et màj statut (switchPending) pour les cas d'activation manuelle
- bouton "abandon"
- écran qui affiche les PdlActivation "switchPending"
- 1 bouton checkAffaire
(équivalent commande checkPdlActivationAffaire)
- écran qui affiche les PdlActivation "stolen"
- 1 bouton qui créé un nouveau PdlActivation
- 1 bouton qui passe le statut en "outed"
----------------------
## dans le check FluxX
dans le FluxX: mettre à jour active_grdf_contract
Site.activation (actuellement)
```mermaid
stateDiagram
[*] --> none
none --> pending: activation en cours
pending --> GRDFxxx: checkPresenceVsDp
GRDFxxx --> outed
```
cas possible de sortie de périmètre
- fin de contrat normal et un autre Fournisseur a pris le PRM
- fin de contrat dépassée et un autre Fournisseur
| Contract.End ? | qui a sorti | PdlActivation.status |
| ----------------- | -------------------- | -------------------- |
| arrivé ou dépassé | S/O (sans objet) | outed |
| futur | autre (activation) | stolen |
| futur | nous (désactivation) | kickedOut |
Comment gérer la schizophrénie VE/VES (VE vs autre / X12 vs X13) ??? Cas finalement expceptionnels ?? Cela demanderait une vision "globale" qu'on ne peut pas avoir dans le check FluxX qui lui ne voit de fait, que le fluxX analysé en cours.
Il faudrait poser le caser et imaginer ce qu'il se passerait
-----------------------------
- request_data (json_array du SSR)
- les données sont cherchées où elles sont:
- PRM: Site.prm
- date activation: ==Contrat.start==
- depuis SGE
- adresse de livraison
- Si CFN:
- tarif_turpe: depuis SGE (ISO)
- PS+unit: depuis SGE (ISO)
- Si MES:
- récupérer les PS sur Site.p_XXX (configuré par user)
- récupérer le tarif: (configuré par user)
- BTINF: déduire du calendrier fournisseur
- BTSUP/HTA: prendre dans Site.Tarif (prévoir l'édition du tarif)
- si_contractuel (Disco/Gingko)
- is_communicating
- Contact: contact "technique" ou sinon "administratif" ou sinon, le 1er
- NAF+activity: Site.naf
- RaisonSociale: Site.name
=> il faut pouvoir les chercher juste avant la création du PdlActivation, mais aussi avant le switch
- calendrier fournisseur
- prévoir une table dédiée
- lier cette table au Site
- calendrier_fournisseur
- id
- libelle (Heures Pleines/Creuses Saison Haute/Basse)
- code (FC000193)
- contrat_grdf (GRD-F038)
- domaine_tension (BTINF, BTSUP, HTA)
- id_default_tarif_turpe (lien vers TarifTurpe)
=> cela remplacera la config dans parameters.yml
```yml
calendrier_fournisseur:
BTINF:
base: 'FC000057'
hphc: 'FC000058'
```