Historique
| Reference mission | Fiche | Rev. | Statut | Demandeur | Date | Actions |
|---|---|---|---|---|---|---|
| Aucun rapport généré. | ||||||
Chargement du Word Kizeo...
Fiches CEE
| Numero | Libelle | Formulaires Kizeo | Export Kizeo | Actions |
|---|
Utilisateurs
| Nom | Role | Signature | Actions |
|---|
Guide de l'outil
Documentation des fonctionnalités, types de balises Word et options de configuration.
Vue d'ensemble
Que fait l'outil ?
L'outil rapport-word.spekty.fr automatise la production des rapports d'inspection CEE :
- L'inspecteur saisit la mission dans Kizeo (formulaire mobile + Word Kizeo exporté).
- Dans l'outil, l'utilisateur lance la génération en saisissant la référence de mission.
- L'outil récupère les données Kizeo (API + Word exporté) et le contenu SharePoint (fichier commande, statut, photos).
- Les balises de la trame Word de la fiche CEE sont remplies via leur mapping (Kizeo, formule, saisie manuelle, etc.).
- Le rapport est édité (Word Online ou local), signé (signature image + inspecteur N2), converti en PDF, puis diffusé via Power Automate.
Historique : filtres & toggles
L'historique propose deux toggles indépendants, dont le choix est mémorisé en cookie (1 an) :
- « Mes rapports » / « Les rapports de tout le monde » — filtre par demandeur (l'utilisateur connecté ou tous).
- « Voir tous les rapports » / « Voir uniquement les rapports en cours » — affiche ou masque les rapports signés.
Un champ recherche filtre par référence de mission (insensible à la casse).
Pour un rapport en Saisies manuelles ou en édition, le bouton Ouvrir est visible. Pour un rapport en édition ou en erreur, le propriétaire peut l'annuler (croix rouge). Les admins peuvent supprimer n'importe quel rapport (icône poubelle, confirmation par référence de mission).
Statuts d'un rapport
| Statut | Signification |
|---|---|
draft | Brouillon (rare, étape interne). |
awaiting_manual_input | Saisies manuelles en attente. Bouton Ouvrir ré-affiche la modale. |
generating | Génération en cours (tâche de fond). |
editing | Prêt à éditer (Word Online ou téléchargement local). |
signing | Pipeline de signature en cours (5 étapes resumables). |
signed | Signé et diffusé. Possibilité de réviser. |
error | Échec de génération. À annuler / relancer. |
Configuration des fiches CEE
Fiches CEE & trames Word
Chaque fiche CEE (BAT-TH-XXX, BAR-TH-YYY, etc.) regroupe :
- Un ou plusieurs formulaires Kizeo associés (recherche par ID décroissant).
- Un éventuel export Kizeo Word (formulaire dont le rendu Word est consulté pendant l'édition).
- Un attribut Sous accréditation Cofrac.
- Un attribut Désactivée : si coché, la fiche est masquée aux utilisateurs (fond rouge pâle côté admin) et la génération renvoie une erreur. Utile pendant un paramétrage en cours.
- Une ou plusieurs versions de trames Word, chacune avec une date de validité (« Valable à partir de »). Voir section dédiée.
Création / mise à jour d'une trame
Uploader un fichier .docx. L'outil scanne automatiquement les balises et propose un mapping vide pour chacune. Le numéro de version est auto-détecté depuis le nom de fichier (dernière occurrence vN, fallback v1).
Trames multiples par date d'engagement
Une fiche peut avoir plusieurs trames en vigueur selon la date d'engagement de l'opération (lue dans le fichier de commande, colonne nommée exactement Date d'engagement).
Paramétrage admin
Chaque trame de la fiche peut recevoir une date de validité (Valable à partir de), modifiable directement dans la liste des trames :
- Trames avec date → en vigueur, candidates à la sélection automatique.
- Trames sans date → brouillon / orphelines (badge orange), jamais sélectionnées automatiquement, utiles pendant un paramétrage WIP.
Affichage trié : trames en vigueur d'abord (valid_from desc), puis brouillons en dessous.
Sélection à la génération
L'outil applique ces règles :
| Situation | Modale | Génération |
|---|---|---|
| 0 trame en vigueur | non | échec (admin doit paramétrer) |
| 1 trame, date d'engagement absente | non | utilise la trame |
| 1 trame, date ≥ valid_from | non | utilise la trame |
| 1 trame, date < valid_from | oui | trame choisie par l'utilisateur |
| ≥ 2 trames en vigueur | oui | trame choisie par l'utilisateur |
Modale de sélection
- Bandeau vert : une trame est présélectionnée (date d'engagement couverte), l'utilisateur valide.
- Bandeau jaune : pas de présélection (date absente ou aucune trame ne couvre la date), l'utilisateur sélectionne manuellement.
Balises Word
Types de balises et conventions de nommage
Trois types de balises peuvent être placées dans la trame :
| Type | Syntaxe | Usage |
|---|---|---|
| Texte | {{nom_balise}} | Valeur textuelle simple, remplacée à la génération. |
| Choix | {{{nom_balise}}} | Valeur prise dans une liste de choix détectée à proximité de la balise. |
| Photo | [[nom_balise]] | Insertion d'une image (photo Kizeo) à la place de la balise. |
Conventions de nommage
- Caractères autorisés : lettres latines (incluant accents), chiffres, espaces,
_. - Les noms sont sensibles à la casse.
- Préférer le
snake_caseen minuscules :{{adresse_chantier}},{{{conformite_isolation}}},[[photo_facade]]. - Un même nom de balise peut apparaître plusieurs fois : toutes les occurrences seront remplies par la même valeur.
Détection des valeurs de choix {{{...}}}
Pour les balises {{{...}}}, l'outil détecte automatiquement les valeurs autorisées juste après la balise. Trois règles, par ordre de priorité :
- Slash sur la même ligne ou le 1er paragraphe suivant : ex.
Oui / Non / Non vérifiable. STOP au passage à la ligne (les paragraphes suivants ne sont plus considérés). - Cases à cocher Word : si le 1er paragraphe contient une checkbox, on prend uniquement les paragraphes contenant une case.
- Lignes séparées : sinon, chaque paragraphe d'option (en bleu, surligné, numéroté
1 –, etc.) est un choix.
Préservation des couleurs
Pour une option en couleur (ex. Non en rouge), placez la balise sur sa propre ligne et l'option sur la ligne suivante. Lors de la résolution, le run de couleur d'origine est conservé (la balise est supprimée, et seul le run du choix retenu reste).
Limite de longueur
Une ligne d'options slash-séparées est détectée jusqu'à 600 caractères. Au-delà, considérer une mise en forme sur plusieurs lignes.
Balises réservées remplies à la signature
Trois balises sont réservées et traitées spécifiquement par l'outil. Elles restent inchangées à la génération et sont remplies au moment de la signature (étape word_signed du pipeline).
| Balise | Remplacée par |
|---|---|
{{signature}} | Image de signature (PNG/JPEG) de l'utilisateur qui signe — taille 5 cm × 2,5 cm. |
{{inspecteur_n2}} | Prénom Nom du signataire (utilisateur qui clique sur Signer et diffuser). |
{{date_rapport}} | Date de signature au format JJ/MM/AAAA (date du jour à la signature, pas de la génération). |
À placer dans la trame
- Ces balises se mettent directement dans la trame Word — aucun mapping n'est nécessaire.
- Elles ne sont pas listées dans l'éditeur de mapping (filtrées automatiquement).
- Lors d'une révision, les valeurs précédentes sont effacées et les balises restaurées dans la cellule pour être ré-remplies à la nouvelle signature.
Détection des cellules
Pour la restauration en révision, l'outil reconnaît les cellules par leur libellé voisin :
- « Signature de l'inspecteur validant le rapport » → cellule voisine =
{{signature}} - « Inspecteur (étude documentaire et validation du rapport) » → cellule voisine =
{{inspecteur_n2}} - « Date du rapport » → cellule voisine =
{{date_rapport}}
Fonctions spéciales utilisables dans une formule
À ne pas confondre avec les balises réservées ci-dessus, ces fonctions s'utilisent dans une formule de mapping pour produire des valeurs calculées :
| Fonction | Description |
|---|---|
REVISION() | Numéro de révision courant (0, 1, 2...). |
REVISION_PRECEDENTE() | Révision − 1, ou "/" si révision = 0. |
DATE_RAPPORT() | Date de signature au format JJ/MM/AAAA. |
SIGNATURE() | Placeholder remplacé par l'image de signature lors de la signature. |
UTILISATEUR() | Prénom Nom de l'utilisateur qui valide le rapport. |
ZONE_CLIMATIQUE(cp) | Zone H1/H2/H3 d'après le code postal. |
Exemple : un mapping de type formula avec source_value UTILISATEUR() remplit automatiquement le nom de l'inspecteur à la signature.
Tag non résolu (surlignage jaune conservé)
Un tag est marqué non résolu dans les cas suivants :
- la source ne renvoie rien (
Noneou""), - la formule échoue ou retourne une chaîne vide,
- la validation value_list rejette la valeur,
- la validation number/integer rejette la valeur.
Dans ce cas, le surlignage jaune est conservé pour signaler la balise à compléter manuellement avant signature. La balise {{...}} est retirée du document mais la cellule/ligne reste surlignée.
Mappings (configuration des balises)
Types de source
Pour chaque balise détectée dans la trame, on définit comment la valeur est obtenue :
| Type | Description | source_value |
|---|---|---|
command_file | Colonne du fichier commande SharePoint. | Lettre (A, B, ...) ou nom d'en-tête. |
kizeo | Champ Kizeo (API données). | Nom du champ dans le formulaire. |
kizeo_word | Valeur extraite du Word Kizeo via un Pattern. | Label du Pattern Kizeo Word. |
manual_input | Saisie manuelle dans la modale avant génération. | Question affichée à l'utilisateur. |
formula | Formule combinant plusieurs sources. | IF(...), CONCAT(...), etc. |
constant | Valeur fixe. | Texte de la constante. |
Validation et options (value_list, number, use_label)
validation_type
value_list: la valeur doit appartenir à la liste fournie en validation_param (une valeur par ligne). Si non, le tag reste non résolu.number: la valeur doit être un nombre. La virgule décimale française est convertie automatiquement en point pour les calculs ($TAG.xdans une formule).integer: nombre entier uniquement.
use_label
Pour les balises de type choice mappées sur Kizeo : cocher use_label indique d'utiliser le libellé de l'option Kizeo plutôt que sa valeur.
Import de mapping depuis une autre trame
Depuis l'éditeur de mapping d'une trame, le bouton Importer permet de copier la configuration d'une autre trame.
- Les trames de la même fiche CEE sont placées en haut et surlignées en jaune dans la modale de sélection.
- Pour chaque trame source : nombre de tags, mappés, et patterns Kizeo Word disponibles.
Comportement
- Pour les balises ayant le même nom dans les deux trames : le mapping est copié.
- Les Patterns Kizeo Word référencés par les mappings importés sont également importés (s'ils n'existent pas déjà).
- Cas même fiche : les balises présentes dans la source mais pas dans la cible sont également créées dans la cible avec leur mapping (pratique pour migrer une nouvelle version de trame).
Patterns Kizeo Word
Configuration d'un Pattern Kizeo Word
Le Word exporté par Kizeo est parsé pour extraire des valeurs autour de patterns texte. Chaque Pattern a 3 attributs :
- pattern_text : texte recherché dans le Word (insensible à la casse, espaces normalisés).
- label : nom utilisé pour référencer la valeur dans les mappings (
$KIZW.label, ou source_value = label pour un mappingkizeo_word). - value_position : position de la valeur par rapport au pattern.
right: cellule à droite (tableau).below: cellule en dessous.exists: booléen — renvoie"true"si le pattern est présent quelque part,"false"sinon.
Règle « première ligne »
Si la cellule de valeur contient plusieurs lignes (ex. Oui suivi de Commentaire : XXX), seule la 1ère ligne non vide est conservée. Si la valeur attendue n'est pas sur la 1ère ligne, le tag reste non résolu.
Saisies manuelles
Modale de saisies manuelles
Lorsqu'au moins une balise est mappée sur manual_input, une modale obligatoire est affichée juste avant l'édition du rapport :
- À gauche : aperçu du Word Kizeo (référence visuelle pour les saisies).
- À droite : les champs à saisir.
- Les saisies sont collectées avant la génération, donc utilisables dans des formules
$TAG.d'autres balises. - Si l'utilisateur ferme la modale avec la croix, le rapport reste en statut Saisies manuelles. Cliquer sur Ouvrir dans la liste ré-affiche la modale.
Types de saisie
text(par défaut) : zone de texte libre.number/integer: champ numérique. La virgule est convertie en point dans les formules.choice: liste déroulante uniquement disponible pour les balises de type choice. Les options sont les valeurs détectées dans la trame.
Révision d'un rapport déjà fait dans l'outil
La modale n'est pas ré-affichée : les saisies de la version précédente sont reprises automatiquement. À l'inverse, pour la révision d'un rapport hors-outil, la modale est affichée comme pour une 1ère génération.
Formules
Références de données ($CMD, $KIZ, $KIZW, $TAG)
| Préfixe | Source | Exemple |
|---|---|---|
$CMD. | Colonne du fichier commande SharePoint. | $CMD.A ou $CMD.AdresseChantier |
$KIZ. | Champ Kizeo (API). | $KIZ.surface_isolee |
$KIZW. | Pattern Kizeo Word. | $KIZW.Photo_horodatee |
$TAG. | Autre balise du même rapport (résolu d'abord). | $TAG.surface_totale |
Les références sont remplacées avant évaluation. Une chaîne "true"/"false" est convertie en 1/0 pour les conditions IF.
Résolution topologique : les balises avec dépendances $TAG. sont évaluées dans le bon ordre. Les cycles sont détectés et abandonnés.
Fonctions standard
Logique
IF(cond, vrai, faux), IFS(c1, v1, c2, v2, ...), AND, OR, NOT, ISNUMBER, ISBLANK.
Texte
CONCAT, COALESCE, UPPER, LOWER, TRIM, LEFT, RIGHT, MID, LEN, SEARCH, REPLACE, CHAR, TEXT.
Nombre
ABS, INT, MOD, MIN, MAX, ROUND.
Fonctions spéciales rapport-word
| Fonction | Description |
|---|---|
REVISION() | Numéro de révision courant (0, 1, 2...). |
REVISION_PRECEDENTE() | Révision − 1, ou "/" si révision = 0. |
DATE_RAPPORT() | Date de signature au format JJ/MM/AAAA. |
SIGNATURE() | Placeholder remplacé par l'image de signature. |
UTILISATEUR() | Prénom Nom de l'utilisateur qui valide le rapport. |
ZONE_CLIMATIQUE(cp) | Zone H1/H2/H3 d'après le code postal. |
Exemples de formules
IF($KIZW.Photo_horodatee, "Photos en annexe", "Connexion insuffisante : aucune photo fiable")
IFS($TAG.surface < 50, "Petit",
$TAG.surface < 200, "Moyen",
$TAG.surface >= 200, "Grand")
CONCAT($CMD.adresse, " — ", $CMD.code_postal, " ", $CMD.ville)
ROUND($TAG.surface_isolee / $TAG.surface_totale * 100, 1)
CONCAT("Rev. ", REVISION(), " du ", DATE_RAPPORT())
IF(ISNUMBER($KIZW.note), $KIZW.note / 10, "non noté")
Génération & édition
Pipeline de génération
- Pré-checks : rapport déjà en cours ? révision ? statut SharePoint ? nombre de missions Kizeo réalisables ?
- Sélection de trame (multi-trames) : modale si plusieurs trames en vigueur, ou date d'engagement < valid_from d'une trame unique. Voir section dédiée.
- Récupération des données Kizeo, Kizeo Word et SharePoint.
- Saisies manuelles (modale obligatoire si applicable).
- Résolution topologique des mappings (gère les dépendances
$TAG.entre balises, détecte les cycles). - Remplissage des balises dans le Word :
- Texte / Choix : remplacement avec préservation du formatage des runs adjacents.
- Photos : insertion d'images redimensionnées (cellule ou largeur de page).
- Cases à cocher : la case correspondant à la valeur est cochée (croix Word ☒).
- Upload sur SharePoint, le rapport passe en statut En édition.
Édition (Word Online vs local)
- Word Online : édition collaborative dans le navigateur. L'iframe est détruite avant la signature pour libérer le verrou SharePoint.
- Local : télécharger / modifier / re-uploader. Verrouillage exclusif pendant la modification.
- Transfert : un rapport peut être transféré à un autre utilisateur (propriétaire ou admin uniquement).
- Annulation / suppression : le propriétaire peut annuler un rapport en édition (croix rouge). Les admins peuvent supprimer (icône poubelle, confirmation par référence de mission).
Verrou SharePoint au moment de la signature
Si Word Online a encore un verrou actif au moment de l'upload signé (cas fréquent juste après fermeture de l'éditeur), l'outil retry automatiquement 4 fois avec des délais croissants (3 s, 8 s, 15 s, 25 s) en tentant un déverrouillage à chaque essai. Si tout échoue, le rapport reste en statut signing avec bouton Reprendre la diffusion.
Panneau photos & rotation
Le panneau de droite affiche les photos Kizeo (groupées par ligne de tableau du Word Kizeo) et les images uploadées manuellement.
- Copier : copie l'image au presse-papier (PNG), avec lien vers l'originale pour les photos uploadées.
- Pivoter (icône ↻) : tourne l'image de 90° dans le panneau. La rotation est visuelle uniquement — appliquée à la copie clipboard, mais non persistée. Fermer/rouvrir le rapport remet à 0°.
- Recherche : filtre les groupes par texte de contexte.
Nettoyage des caractères de contrôle
Les fichiers Excel commande peuvent contenir des caractères de contrôle invisibles (ex: 0x19 apparaissant comme un rectangle dans Excel). Sans nettoyage, ils sont sérialisés sous forme _x0019_ dans le Word généré.
L'outil supprime automatiquement :
- Les vrais octets de contrôle XML interdits (
0x00-0x08, 0x0B, 0x0C, 0x0E-0x1F, 0x7F). - Les séquences littérales
_xNNNN_renvoyées par openpyxl lors du parsing Excel.
Strip appliqué à 3 niveaux (mapping_engine, word_engine pour {{tag}} et {{{tag}}}) pour une couverture totale.
Signature & diffusion
Pipeline de signature (5 étapes)
La signature est resumable : en cas d'interruption, le rapport reste en statut signing avec sign_error tracé. Tout utilisateur peut reprendre.
- word_signed — signature image + inspecteur N2 insérés dans le Word.
- sp_uploaded — Word signé re-uploadé sur SharePoint Drafts.
- pdf_done — conversion en PDF via Graph API.
- pj_done — Word + PDF déposés via le webhook Power Automate.
- fields_done — champs SharePoint mis à jour (Date 1ère lecture, Suivi révision, Conclusion, etc.).
Modale de revue des surlignages
Avant signature, l'outil affiche les balises non résolues et les surlignages restants ; à traiter manuellement :
- Retirer : enlève uniquement le surlignage, le texte demeure tel quel.
- Modifier le rapport : retourne en édition pour ajuster le contenu.
Cette étape garantit qu'aucune balise non remplie ne traîne dans le rapport signé.
Révision d'un rapport signé
Un rapport signé peut être révisé : l'outil incrémente revision et repart :
- Rapport initial fait dans l'outil : repart du Word précédent. La trame n'est pas re-sélectionnée (continuité). Pas de modale de saisies manuelles ni de sélection de trame.
- Rapport initial hors-outil (mission au statut Terminé sur SharePoint) : repart d'une trame vierge. Le numéro de révision part de la valeur
Revisionlue sur SharePoint + 1 (et non pas hardcodé à 1). Les modales sélection de trame / saisies manuelles s'affichent normalement.
La fonction REVISION_PRECEDENTE() est utile pour produire un suivi des modifications dans la trame.
Utilisateurs
Authentification, rôles, signature personnelle
- Authentification : SSO Microsoft Entra ID (cookie JWT).
- Rôles :
admin(toutes pages, gestion fiches/users) ouuser(génération + édition). - Signature personnelle : chaque utilisateur charge son image (PNG/JPEG, validée par magic bytes). Indicateur ✓/✗ dans le bandeau supérieur.
- Transfert de rapport : permet de changer le propriétaire d'un rapport (et déverrouille si nécessaire).
Rapport Word