---
# System prepended metadata

title: Notes recette Platine

---

# Moog

**Rmq :** uniquement des appels à l'api platine-pilotage

- vérifier globalement les différences fonctionnelles entre les profils gestion/assistance
- vérifier la liste des campagnes disponibles
    - endpoint : **GET** /api/moog/campaigns
- recherche enquêté
    - rechercher un enquêté XXX
        - endpoint : **GET** /api/moog/campaigns/survey-units (appelé à chaque saisie de caractère à partir de 3)
    - vérifier le multipage (25 UE max par page)
        - endpoint : **GET** /api/moog/campaigns/survey-units (appelé à chaque changement de page)
    - rechercher selon les différentes colonnes (cf. doc Moog)
        - tester le cas où le croisement idContact x idUE est mobilisé pour plusieurs campagnes
        - tester le cas où un idContact est mobilisé pour plusieurs idUE de la même campagne
        - tester le cas où un idContact est mobilisé pour plusieurs idUE de différentes campagnes
    - consulter les événements d'un enquêté (refus, ...)
        - endpoint : **GET** /api/moog/campaigns/{campaign}/survey-units/{id}/management-monitoring-infos
    - ajouter des événements à un enquêté (refus, ...)
        - endpoint : **POST** /api/moog/campaigns/{idCampaign}/uploads
        - tester le cas où le croisement idContact x idUE est mobilisé pour plusieurs campagnes : ajouter des événements sur les différentes lignes
        - tester le cas où un idContact est mobilisé pour plusieurs idUE de la même campagne : ajouter des événements sur les différentes lignes
        - tester le cas où un idContact est mobilisé pour plusieurs idUE de différentes campagnes
        - vérifier qu'il est impossible d'ajouter un événement si la campagne est en dehors des dates de collecte
        => + vérifier l'apparition des événements qui remontent automatiquement (INITLA, PND, PARTIELINT, VALINT, RELANCE) avec les cas complexes cités précédemment
    - supprimer un événement
        - endpoint : DELETE /api/moog/uploads/{id}
    - accéder au site miroir de collecte : accès au bon questionnaire, en lecture seule
        - tester le cas où un idContact est mobilisé pour plusieurs idUE de la même campagne
        - tester le cas où le croisement idContact x idUE est mobilisé pour plusieurs campagnes => pas encore possible, à rajouter quand l'api Queen le permettra
        - tester le cas où un idContact est mobilisé pour plusieurs idUE de différentes campagnes
        - vérifier la possibilité de télécharger la preuve de dépôt pour un questionnaire validé
    - consultation du mail d'un enquêté
        - endpoint : **GET** /api/moog/contact/{id}/mail
    - reinit mdp : vérifier l'url de renvoi vers le formulaire de reinit
- sélection d'une campagne : apparition des boutons vers les fonctionnalités propres à la campagne
- enregistrement d'événement de masse
    - endpoint : **POST** /api/moog/campaigns/{idCampaign}/uploads
    - affichage du libellé de la campagne sélectionnée
    - absence bouton + message si la campagne est en dehors des dates de collecte
    - tester format de fichier incorrect (casse, nommage des colonnes, statuts impossibles...)
    - tester les différents statuts possibles
    - tester 1 vs plusieurs événements
    - tester d'ajouter plusieurs événéments pour le même idContact x idUE
    - tester l'ajout d'événement sur une UE inconnue (croisement idContact x idUE inconnu pour cette campagne)
    - tester le cas où un idContact est mobilisé pour plusieurs idUE de la même campagne
    - tester le cas où le croisement idContact x idUE est mobilisé pour plusieurs campagnes
- suivi de collecte
    - affichage du libellé de la campagne sélectionnée
    - tableau d'avancement : 
        - endpoint : **GET** /api/moog/campaigns/{idCampaign}/monitoring/progress
        - affichage de toutes les partitions
        - vérifier les comptages selon les événements ajoutés, et en tenant compte des règles de priorisation, cf. doc Moog
    - tableau des relances :
        - endpoint : **GET** /api/moog/campaigns/{idCampaign}/monitoring/follow-up 
        - message en l'absence de relance
        - affichage de toutes les relances et partitions
        - vérifier comptages selon relances effectuées
        => attention sur le fonctionnement de ce tableau pour les comptages : si je relance l'UE A, puis plus tard je relance les UE A+B, dans le tableau la 1e relance comptera les 2 UE et la 2e relance ne comptera que l'UE A
- relancer des enquêtés
    - endpoint : **GET** /api/moog/campaigns/{idCampaign}/survey-units/follow-up
    - affichage du libellé de la campagne sélectionnée
    - absence bouton + message si la campagne est en dehors des dates de collecte
    - vérifier la liste des UE présentes dans l'extraction
        - tester le cas où un idContact est mobilisé pour plusieurs idUE de la même campagne
        - tester le cas où le croisement idContact x idUE est mobilisé pour plusieurs campagnes
    - vérifier l'indicatrice de PND
- consultation d'archives
    - affichage des archives
        - endpoint : **GET** /api/moog/campaigns/{idCampaign}/uploads
    - suppression d'une archive
        - endpoint : **DELETE** /api/moog/uploads/{id}
        - archive créée par un upload unitaire (depuis la recherche d'enquêté) : vérifier suppression de l'événement
        - archive créée par un upload de masse : vérifier suppression de l'événement

- console d'admin
    - la liste des campagnes disponibles
        - endpoint : **GET** /api/moog/campaigns
    - extraction des données d'une campagne
        - endpoint : **GET** /api/moog/campaigns/{idCampaign}/extraction
    - modification d'une campagne (label, dates)
        - endpoint : **PUT** /api/moog/campaigns/{id}
    - suppression de campagne
        - endpoint : **DELETE** /api/moog/campaigns/{id}
            => attention : pas intuitif sur le swagger, rangé dans le groupe metadata
        - vérifier la suppression impossible si campagne en période de collecte

# Parcours répondant

- authentification
    - modification de mdp à première connexion
    - ajout/modification de l'adresse mail si portail paramétré à true
    - absence de composant d'ajout/modification de l'adresse mail si portail paramétré à false
    - reinit de mdp avec mail connu
    - reinit de mdp sans mail connu
- aiguillage 
    - cas de redirection vers portail mes enquêtes
    - cas de redirection directe vers le questionnaire
        - cas enquêté 0 (pas de collecte en cours) : reste sur promotion avec message associé
        - cas de collecte en cours : renvoie vers le bon questionnaire
- portail mes enquêtes
    - vérifier la présence du bouton d'accès au questionnaire selon les dates (voir la règle précise)
    - bouton présent : renvoie vers le bon questionnaire
- questionnaire
    - vérifier la personnalisation de la page de garde (métadonnées campagne + personnalization UE)
    - tester la persistence des données ?? (niveau séquence)
    - déconnexion par inactivité ??
    - bouton de déconnexion en cours de questionnaire
        - persistence des données
        - renvoi vers la bonne page (promotion ou portail mes enquêtes)
        - déconnexion effective (nécessite de se re log pour se reconnecter)
    - passage batch SynchronizeQuestionnaireStates pour capter le init questionnaire)
    - validation questionnaire
    - passage batch SynchronizeQuestionnaireStates pour capter le validated questionnaire
    - téléchargement preuve de dépôt
    - déconnexion (idem à bouton déco du menu, mais pas besoin de check la persistence)
    - reconnexion sur un questionnaire validé ?? (retour sur page de téléchargement de preuve de dépôt)
- formulaire assistance
    - envoi de formulaire d'assistance sans être authentifié
    - envoi de formulaire d'assistance en étant authentifié

# API pilotage webclients

Voir avec Audrey :smirk: 

# API pilotage - intégration - suppression (hors webclients)

- création de owner
- création de support
- création de source
- création de survey
- création de campaign
- création de partitioning

# API questionnaire - intégration - suppression (hors webclients)

- création du contexte de campagne : **POST** api/campaign/context


# Batchs


## sampleProcessing

Vérifier que les différentes étapes du batch fonctionnent :
- cas de l'intégration d'UE
    - création d'un compte (id/mdp) dans l'annuaire pour l'UE (step ldap)  - (se connecter avec ce compte pour voir si ça fonctionne)
    - création de l'UE dans Platine pilotage (step pilotage)
    - création de l'UE dans Platine questionnaire (step datacollection)
    - création d'un fichier calc contenant les id/mdp créés pour chaque UE (step outputfile - uniquement en recette)
    - création d'un fichier xml à destination de l'éditique dans le cas d'une demande d'envoi de courrier (step output - <Option type="destination-postalmail">yes</Option>)
        - si <Option type="destination-RNVP">no</Option>, le fichier doit être créé dans le dossier `\\hp_as_st_d2_50\st_data_hp\sic_dv2\batch\out\editique`  (pour la dv2) 
        - si <Option type="destination-RNVP">yes</Option>, le fichier doit être créé dans le dossier `\\hp_as_st_d2_50\st_data_hp\sic_dv2\batch\out\editique\rnvp`  (pour la dv2) 
        - dans les 2 cas, le fichier doit être aussi créé dans le dossier `\\hp_as_st_d2_50\st_data_hp\sic_dv2\batch\out\sampleProcessing\enquête...\...\courrier\` (sauvegarde du fichier)
        - dans le fichier xml en sortie, vérifier la présence de Ue_CalcIdentifiant et Ue_CalcMotDePasse
    - réception d'un mail dans le cas d'une demande d'envoi de mail (step output - <Option type="destination-mail">yes</Option>)
    - création de l'état INITLA dans Moog : à vérifier directement dans Moog ou bien dans la base Platine pilotage avec le endpoint GET /api/moog/campaigns/{campaign}/survey-units/{id}/management-monitoring-infos (step moog - <Goal>create</Goal>)

- cas de la relance d'UE déjà créées : attention, le contenu du fichier sampleProcessing est différent du cas d'au-dessus, avec notamment une variable  `IdeC` qui correspond à l'identifiant de connexion et qui est à mettre dans la balise `Contact`
    - création d'un fichier xml à destination de l'éditique dans le cas d'une demande d'envoi de courrier (step output - <Option type="destination-postalmail">yes</Option>) 
        - dans le fichier xml en sortie, vérifier notamment la présence de la variable `Ue_CalcIdentifiant` qui doit être égal à `IdeC`
    - réception d'un mail dans le cas d'une demande d'envoi de mail (step output - <Option type="destination-mail">yes</Option>) 
        - dans le mail reçu, vérifier notamment la présence de l'identifiant de connexion (qui doit correspondre à la valeur de la variable `IdeC`)
    - création de l'évènement RELANCE dans Moog : à vérifier directement dans Moog ou bien dans la base Platine pilotage (évènement FOLLOWUP) avec le endpoint GET /api/moog/campaigns/{campaign}/survey-units/{id}/management-monitoring-infos (step moog - <Goal>update</Goal>)

- cas d'une séquence 2 d'un enquête à séquences (type enquête Logement) - préalable : avoir supprimé la campagne dans la base Platine questionnaire (mais pas dans Platine pilotage)
    - intégration d'UE avec idUe et idcontact existants en base Platine pilotage  (vérifier qu'on retrouve bien dans Moog) 
    - création d'un fichier xml à destination de l'éditique dans lequel on doit trouver la variable `Ue_CalcIdentifiant` égale à `IdeC` mais pas le mdp (avec options ouverture/web dans step output) 

- tests spécifiques à l'envoi de courriers 
    - vérifier le calcul du nom du fichier xml de sortie selon les options mises dans output ("operation-type", "operation-mode","operation-protocol","with-questionnaire")
    - vérifier dans le fichier xml de sortie que les variables suivantes sont présentes et se calculent comme il faut :
        -  IdOperation = concaténation de COLM_ + `idSource` + _ + MODE + PROTOCOLE + _ + TYPE + (_ QST) ; avec MODE = TEL/FAF/WEB selon la valeur de la variable `operation-mode` , PROTOCOLE = SEQ/PAN ou `vide` selon la valeur de la variable `operation-protocol` , TYPE = OUV/REL/LIB selon la valeur de la variable `operation-type` et QST si `with-questionnaire` vaut yes
        -  TypeGenerateur = courrier_fo
        -  PartieNomFichierLibreZip = concaténation de `idSource` + _ + `millesime` + _ + MODE + PROTOCOLE + _ + TYPE  ;  avec MODE = TEL/FAF/WEB selon la valeur de la variable `operation-mode` , PROTOCOLE = SEQ/PAN ou `vide` selon la valeur de la variable `operation-protocol` , TYPE = OUV/REL/LIB selon la valeur de la variable `operation-type`
        -  Barcode = IS + date de dépôt du courrier sur 3 positions (=numéro de jour dans l'année, par exemple le 11/10/2023 est le jour n° 284 de l'année 2023) + numéro d'édition tronqué des 2 premiers caractères + `Identifiant` + des espaces pour arriver à 35 caractères ==> pas besoin de vérifier le calcul exact du barcode (je l'ai mis pour qu'on ait en tête comment il est calculé), mais peut-être juste vérifier sa présence et le fait qu'on retrouve bien l'identifiant de l'UE `Identifiant` dedans
        -  InitAccuseReception = non
        -  NumeroDocument : vérifier la présence de cette variable qui correspond au numéro du document dans le fichier (commence à 00000001)
        -  AdresseRetourL1 à AdresseRetourL7 : vérifier la présence de ces variables dans le fichier, elles sont toujours à vide
        -  CodePostalDestinataire = `CodePostal`
        -  BddIdentifiantUniteEnquetee = `Identifiant`
        -  BddAdressePosteeL1 = concaténation de `Civilite`, `Prenom`, `Nom`
        -  BddAdressePosteeL2 = `ComplementAdresse` (ou partie de `ComplementAdresse` inférieure à 38 caractères dans le cas où `ComplementAdresse` > 38 caractères)
        -  BddAdressePosteeL3 = partie de `ComplementAdresse`  supérieure à 38 caractères (cas où `ComplementAdresse` > 38 caractères)
        -  BddAdressePosteeL4 = concaténation de `NumeroVoie` `IndiceRepetition` `TypeVoie` et `LibelleVoie`
        -  BddAdressePosteeL5 = `MentionSpeciale`
        -  BddAdressePosteeL6 = concaténation de `CodePostal` et `LibelleCommune`
        -  BddAdressePosteeL7 = FRANCE  (en dur a priori)
    - vérifier que `&amp;#x2028;`  en entrée de batch se transforme en `&#x2028;`  en sortie de batch (c'est le code pour signifier un retour à la ligne pour l'édition des courriers par l'éditique) => tester avec  `<Enq_MailAssistance>https://enquetes.stat-publique.fr/tic&amp;#x2028;Rubrique « Contacter l’assistance »</Enq_MailAssistance>`
    - tester le cas où il manque une variable dans la balise `Metadonnees` ou dans la balise `Metadonnees_Ue` par rapport au modèle souhaité (normalement plantage du batch)
    - tester le cas où il y a une variable en trop dans la balise `Metadonnees` ou dans la balise `Metadonnees_Ue` par rapport au modèle souhaité (normalement le batch filtre et c'est ok)
    - tester l'option use-sample dans le step output `<Option type="use-sample">yes</Option>` 
        - si `yes`, ça doit aller chercher les infos dans le fichier de perso et pas dans Platine pilotage
        - si `no`, ça va chercher dans Platine pilotage
    - tester l'envoi d'un courrier avec questionnaire
        - vérifier le nommage du fichier xml en sortie 
        - vérifier le calcul de IdOperation (avec `_QST` à la fin)
    - tester l'envoi d'un courrier non standard 
        - vérifier le nommage du fichier xml en sortie 
        - vérifier le calcul de IdOperation = COLM_ `idSource` _ CUST
 



- Tests spécifiques à l'envoi de mails
    - vérifier la présence des modèles de mails sous applishare (sur chaque plateforme dv, dv2, beta, prod)
    - tester l'envoi des mails standards pour tous les modèles existants ("operation-type", "operation-mode","operation-protocol")
    - tester l'envoi d'un mail non standard




## extractdata
(= extraction différentielle des données et des paradonnées)

préalable : avoir validé le questionnaire d'une ou plusieurs UE

vérifier pour chaque campagne où des UE ont été validées (càd que l'état de questionnaire de l'UE = VALIDATED) : 
- la création d'un fichier data.diff.IDCAMPAGNE.JOUR_ET_HEURE_DE_L_EXTRACTION.xml dans `\\hp_as_st_d2_50\st_data_hp\sic_dv2\batch\out\extractData\extractdata\IDCAMPAGNE\differential\data` contenant les données de questionnaire de chacune des UE validées
- la création d'autant de fichier de paradatas que d'UE extraites : paradata.diff.IDCAMPAGNE.IDUE.json dans `\\hp_as_st_d2_50\st_data_hp\sic_dv2\batch\out\extractData\extractdata\IDCAMPAGNE\differential\paradata`

Vérifier pour les UE extraites le passage d'état de questionnaire à EXTRACTED

NB : pour consulter l'état de questionnaire d'une UE => api platine questionnaire : state-data-controller endpoint **GET** /api/survey-unit/id/state-data


## extractdataComplete

vérifier l'extraction des datas/paradatas des validés/partiels pour une campagne (faire plusieurs tests pour voir si ça extraie bien ce qui est demandé : uniquement les datas des partiels, datas+paradatas des validés, datas+paradatas des validés+partiels, etc.)
- Pour les datas : création d'un fichier data.complete.partial.IDCAMPAGNE.JOUR_ET_HEURE_DE_L_EXTRACTION.xml dans `\\hp_as_st_d2_50\st_data_hp\sic_dv2\batch\out\extractData\extractdata\IDCAMPAGNE\complete\data`
- Pour les paradatas : création de fichiers paradata.complete.IDCAMPAGNE.IDUE.json pour chaque UE extraite dans `\\hp_as_st_d2_50\st_data_hp\sic_dv2\batch\out\extractData\extractdata\IDCAMPAGNE\complete\paradata`
- une extraction des partiels (que ce soit les datas ou paradatas) doit faire l'extraction pour les UE dont l'état de questionnaire est à INIT
- une extraction des validés (que ce soit les datas ou paradatas) doit faire l'extraction pour les UE dont l'état de questionnaire est >= VALIDATED (en pratique aujourd'hui : VALIDATED/EXTRACTED)

NB : pour consulter l'état de questionnaire d'une UE => api platine questionnaire : state-data-controller endpoint **GET** /api/survey-unit/id/state-data


## importPND

préalable : avoir une campagne en cours de collecte

Démarche générale : 
- préparer un fichier fictif de PND de la forme de ceux qu'on reçoit de l'éditique avec des UE qui appartiennent à une campagne en cours de collecte
- mettre le fichier dans le dossier \\hp_as_st_d2_50\st_data_hp\sic_dv2\batch\in\editique
- lancer le batch importPND
- vérifier que le fichier a été traité : déplacé du dossier `...\editique` au dossier `...\editique\treated`
- vérifier dans Moog que l'évènement PND est bien ajouté aux UE qui étaient dans le fichier (si elles sont bien dans le champ, voir les cas de tests ci-dessous)

Cas de tests :
- une UE dans une campagne en cours
- une UE dans une campagne pas démarrée
- une UE dans une campagne terminée
- une UE en interséquence
- etc. (jouer sur les dates et s'assurer notamment des dates limites jour de début de collecte, jour de fin de collecte)
- 2 fichiers PND en même temps dans le dossier


## reinitPasswordPostalMail

- faire une demande de nouveau mot de passe via le portail de promotion 
    - pour un compte sans adresse email
    - pour un 2e compte sans adresse email
    - pour un compte avec adresse email
- vérifier que les fichiers de demandes unitaires sont créées sous applishare Platine : 2 demandes (les 2 pour qui il n'y avait pas d'adresse email)
- lancer le batch reinitPasswordPostalMail 
- vérifier la création du fichier xml pour l'éditique (un fichier avec les 2 UE ci-dessus)
- vérifier le bon fonctionnement du nouveau mot de passe (dans les 2 cas mail/courrier)

## synchronizeQuestionnaireStates

- pour une UE, valider un questionnaire
- pour une autre UE, démarrer le questionnaire sans le valider
- lancer le batch synchronizeQuestionnaireStates
- vérifier dans Moog : 
    - l'ajout de l'évènement VALIDATED pour la 1ère UE  (ainsi que l'horaire)
    - l'ajout de l'évènement PARTIELINT pour la 2e UE (ainsi que l'horaire)
(possibilité aussi de vérifier dans la base Platine pilotage)

Nb : actuellement l'horaire de l'événement est celui du passage du batch, et non pas celui de modification de l'état du questionnaire

# Autres

- test du flux interapplicatif d'import des PND depuis l'éditique vers l'applishare Platine (UNIQUEMENT EN PROD, nécessite de se coordonner avec l'éditique) - à vérifier lorsqu'il y a une migration applishare ou autre
    - vers le dossier `\\pd_as_st_d1_50\st_data_pd\sic_pd\batch\in\editique` quand enquête web sous Platine
    - vers le dossier `\\pd_as_st_d1_50\st_data_pd\sic_pd\batch\in\editique\hors-platine` sinon

- test du flux interapplicatif de dépôt des fichiers de courriers de Platine vers l'editique (UNIQUEMENT EN PROD, nécessite de se coordonner avec l'éditique)
    - cas RNVP = yes
    - cas RNVP = no

#

idées : chargement de masse d'event dans moog

