Skip to content

ETQ instructeur, je peux modifier le dossier d'un usager#13326

Merged
tchak merged 10 commits into
mainfrom
push-muznruslznky
Jun 30, 2026
Merged

ETQ instructeur, je peux modifier le dossier d'un usager#13326
tchak merged 10 commits into
mainfrom
push-muznruslznky

Conversation

@tchak

@tchak tchak commented Jun 18, 2026

Copy link
Copy Markdown
Member

Contexte

Lorsqu'un dossier est en construction, l'instructeur ne pouvait pas corriger lui-même
une information : il devait demander à l'usager de le faire. Cette PR permet à un
instructeur de modifier directement les champs publics d'un dossier en construction,
tout en gardant une trace de l'intervention et en notifiant l'usager.

Activation par démarche

La fonctionnalité est désactivée par défaut. Elle s'active démarche par démarche via une
nouvelle option « Modification des dossiers usagers par les instructeurs », dans les
options concernant l'instruction (à côté de l'autogestion des instructeurs).

Fonctionnement

  • Depuis la vue d'un dossier en construction, l'instructeur dispose d'un bouton
    « Modifier le dossier » qui ouvre un formulaire d'édition dédié.
  • Les modifications sont enregistrées au fil de l'eau sur un buffer stream propre à
    l'instructeur : elles ne sont appliquées au dossier qu'au moment de la validation.
  • Une fenêtre de confirmation récapitule les changements, permet d'ajouter un message
    facultatif, et rappelle que toute modification est historisée et notifiée à l'usager.
  • À la validation, les changements sont fusionnés dans le dossier, un Traitement est
    enregistré (avec l'instructeur à l'origine de la modification et son éventuelle
    motivation), et un message est automatiquement envoyé à l'usager via la messagerie,
    détaillant les champs modifiés.

Garde-fous

  • La fonctionnalité n'est accessible que si l'option est activée sur la démarche, pour un
    dossier en construction, et uniquement aux instructeurs du groupe instructeur
    concerné.
  • Si l'instructeur est aussi le propriétaire du dossier, l'édition « instructeur » est
    désactivée (il utilise le parcours usager classique).

Détails techniques

  • Nouvelle option de démarche instructeurs_can_edit_dossiers (désactivée par défaut),
    exposée via un toggle dans les options d'instruction.
  • Nouveau Instructeurs::EditController (édition, autosave, soumission) + routes
    associées.
  • Nouveaux composants : EditDossierAlertComponent, EditDossierConfirmComponent,
    EditDossierFooterComponent, et Message::DossierModifierParInstructeurComponent
    (corps du message de notification).
  • Côté modèle : can_update_as_instructeur? (conditionné à l'option de la démarche),
    fusion du buffer stream instructeur et instructeur_submit_en_construction!.
  • API GraphQL : nouveau champ dateDerniereModificationChampsParInstructeur sur le
    Dossier.

Tests

  • Test système de bout en bout (édition + notification, annulation, indisponibilité
    pour le propriétaire et lorsque l'option est désactivée).
  • Tests de composant pour le message de notification (changements détaillés / génériques,
    assainissement de la motivation).
  • Test de régression au niveau modèle sur le calcul des champs modifiés et sur les
    conditions de can_update_as_instructeur?.

Ref #11551

@tchak
tchak force-pushed the push-muznruslznky branch 4 times, most recently from 935aa01 to deda442 Compare June 18, 2026 15:35
@tchak
tchak marked this pull request as ready for review June 18, 2026 15:35
@tchak
tchak force-pushed the push-muznruslznky branch from deda442 to fc07e67 Compare June 18, 2026 15:44
@tchak tchak changed the title feat(dossier): etq instructeur je peux modifier un dossier ETQ instructeur, je peux modifier le dossier d'un usager Jun 18, 2026
@tchak
tchak force-pushed the push-muznruslznky branch from bad6ca5 to 2b69303 Compare June 18, 2026 19:47

@E-L-T E-L-T left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C'est trop bien 👌 Quelques petites remarques par-ci par-là :

  • Suite a une modification par l'instructeur

    • Il me semble que l'usager n'est pas notifié.
    • dans l'onglet Demande, ETQ instructeur, je vois un badge "modifié par l'usager" sur un champ alors que ce n'est pas le cas.
  • Dans Personnes impliquées, on pourrait écrire "dossier modifié par" plutôt que "corrigé par" ?

  • il faudrait ajouter un hr dans la page Options des groupes instructeurs

  • Le garde fou d'interdire a un instructeur de modifier le dossier dont il est propriétaire est il nécessaire (sachant qu'actuellement un instructeur peut instruire son propre dossier) ? Ça sera peut-être un peu gênant pour les admins qui voudraient tester la fonctionnalité.

  • Il y a un double scroll dans la modale de confirmation, ce qui fait qu'on peut passer à côté de la possibilité d'envoyer un message de confirmation

@mfo mfo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

deja bravo ! 1ere revue de surface humaine. j'en ferai une 2nd accompagné de claude avec test de la feature.

Des trads manquantes, plutot que pointer a gauche a droite je te propose des patchs de fixup. A prendre ou a laisser ;-)

0005-fixup-feat-procedure-gate-instructeur-dossier-editio.patch
0004-fixup-feat-dossier-etq-instructeur-je-peux-modifier-.patch
0003-fixup-feat-dossier-notify-usager-when-an-instructeur.patch
0002-fixup-feat-dossier-add-EditDossierConfirmComponent.patch
0001-fixup-feat-dossier-add-EditDossierAlertComponent.patch

Je reprends la review avec les notes a moi même voir si on peut simplifier certaines partie.

Comment thread app/models/concerns/dossier_champs_concern.rb
Comment thread app/models/concerns/dossier_champs_concern.rb
Comment thread app/models/concerns/dossier_champs_concern.rb
Comment thread app/models/concerns/dossier_champs_concern.rb
Comment thread app/models/concerns/dossier_champs_concern.rb
Comment thread app/models/concerns/columns_concern.rb
Comment thread app/controllers/instructeurs/edit_controller.rb
Comment thread app/controllers/instructeurs/edit_controller.rb
@tchak

tchak commented Jun 19, 2026

Copy link
Copy Markdown
Member Author

Le garde fou d'interdire a un instructeur de modifier le dossier dont il est propriétaire est il nécessaire (sachant qu'actuellement un instructeur peut instruire son propre dossier) ? Ça sera peut-être un peu gênant pour les admins qui voudraient tester la fonctionnalité.

C'est une contrainte tech. Sans cette contrainte il faut ajouter du code à beaucoup d'endroits... J'ajouterais un peu d'explication à la PR. De plus, si c'est son propre dossier, il peut aller le modifier en tant qu'usager...

Il y a un double scroll dans la modale de confirmation, ce qui fait qu'on peut passer à côté de la possibilité d'envoyer un message de confirmation

C'est une contrainte du design proposé par @marleneklok, on peut en discuter au point UX

Il me semble que l'usager n'est pas notifié

🤦‍♂️ done

il faudrait ajouter un hr dans la page Options des groupes instructeurs

done

@marleneklok

Copy link
Copy Markdown

Il y a un double scroll dans la modale de confirmation, ce qui fait qu'on peut passer à côté de la possibilité d'envoyer un message de confirmation

C'est une contrainte du design proposé par @marleneklok, on peut en discuter au point UX

Si j'ai possibilité de tester sur la dev, ça m'intéresse ;) (car là je peux pas trop visualiser cette histoire de double scroll)

Comment thread app/views/instructeurs/edit/update.turbo_stream.erb Outdated
@tchak
tchak force-pushed the push-muznruslznky branch 4 times, most recently from 11a2ffc to 72d0e15 Compare June 23, 2026 09:29

@LeSim LeSim left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

première passe. Rien vu de choquant. Ca a l'air trop bien.

Je vais refaire une seconde passe de test


def with_update_stream(user, &block)
if en_construction? && user.owns_or_invite?(self)
if can_update_as_user?(user)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should_update_as_user?

end

def can_update_as_instructeur?(user)
return false unless en_construction?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

je me demande si ce n'est pas une restriction superflue. Marlene propose également de pouvoir modifier un dossier en_instruction

return false unless en_construction?
return false unless procedure.instructeurs_can_edit_dossiers?
return false unless user.instructeur?
return false if can_update_as_user?(user)

@LeSim LeSim Jun 23, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alors je comprends ce que tu proposes, mais c'est chiant pour les tests et je me demande si ca ne vas géner la découvrabilité de la feature.

J'ai vu que d'autres personnes ont remonté le point avant moi.

Proposition UX: dans le cas ou c'est un instructeur qui veut modifier son propre dossier (sûrement a des fin des tests) est ce qu'on ne pourrait pas afficher le bouton modifier sur le dossier usager mais le brancher sur une alerte qui préviendrait qu'un instructeur ne peut pas modifier son propre dossier ?

@LeSim LeSim left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bon alors, je suis peut être trop enthousiaste mais je serai chaud pour qu'on envoie !

J'ai des ptits soucis de nommage et de compréhension de ma part (checkpoint ?) mais de toutes les facons, cela n'a pas été introduit dans cette pr.

J'ai testé et ... ca marche d'enfer, c'est une super évol, je suis méga fan.

Ptit bug technique :
Un instructeur ne peut pas uploader de pj, ca doit se jouer au niveau des permissions de app/controllers/attachments_controller.rb

Ptits point UX mineurs et subjectifs :

Je trouve l'entete de la page de modification super chargé ! plus de marge ?

Image

Dans les personnes impliquées, peut être indiquer la qualité d'instructeur a coté de son email ? D'ailleurs, gères-tu l'anonymisation de l'instructeur ?

Image

Le rendu des modifs est un poil lourd vous trouvez pas ?

Image

MAIS je pense que tout ceci est mineur par rapport au gain de cette feature.

Allez, je reste embêter par cette histoire que l'instructeur ne peut pas modifier son propre dossier, je pense que ca dessert la feature, mais la correction peut venir plus tard...

@tchak
tchak force-pushed the push-muznruslznky branch 2 times, most recently from 3bce70c to a76c6b9 Compare June 24, 2026 12:38
to_show, to_hide = champs.filter { it.conditional? || it.child? }
.partition(&:visible?)
.map { champs_to_one_selector(_1 - to_update) }
to_update = champs.filter { it.public_id.in?(params.keys) }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

trop classes les changements ici !

@marleneklok

marleneklok commented Jun 24, 2026

Copy link
Copy Markdown

Retours UX/UI

Modale pour confirmer les modifications

Je trouve que la double indentation dans la liste des modifications la rend peu lisible.
Et la différence graphique n'est pas évidente entre le message en "lecture seule" VS. le message complémentaire (champ de saisie). Les deux zones ont le même fond gris, donc je crains que des instructeurs essaient d'aller personnaliser le premier message automatique qui liste les modifications.

image

Recos :

  • Présenter la liste des modifs avec des puces et sans indentation.
  • Mettre une couleur de background plus claire (voire pas de background) pour qu’on distingue mieux cette zone de celle du champ de saisie en dessous « Votre message complémentaire ».
image

Badge "MODIFIÉ LE..."

Appliquer la même hauteur de badge que celui d'une modification faite par l'usager :

image

Pour l'icône permettant d'afficher l'identité de l'instructeur qui a fait la modification, j'étais plutôt partie sur l'icône information-line
information -> ( i ) et pas vraiment aide -> ( ? ) dans ce contexte

image

Fonction indisponible

Reco de @mfo : dans le cas où la fonction n'est pas disponible, présenter le bouton "Modifier le dossier" en mode désactivé avec un tooltip explicitant la raison pour laquelle on ne peut pas modifier le dossier.

image

Retours de @LeSim

Page de modification
Entête de la page de modification chargé / plus de marge ?
-> Effectivement, on peut aérer un peu par rapport à la version cible, et peut-être rajouter l'espèce de cartouche bleu qui permet de structurer un peu ?

image

Dans les personnes impliquées
Peut-être indiquer la qualité d'instructeur à côté de son email ?
-> On peut, mais dans ce cas il faut le faire à chaque fois qu'on cite un instructeur (cf. l'instructeur qui passe le dossier en instruction, qui donne une décision, etc.) :

image

@tchak
tchak force-pushed the push-muznruslznky branch 5 times, most recently from 45972aa to 93a298e Compare June 29, 2026 08:40
@tchak

tchak commented Jun 29, 2026

Copy link
Copy Markdown
Member Author

un fix dans une autre PR #13369

@tchak
tchak force-pushed the push-muznruslznky branch from 93a298e to 8568522 Compare June 29, 2026 12:08
@tchak
tchak force-pushed the push-muznruslznky branch from 8568522 to cc11461 Compare June 30, 2026 09:35
tchak and others added 10 commits June 30, 2026 11:36
Add the instructeur buffer stream, can_update_as_instructeur?,
instructeur_submit_en_construction! and the changed-columns checkpoint
fix used to notify the usager.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… Dossier

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add DossierModifierParInstructeurComponent (commentaire body) and surface
the changed champ in ChangesComponent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire up the instructeur dossier edition: controller, routes, edit views
and the entry point in the dossier demande, plus the end-to-end system test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…option

Add the instructeurs_can_edit_dossiers procedure option (off by default),
exposed as a toggle in the instruction options. can_update_as_instructeur?
now requires the option to be enabled.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…translations

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@tchak
tchak force-pushed the push-muznruslznky branch from cc11461 to 6cbf128 Compare June 30, 2026 09:37
@tchak
tchak added this pull request to the merge queue Jun 30, 2026
Merged via the queue into main with commit f24e4db Jun 30, 2026
20 checks passed
@tchak
tchak deleted the push-muznruslznky branch June 30, 2026 10:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants