L'administrateur fonctionnel prépare la génération des documents:
<!--
1. A partir d'un document Word (format docx), un document est préparé par
1. Une première étape est un formulaire qui demande des précisions à l'utilisateur.
Il s'agit, par exemple, d'indiquer la localisation précise pour la génération du document, d'indiquer un "usager principal" pour le document, etc.
La plupart de ces informations peuvent être configurées par
Si aucune précision n'est nécessaire, cette étape n'est pas affichée à l'utilisateur.
-->
## Parcours des utilisateurs
Lors de la génération de document, les utilisateurs parcourrent trois étapes:
1. un formulaire, optionnel, demande des précisions à l'utilisateur.
Il peut s'agir, par exemple, de préciser les destinataires du document, de choisir un signataire, etc.
Ce formulaire est soit:
* natif au nœud. Dans ce cas, il apparait systématiquement ou dans certaines conditions;
* configuré par l'admnistrateur fonctionnel parmi des options disponibles;
2. le document est effectivement généré en arrière-plan. Cela peut nécessiter éventuellement quelques minutes;
3. le document est ouvert pour édition dans un éditeur en ligne. L'enregistrement est automatique. Lorsqu'ils ferment l'éditeur **depuis l'interface de l'éditeur**, l'utilisateur est redirigé vers la page principale, généralement la page de génération du document.
Notez que, pour que la redirection soit effective, l'utilisateur doit fermer **dans l'interface de l'éditeur**: fermer la fenêtre ou l'onglet fait perdre les informations de redirection - cependant, le document est normalement enregistré.
Les documents sont préparés par l'administrateur fonctionnel.
Aux endroits où cela est nécessaire, l'administrateur indique un texte qui débute par `${` et se termine par `}`. Ce texte, depuis le signe `$` initial jusqu'à la balise fermante finale (`}`) est remplacé par le texte contenu dans la variable.
Les variables contiennent des informations importées d'objets présents dans le logiciel. Par objet, nous entendons, par exemple, un utilisateur (User), un usager (Person), etc…
Ces objets comportent plusieurs champs. On accède à ces champs en concaténant les noms de la variable qui contient un objet, et le nom des champs de ces objets.
Par exemple: le créateur d'un document est disponible sous la variable `creator`. Cette variable est un objet de type `User`. Cet objet contient ces trois champs ([la liste complète est disponible ci-dessous](#sec:gendoc-var-user)):
Alors, pour indiquer le nom du créateur, son email et son service, on préfixe la variable par `creator`, et on ajoute les noms des champs de l'objet `User`, en commençant par une majuscule pour ces champs. Exemple:
* le format "court", ou dd/mm/yyyy (par exemple, 15/06/1980, 18/08/2021, …). Ce format est accessible par le champ `short`;
* le format "long": 15 juin 1980, 18 août 2021, … Ce format est accessible par le champ `long`;
lorsqu'une date est disponible, il est donc possible d'avoir accès à son format en précisant sa chaine de caractère. Exemple avec la date de naissance de la personne:
```
personBirthdateShort=15/06/1980
personBirthdateLong=15 juin 1980
```
### Cas où une variable peut être de deux natures différentes
Certaines variables peuvent être de deux natures différentes, par exemple, soit une personne, soit un tiers. Dans ce cas, les variables qui sont de noms différents sont à l'état "vide". Par exemple, le champ "date de naissance" n'est pas disponible pour un tiers, dans ce cas, il est vide.
Exemple, une liste des interlocuteurs principaux. Le premier est une personne:
* un champ "usager principal du parcours", qui permet, cette fois, de choisir parmi les usagers concernés par le parcours, mais également parmi les interlocuteurs privilégiés, ou le demandeur du parcours.
*`coursePerson1StayAddresses` (Liste d'adresse): la liste des adresses du premier usager du parcours, choisi par l'étape 1;
*`coursePerson1RelayAddresses` (Liste d'adresse): la liste des adresses de relais (pour les enfants confiés) du premier usager du parcours, choisi par l'étape 1;
*`coursePerson2StayAddresses` (Liste d'adresse): la liste des adresses du second usager du parcours, choisi par l'étape 1;
*`coursePerson2RelayAddresses` (Liste d'adresse): la liste des adresses de relais (pour les enfants confiés) du premier usager du parcours, choisi par l'étape 1;
*`coursePerson3` (Person): le premier usager du parcours, choisi par l'étape 1;
*`coursePerson3Household` (Ménage): les informations du ménage de la personne 1;
*`coursePerson3StayAddresses` (Liste d'adresse): la liste des adresses du troisième usager du parcours, choisi par l'étape 1;
*`coursePerson3RelayAddresses` (Liste d'adresse): la liste des adresses de relais (pour les enfants confiés) du troisième usager du parcours, choisi par l'étape 1;
*`coursePerson4` (Person): le troisième usager du parcours, choisi par l'étape 1;
*`coursePerson4Household` (Ménage): les informations du ménage de la personne 1;
*`coursePerson4StayAddresses` (Liste d'adresse): la liste des adresses du premier usager du parcours, choisi par l'étape 1;
*`coursePerson4RelayAddresses` (Liste d'adresse): la liste des adresses de relais (pour les enfants confiés) du premier usager du parcours, choisi par l'étape 1;
*`coursePerson5` (Person): le premier usager du parcours, choisi par l'étape 1;
*`coursePerson5Household` (Ménage): les informations du ménage de la personne 1;
*`coursePerson5StayAddresses` (Liste d'adresse): la liste des adresses du premier usager du parcours, choisi par l'étape 1;
*`coursePerson5RelayAddresses` (Liste d'adresse): la liste des adresses de relais (pour les enfants confiés) du premier usager du parcours, choisi par l'étape 1;
*`coursePerson6` (Person): le premier usager du parcours, choisi par l'étape 1;
*`coursePerson6Household` (Ménage): les informations du ménage de la personne 1;
*`coursePerson6StayAddresses` (Liste d'adresse): la liste des adresses du premier usager du parcours, choisi par l'étape 1;
*`coursePerson6RelayAddresses` (Liste d'adresse): la liste des adresses de relais (pour les enfants confiés) du premier usager du parcours, choisi par l'étape 1;
*`coursePerson7` (Person): le premier usager du parcours, choisi par l'étape 1;
*`coursePerson7Household` (Ménage): les informations du ménage de la personne 1;
*`coursePerson7StayAddresses` (Liste d'adresse): la liste des adresses du premier usager du parcours, choisi par l'étape 1;
*`coursePerson7RelayAddresses` (Liste d'adresse): la liste des adresses de relais (pour les enfants confiés) du premier usager du parcours, choisi par l'étape 1;
*`coursePerson8` (Person): le premier usager du parcours, choisi par l'étape 1;
*`coursePerson8Household` (Ménage): les informations du ménage de la personne 1;
*`coursePerson8StayAddresses` (Liste d'adresse): la liste des adresses du premier usager du parcours, choisi par l'étape 1;
*`coursePerson8RelayAddresses` (Liste d'adresse): la liste des adresses de relais (pour les enfants confiés) du premier usager du parcours, choisi par l'étape 1;
*`courseMainStayAddresses` (Liste d'adresse): la liste des adresses du premier usager du parcours, choisi par l'étape 1;
*`courseMainRelayAddresses` (Liste d'adresse): la liste des adresses de relais (pour les enfants confiés) du premier usager du parcours, choisi par l'étape 1;
Le document hérite de toutes les variables et listes disponibles pour les document "générés par un parcours". De plus, les variables suivantes s'ajoutent:
*`workGoals`: une liste d'objectifs, où chaque item contient deux variables:
* `goal: le libellé de l'objectif (vide pour les résultats sans objectif);
* `result: une concaténation de toutes les appellations des résultats, séparés par une virgule;
*`workThirdParties` (liste de ThirdParty): une liste de tiers associés à l'action;
*`workPersons`: une liste de personnes associées à l'action
### Document générés pour une évaluation
Le document hérite des variables et listes disponibles pour les documents "Action d'accompagnement", auxquelles viennent s'ajouter la variable `evaluation`:
Les champs ci-dessous étendent les variables disponibles dans les documents.
Par exemple, le document généré à partir d'un parcours présente la variable `startDate` qui contient la date de début du parcours. Ce champ peut être exploité de la manière suivante:
*`membersAtPositionx`: la liste des membres à la position `x`, où `x` est l'identifiant de la position. Cet identifiant est visualisable dans l'interface d'administration.
Ainsi, si les "enfants hors ménage" est la position `3`, alors la liste des usagers "Enfant hors ménage" est présente sous la variable `membersAtPosition3`.