Les workflows Mayan EDMS permettent d'automatiser le cycle de vie des documents via une machine à états : chaque document suit un chemin d'états défini, avec des transitions manuelles ou automatiques, des actions exécutées à chaque étape, et des escalades temporelles.
Un workflow est composé des éléments suivants, du plus général au plus précis :
Workflow (gabarit)
├── États (States) ← positions dans le processus
│ ├── Actions ← exécutées à l'entrée ou à la sortie d'un état
│ └── Escalades ← transitions automatiques après un délai
└── Transitions ← passages d'un état à un autre
├── Triggers ← déclenchement automatique sur événement
├── Champs ← données saisies lors d'une transition manuelle
└── Condition ← garde conditionnant si la transition est disponible
Cycle de vie d'un document dans un workflow :
Document créé
↓
WorkflowInstance créée → État initial
↓
Actions "on entry" exécutées
↓
[attente : trigger ou action manuelle]
↓
Transition déclenchée (trigger / utilisateur / escalade)
↓
Actions "on exit" de l'état précédent
↓
Nouvel état actif → Actions "on entry"
↓
... jusqu'à l'état final
Le workflow est le gabarit qui définit toute la logique. Il est associé à un ou plusieurs types de documents et se lance automatiquement à la création d'un document de ce type.
| Propriété | Description |
|---|---|
| Label | Nom affiché du workflow |
Nom interne (internal_name) |
Identifiant unique, utilisable dans les templates (workflow_instance.workflow.internal_name) |
Lancement automatique (auto_launch) |
Si activé, le workflow démarre dès la création du document. Sinon, il faut le lancer manuellement |
Ignorer si complété (ignore_completed) |
Si activé, les documents ayant atteint un état final ne peuvent plus être retransitionnés |
| Types de documents | Les types de documents auxquels ce workflow s'applique |
Administration > Workflows > Gabarits de workflow
Un état représente une position du document dans le processus. Il doit y avoir exactement un état initial par workflow.
| Propriété | Description |
|---|---|
| Label | Nom affiché de l'état |
| Initial | Premier état à la création de l'instance. Un seul par workflow |
| Final | État terminal — aucune transition sortante possible. Peut en avoir plusieurs |
| Completion | Pourcentage d'avancement (0–100) — purement indicatif, utilisable dans les templates |
En attente de validation, Approuvé, Rejeté, ArchivéSoumis ou NouveauApprouvé, Rejeté, Archivé selon le processusUne transition est un passage possible entre deux états. Elle peut être déclenchée manuellement par un utilisateur autorisé, automatiquement par un trigger, ou par une escalade.
| Propriété | Description |
|---|---|
| Label | Nom de la transition (ex. Approuver, Rejeter, Soumettre) |
État source (origin_state) |
État de départ |
État destination (destination_state) |
État d'arrivée |
| Condition | Template Django retournant une valeur non-vide pour autoriser la transition (voir Conditions) |
Pour qu'un utilisateur puisse exécuter une transition manuellement, il doit posséder permission_workflow_instance_transition sur l'instance de workflow (accordée via ACL sur le document ou sur le gabarit de workflow).
Une transition peut avoir le même état comme source et destination — utile pour déclencher des actions sans changer d'état.
Les champs de transition permettent de collecter des données auprès de l'utilisateur au moment où il exécute une transition manuelle. Ces données sont stockées dans le contexte du workflow et accessibles dans les templates.
| Propriété | Description |
|---|---|
Nom (name) |
Identifiant interne — utilisé dans les templates comme {{ workflow_instance_context.nom }} |
| Label | Libellé affiché à l'utilisateur |
| Type de champ | Texte (CharField) ou Entier (IntegerField) |
| Obligatoire | Si coché, la transition ne peut pas être exécutée sans remplir ce champ |
| Valeur par défaut | Valeur pré-remplie (peut être un template Django) |
| Lookup | Template générant une liste de choix au format CSV : choix1,choix2,choix3 |
| Texte d'aide | Message d'aide affiché sous le champ |
| Widget | Widget personnalisé : Textarea pour les textes longs |
| Arguments widget (YAML) | Paramètres supplémentaires du widget |
Champ motif_rejet collecté lors de la transition Rejeter → accessible dans une action email via {{ workflow_instance_context.motif_rejet }}.
Un trigger connecte un événement Mayan à une transition : quand l'événement se produit sur le document concerné, la transition est exécutée automatiquement (si sa condition est vraie et si la transition est valide dans l'état courant).
"Event trigger: <label de l'événement>"Une action est exécutée automatiquement lors de l'entrée dans un état (on entry) ou lors de la sortie (on exit). Elle peut avoir une condition propre.
| Propriété | Description |
|---|---|
| Label | Nom descriptif de l'action |
| Activée | Activer/désactiver sans supprimer |
| Moment | On entry (à l'entrée dans l'état) ou On exit (à la sortie) |
| Condition | Template conditionnel — si vide : toujours exécutée. Si renseignée : exécutée seulement si le template retourne une valeur non-vide |
Les actions sont exécutées dans l'ordre alphabétique de leur label. Pour contrôler l'ordre, préfixer les labels : 01 - Attacher tag, 02 - Envoyer email.
Si une action échoue, l'erreur est consignée dans le journal d'erreurs du document et les actions suivantes ne sont pas exécutées (en production). En mode DEBUG, l'exception est levée.
Une escalade déclenche automatiquement une transition si le document reste dans un état plus longtemps que le délai configuré.
| Propriété | Description |
|---|---|
| Transition | La transition à déclencher |
Montant (amount) |
Nombre d'unités de temps |
Unité (unit) |
days, hours, minutes, seconds |
| Priorité | Ordre d'évaluation si plusieurs escalades existent sur le même état (plus bas = évalué en premier) |
| Activée | Activer/désactiver |
| Commentaire | Commentaire automatiquement enregistré lors du déclenchement de l'escalade |
| Condition | Template conditionnel — l'escalade ne se déclenche que si la condition est vraie |
Le système vérifie les escalades toutes les 5 minutes par défaut (paramètre MAYAN_WORKFLOW_STATE_ESCALATION_CHECK_INTERVAL, en secondes). Une escalade configurée à 10 minutes peut donc se déclencher entre 10 et 15 minutes après l'entrée dans l'état.
Le délai est calculé à partir du dernier log de transition (ou de la date de création de l'instance si aucune transition n'a eu lieu).
Escalade sur l'état En attente de validation :
2, Unité : daysEscalader vers responsable→ Si le document reste 2 jours sans validation, la transition est automatiquement déclenchée.
Les conditions des transitions, actions et escalades, ainsi que de nombreux champs des actions, utilisent le moteur de templates Django standard.
{# Variable simple #}
{{ workflow_instance.document.label }}
{# Condition booléenne — retourner une chaîne non-vide = True #}
{% if workflow_instance.document.label == "Urgent" %}True{% endif %}
{# Boucle #}
{% for cabinet in workflow_instance.document.cabinets.all %}{{ cabinet.label }},{% endfor %}
{# Accès au contexte du workflow (champs de transition) #}
{{ workflow_instance_context.motif_rejet }}
| Tag/Filtre | Usage |
|---|---|
{{ var\|dict_get:"key" }} |
Valeur d'un dictionnaire |
{{ var\|object_flatten }} |
Aplatir un objet en dict plat |
{% method obj "method_name" %} |
Appeler une méthode sur un objet Python (activé par défaut) |
{% set value %} |
Définir une valeur |
{% range start end %} |
Générer une séquence |
{{ var\|yaml_dump }} |
Sérialiser en YAML |
⚠️ Le tag
{% method %}est puissant mais sensible — voir la note de sécurité VULN-4.
Les variables suivantes sont disponibles dans toutes les conditions et champs de type template des actions :
| Variable | Type | Description |
|---|---|---|
workflow_instance |
WorkflowInstance | Instance du workflow en cours |
workflow_instance.document |
Document | Le document concerné |
workflow_instance.workflow |
Workflow | Le gabarit de workflow |
workflow_instance.state_active |
WorkflowState | État actuel |
workflow_instance_context |
dict | Données accumulées (champs de transition, réponses HTTP…) |
{{ workflow_instance.document.label }}
{{ workflow_instance.document.description }}
{{ workflow_instance.document.date_added }}
{{ workflow_instance.document.document_type.label }}
{{ workflow_instance.document.file_latest.mimetype }}
{{ workflow_instance.document.file_latest.size }}
{{ workflow_instance.document.cabinets.all }} {# cabinets du document #}
{{ workflow_instance.document.tags.all }} {# tags du document #}
{% for m in workflow_instance.document.metadata.all %}
{{ m.metadata_type.label }}: {{ m.value }}
{% endfor %}
L'action HTTPAction avec response_store=True stocke dans workflow_instance_context :
{{ workflow_instance_context.last_http_request.status_code }}
{{ workflow_instance_context.last_http_request.json }}
{{ workflow_instance_context.last_http_request.text }}
Quand une transition est déclenchée par un trigger, les données de l'événement déclencheur (ex. quel cabinet a été utilisé) ne sont pas transmises au contexte. Pour identifier le cabinet qui a déclenché un trigger cabinet.add_document, utiliser une condition sur workflow_instance.document.cabinets.all.
Modify document properties — Modifier les propriétésModifie le label et/ou la description du document.
| Champ | Requis | Description |
|---|---|---|
document_label |
Non | Nouveau label — template Django |
document_description |
Non | Nouvelle description — template Django |
Exemple — renommer un document à l'approbation :
document_label : [Approuvé] {{ workflow_instance.document.label }}
Launch workflows — Lancer des workflowsLance d'autres workflows sur le même document.
| Champ | Requis | Description |
|---|---|---|
workflows |
Oui | Sélection multiple des workflows à lancer |
Perform an HTTP request — Requête HTTPAppelle un endpoint HTTP externe (webhook, API REST, notification).
| Champ | Requis | Description |
|---|---|---|
url |
Oui | URL — template Django. Ex. https://api.example.com/notify/{{ workflow_instance.document.pk }} |
method |
Oui | Méthode HTTP : GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS |
headers |
Non | Headers JSON — template. Ex. {"Authorization": "Bearer {{ workflow_instance_context.token }}"} |
payload |
Non | Corps JSON — template. Ex. {"document": "{{ workflow_instance.document.label }}"} |
username |
Non | Utilisateur auth Basic — template |
password |
Non | Mot de passe auth Basic — template |
verify_certificate |
Non | Vérifier le certificat SSL (défaut : True) |
timeout |
Non | Timeout en secondes (défaut : 4) |
response_store |
Non | Stocker la réponse dans le contexte |
response_store_name |
Non | Nom de la variable de stockage (défaut : last_http_request) |
Données disponibles après stockage de la réponse :
{{ workflow_instance_context.last_http_request.status_code }}
{{ workflow_instance_context.last_http_request.json }}
{{ workflow_instance_context.last_http_request.text }}
{{ workflow_instance_context.last_http_request.headers }}
{{ workflow_instance_context.last_http_request.reason }}
Attach tag — Attacher une étiquetteAttache un ou plusieurs tags au document.
| Champ | Requis | Description |
|---|---|---|
tags |
Oui | Sélection multiple des tags à attacher |
Permission requise : permission_tag_attach
Remove tag — Retirer une étiquetteRetire un ou plusieurs tags du document.
| Champ | Requis | Description |
|---|---|---|
tags |
Oui | Sélection multiple des tags à retirer |
Permission requise : permission_tag_remove
Add to cabinets — Ajouter à des cabinetsAjoute le document à un ou plusieurs cabinets.
| Champ | Requis | Description |
|---|---|---|
cabinets |
Oui | Sélection multiple des cabinets cibles |
Permission requise : permission_cabinet_add_document
Remove from cabinets — Retirer de cabinetsRetire le document d'un ou plusieurs cabinets.
| Champ | Requis | Description |
|---|---|---|
cabinets |
Oui | Sélection multiple des cabinets |
Permission requise : permission_cabinet_remove_document
Change document type — Changer le type de documentChange le type du document, ce qui peut déclencher d'autres workflows.
| Champ | Requis | Description |
|---|---|---|
document_type |
Oui | Nouveau type de document |
Send document to trash — Mettre à la corbeilleEnvoie le document à la corbeille (suppression logique).
Aucun champ à configurer.
Send user message — Envoyer un message interneEnvoie un message interne Mayan à des utilisateurs, membres de groupes ou membres de rôles.
| Champ | Requis | Description |
|---|---|---|
username_list |
Non* | Usernames séparés par virgule — template. Ex. admin,validateur1 |
group_name_list |
Non* | Noms de groupes séparés par virgule — template |
role_name_list |
Non* | Labels de rôles séparés par virgule — template |
subject |
Oui | Sujet du message — template |
body |
Oui | Corps du message — template |
*Au moins un des trois premiers champs doit être renseigné.
Exemple :
subject : Validation requise — {{ workflow_instance.document.label }}
body : Le document "{{ workflow_instance.document.label }}" est en attente de votre validation.
Type : {{ workflow_instance.document.document_type.label }}
Déposé le : {{ workflow_instance.document.date_added }}
Add metadata — Ajouter des métadonnéesAjoute un ou plusieurs types de métadonnées au document (sans définir de valeur).
| Champ | Requis | Description |
|---|---|---|
metadata_types |
Oui | Sélection multiple des types de métadonnées à ajouter |
Permission requise : permission_document_metadata_add
Edit metadata — Modifier une métadonnéeDéfinit ou modifie la valeur d'une métadonnée existante sur le document.
| Champ | Requis | Description |
|---|---|---|
metadata_type |
Oui | Type de métadonnée à modifier |
value |
Oui | Nouvelle valeur — template Django |
Exemple :
value : {{ workflow_instance.document.date_added|date:"Y" }}
Remove metadata — Supprimer des métadonnéesRetire un ou plusieurs types de métadonnées du document.
| Champ | Requis | Description |
|---|---|---|
metadata_types |
Oui | Sélection multiple des types à retirer |
Permission requise : permission_document_metadata_remove
Sign document (detached) — Signer (signature détachée)Signe le fichier document avec une signature GPG détachée.
| Champ | Requis | Description |
|---|---|---|
key |
Oui | Clé privée GPG à utiliser |
passphrase |
Non | Passphrase pour déverrouiller la clé |
Permission requise : permission_key_sign
Sign document (embedded) — Signer (signature embarquée)Signe le fichier document avec une signature GPG intégrée dans le fichier.
| Champ | Requis | Description |
|---|---|---|
key |
Oui | Clé privée GPG à utiliser |
passphrase |
Non | Passphrase pour déverrouiller la clé |
Permission requise : permission_key_sign
Add transformation — Ajouter une transformationAjoute une transformation visuelle (rotation, recadrage, zoom, filigrane…) aux pages du document.
| Champ | Requis | Description |
|---|---|---|
pages |
Non | Pages cibles. Format : 1, 1,3, 2-5, vide = toutes les pages |
transformation_class |
Oui | Type de transformation (liste déroulante) |
transformation_arguments |
Non | Arguments de la transformation en YAML/JSON — template |
Grant document access — Accorder l'accès au documentAccorde des permissions sur le document du workflow à des rôles spécifiques (via ACL).
| Champ | Requis | Description |
|---|---|---|
roles |
Oui | Rôles bénéficiaires |
permissions |
Oui | Permissions à accorder (ex. permission_document_view) |
Permission requise : permission_acl_edit
Revoke document access — Révoquer l'accès au documentRévoque des permissions sur le document du workflow pour des rôles spécifiques.
| Champ | Requis | Description |
|---|---|---|
roles |
Oui | Rôles concernés |
permissions |
Oui | Permissions à révoquer |
Permission requise : permission_acl_edit
Grant object access — Accorder l'accès à un objet quelconqueAccorde des permissions sur n'importe quel objet Mayan (pas seulement le document) à des rôles.
| Champ | Requis | Description |
|---|---|---|
content_type |
Oui | Type de l'objet (ContentType Django) |
object_id |
Oui | Identifiant numérique de l'objet |
roles |
Oui | Rôles bénéficiaires |
permissions |
Oui | Permissions à accorder |
Revoke object access — Révoquer l'accès à un objet quelconqueMême structure que Grant object access, en mode révocation.
Update document page OCR content — Mettre à jour le contenu OCRPermet de modifier programmatiquement le contenu OCR reconnu sur chaque page.
| Champ | Requis | Description |
|---|---|---|
page_condition |
Non | Template évalué pour chaque page — si vide/faux, la page est ignorée |
page_content |
Non | Nouveau contenu OCR à assigner — template |
Send document via email — Envoyer par emailEnvoie le document par email (via un profil de messagerie configuré).
| Champ | Requis | Description |
|---|---|---|
mailing_profile |
Oui | Profil SMTP à utiliser |
to |
Oui | Destinataires — template |
cc |
Non | Copie — template |
bcc |
Non | Copie cachée — template |
subject |
Oui | Sujet — template |
body |
Non | Corps — template |
attachment |
Non | Joindre le fichier du document |
Permission requise : permission_mailing_profile_use
Un trigger est configuré sur une transition et associe cette transition à un événement Mayan. Voici tous les événements utilisables comme triggers, groupés par app.
| Événement | Description |
|---|---|
document_created |
Document créé |
document_edited |
Métadonnées du document modifiées |
document_viewed |
Document consulté |
document_type_changed |
Type de document changé |
document_file_created |
Nouveau fichier attaché |
document_file_edited |
Fichier modifié |
document_file_deleted |
Fichier supprimé |
document_version_created |
Nouvelle version créée |
document_version_edited |
Version modifiée |
document_version_deleted |
Version supprimée |
document_version_page_created |
Page de version créée |
document_version_page_edited |
Page de version modifiée |
document_version_page_deleted |
Page de version supprimée |
document_trashed |
Document mis à la corbeille |
trashed_document_deleted |
Document supprimé définitivement |
trashed_document_restored |
Document restauré de la corbeille |
| Événement | Description |
|---|---|
tag_attached |
Tag attaché au document |
tag_removed |
Tag retiré du document |
tag_created |
Tag créé (système) |
tag_edited |
Tag modifié (système) |
| Événement | Description |
|---|---|
document_metadata_added |
Métadonnée ajoutée au document |
document_metadata_edited |
Valeur de métadonnée modifiée |
document_metadata_removed |
Métadonnée retirée du document |
metadata_type_created |
Type de métadonnée créé (système) |
metadata_type_edited |
Type de métadonnée modifié (système) |
metadata_type_relationship_updated |
Association type ↔ type de document mise à jour |
| Événement | Description |
|---|---|
cabinet.add_document |
Document ajouté à un cabinet |
cabinet.remove_document |
Document retiré d'un cabinet |
cabinet_created |
Cabinet créé (système) |
cabinet_edited |
Cabinet modifié (système) |
cabinet_deleted |
Cabinet supprimé (système) |
| Événement | Description |
|---|---|
document_checked_out |
Document emprunté |
document_checked_in |
Document restitué |
document_auto_checked_in |
Document automatiquement restitué (expiration) |
document_forcefully_checked_in |
Document restitué de force |
| Événement | Description |
|---|---|
comment_created |
Commentaire ajouté |
comment_edited |
Commentaire modifié |
comment_deleted |
Commentaire supprimé |
| Événement | Description |
|---|---|
detached_signature_created |
Signature détachée créée |
detached_signature_uploaded |
Signature détachée uploadée |
detached_signature_deleted |
Signature détachée supprimée |
embedded_signature_created |
Signature embarquée détectée |
| Événement | Description |
|---|---|
parsing_document_file_submitted |
Fichier soumis au parsing |
parsing_document_file_finished |
Parsing terminé |
parsing_document_file_content_deleted |
Contenu parsé supprimé |
| Événement | Description |
|---|---|
ocr_document_version_submitted |
Version soumise à l'OCR |
ocr_document_version_finished |
OCR terminé |
ocr_document_version_content_deleted |
Contenu OCR supprimé |
ocr_document_version_page_content_edited |
Contenu OCR d'une page modifié |
| Événement | Description |
|---|---|
file_metadata_document_file_submitted |
Fichier soumis à l'extraction de métadonnées |
file_metadata_document_file_finished |
Extraction de métadonnées terminée |
| Événement | Description |
|---|---|
workflow_instance_created |
Une instance de workflow a été créée |
workflow_instance_transitioned |
Une transition a été effectuée |
workflow_template_created |
Un gabarit de workflow a été créé |
workflow_template_edited |
Un gabarit de workflow a été modifié |
Objectif : Les factures doivent être validées par un comptable avant d'être archivées.
[Soumise] ──(Approuver)──► [Approuvée] ──(Archiver)──► [Archivée]
│
└──(Rejeter)──► [Rejetée]
États :
Soumise (initial) — completion: 0Approuvée — completion: 80Rejetée (final) — completion: 100Archivée (final) — completion: 100Transitions :
Approuver : Soumise → Approuvée
commentaire_validation (texte, optionnel)Rejeter : Soumise → Rejetée
motif_rejet (texte, requis)Archiver : Approuvée → ArchivéeActions sur Approuvée (on entry) :
Attach tag → tag "Approuvé"Send user message → à role_name_list: Archivistes, sujet Facture à archiver, corps :La facture "{{ workflow_instance.document.label }}" a été approuvée.
Commentaire : {{ workflow_instance_context.commentaire_validation }}
Actions sur Rejetée (on entry) :
Attach tag → tag "Rejeté"Send user message → à l'émetteur (si connu via métadonnée), corps :Votre document "{{ workflow_instance.document.label }}" a été rejeté.
Motif : {{ workflow_instance_context.motif_rejet }}
Objectif : Si une facture n'est pas validée dans les 3 jours ouvrables, escalader vers le responsable.
Escalade sur l'état Soumise :
Escalader3, Unité : daysEscalade automatique après 3 jours sans validationTransition Escalader : Soumise → En attente escalade
Actions sur En attente escalade (on entry) :
Send user message → role_name_list: Responsables comptables
⚠️ Validation en retard — {{ workflow_instance.document.label }}La facture est en attente depuis plus de 3 jours.Attach tag → tag "Escaladé"Objectif : Quand le tag "Urgent" est attaché à un contrat, déclencher automatiquement la transition vers l'état "Traitement prioritaire".
Trigger sur la transition Prioriser :
tag_attachedCondition sur la transition Prioriser :
{% for tag in workflow_instance.document.tags.all %}{% if tag.label == "Urgent" %}True{% endif %}{% endfor %}
→ La transition n'est déclenchée que si le document a effectivement le tag "Urgent" (pas pour n'importe quel tag).
Objectif : Notifier un système externe (ERP, Slack…) quand un document est approuvé.
Action HTTP sur l'état Approuvé (on entry) :
url : https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXX
method : POST
headers : {"Content-Type": "application/json"}
payload : {"text": "✅ Document approuvé : *{{ workflow_instance.document.label }}*\nType : {{ workflow_instance.document.document_type.label }}"}
Objectif : La transition Approuver n'est disponible que si le montant (métadonnée) est inférieur à 10 000 €.
Condition sur la transition Approuver :
{% for m in workflow_instance.document.metadata.all %}{% if m.metadata_type.label == "Montant" %}{% if m.value|add:"0" < 10000 %}True{% endif %}{% endif %}{% endfor %}
Objectif : Appeler une API pour récupérer un token, puis l'utiliser dans un second appel.
Action 1 — 01 Obtenir token (on entry) :
url : https://api.example.com/auth/token
method : POST
payload : {"client_id": "mayan", "client_secret": "xxx"}
response_store : True
response_store_name : auth_response
Action 2 — 02 Notifier API (on entry) :
url : https://api.example.com/documents/notify
method : POST
headers : {"Authorization": "Bearer {{ workflow_instance_context.auth_response.json.access_token }}"}
payload : {"document_id": "{{ workflow_instance.document.pk }}"}
Administration > Workflows > Gabarits de workflow > Créer
[Gabarit] > Arbre du gabarit > Créer état
[Gabarit] > Arbre du gabarit > [État] > Transitions > Ajouter
[Transition] > Champs > Ajouter
[Transition] > Déclencheurs > Configurer
Cocher les événements devant déclencher cette transition automatiquement.
[État] > Actions > Créer
On entry / On exit)[État] > Escalades > Créer
[Gabarit] > Aperçu — génère un diagramme graphique du workflow.
[Document] > Workflows que l'instance a été créée à l'état initial| Action | Chemin |
|---|---|
| Lister les workflows | Administration > Workflows > Gabarits |
| Voir le workflow d'un document | [Document] > Onglet Workflows |
| Exécuter une transition | [Document] > Workflows > [Instance] > Transitions |
| Voir l'historique | [Document] > Workflows > [Instance] > Journal |
| Code | Type Django | Usage |
|---|---|---|
1 |
CharField |
Texte court |
2 |
IntegerField |
Nombre entier |
| Code | Widget | Usage |
|---|---|---|
1 |
Textarea |
Texte long (commentaires, descriptions) |
| Valeur | Description |
|---|---|
seconds |
Secondes |
minutes |
Minutes |
hours |
Heures |
days |
Jours |
| Code | Description |
|---|---|
1 |
On entry — à l'entrée dans l'état |
2 |
On exit — à la sortie de l'état |
Généré le 2026-04-30 — Fork 4.11.1+egyptian.1, branche egyptian.
Sources : mayan/apps/document_states/, mayan/apps/*/workflow_actions.py