ModulesFormulaire dynamique

Formulaire dynamique

Moteur de formulaires conditionnels piloté par un schéma JSON : les champs, les règles de visibilité et la validation changent selon le type de demande. Testez les trois formulaires du guichet interne dans le Simulateur.

Métier

Ouvrir le simulateur

À propos

Le module Formulaire dynamique est un moteur de formulaires conditionnels piloté par un schéma JSON. Le cas métier : un guichet de demandes internes (congés, achat de matériel, accès applicatif) où les champs affichés dépendent du type de demande et des réponses déjà saisies. Le formulaire n'est pas codé en dur : un renderer générique parcourt le schéma, mappe chaque fieldType vers un composant bpm et applique les règles visibleIf en direct — un congé « sans solde » fait apparaître une justification requise, un achat de plus de 1 000 € exige une validation directeur, un profil admin impose un motif et une durée limitée.

Composants utilisés

bpm.selectbox, bpm.input, bpm.textarea, bpm.checkbox, bpm.radioGroup et bpm.dateInput pour les champs ; bpm.message pour les avertissements conditionnels ; bpm.panel + bpm.labelValue pour le récapitulatif ; bpm.table + bpm.badge pour les demandes soumises ; bpm.jsonViewer pour le schéma ; bpm.metricRow et bpm.toast pour le suivi.

import bpm

schema = load_form_schema("achat-materiel")  # le schéma JSON pilote tout

for field in schema["fields"]:
    if not visible(field, values):          # règle visibleIf évaluée en direct
        continue
    if field["type"] == "select":
        bpm.selectbox(field["label"], options=field["options"])
    elif field["type"] == "textarea":
        bpm.textarea(field["label"])
    elif field["type"] == "date":
        bpm.dateInput(field["label"])

bpm.button("Soumettre la demande", on_click=valider_et_soumettre)

Paramétrage

Le simulateur fonctionne entièrement en local : trois schémas seedés, validation par champ et tableau des demandes en état React. En production, les schémas sont servis par une API et versionnés ; le renderer reste identique. Voir la documentation pour la spécification complète du schéma (types de champs, conditions, validation).