Un tarif modifié après acceptation d’un devis reste l’un des incidents les plus délicats à gérer pour un artisan : le client a donné son accord sur un montant précis, et toute variation ultérieure, même involontaire, ressemble à une tentative de renégociation après coup.
Le scénario se répète pourtant régulièrement : l’artisan met à jour ses tarifs généraux pour l’année, oublie qu’un devis déjà accepté partage le même champ que le catalogue de prestations, et le montant affiché sur la fiche du client change sans que personne n’ait voulu y toucher.
Séparer le tarif catalogue du tarif figé
La première erreur de conception consiste souvent à faire pointer chaque devis directement vers le tarif catalogue en temps réel, plutôt que de copier ce tarif au moment de l’acceptation. Une fois cette distinction posée, le verrouillage devient un problème beaucoup plus simple à résoudre.
Copier le prix au moment de l’acceptation

Dès que le statut du devis passe à « accepté », le prix courant du catalogue est copié dans un champ dédié à la fiche devis, indépendant du tarif général, qui peut continuer d’évoluer librement sans effet rétroactif.
add_action( 'acf/save_post', function( $post_id ) {
if ( get_post_type( $post_id ) !== 'devis_artisan' ) {
return;
}
$statut = get_field( 'statut_devis', $post_id );
if ( $statut === 'accepte' ) {
$prix_deja_fige = get_field( 'prix_fige', $post_id );
if ( empty( $prix_deja_fige ) ) {
$prix_catalogue = get_field( 'prix_prestation', $post_id );
update_field( 'prix_fige', $prix_catalogue, $post_id );
}
}
}, 20 );
La vérification empty( $prix_deja_fige ) garantit qu’une fois figé, le prix ne sera plus jamais recopié, même si le devis repasse temporairement par un autre statut avant de revenir à « accepté ».
Verrouiller le champ dans l’interface
Copier la valeur ne suffit pas si le champ reste éditable dans l’écran d’administration : un artisan pressé pourrait modifier directement le champ figé. Le filtre acf/prepare_field permet de rendre le champ non modifiable dès que le devis est accepté.
add_filter( 'acf/prepare_field/name=prix_fige', function( $field ) {
$post_id = get_the_ID();
$statut = get_field( 'statut_devis', $post_id );
if ( $statut === 'accepte' ) {
$field['readonly'] = true;
}
return $field;
} );
Prévoir une exception encadrée
- Déverrouillage réservé à un rôle spécifique, jamais à l’artisan seul
- Justification textuelle obligatoire en cas de modification exceptionnelle
- Historique conservé dans un journal séparé, non modifiable a posteriori
Un cas légitime existe : une erreur de saisie manifeste détectée juste après l’acceptation, avant tout début de prestation. Il faut alors une procédure explicite, pas un simple déverrouillage discret du champ.
Un prix qu’on peut modifier sans laisser de trace n’est pas un prix figé, c’est un prix provisoire qui ne dit pas son nom.
Journaliser toute tentative de modification
Consigner, via un enregistrement séparé horodaté, chaque tentative de modification du champ figé, réussie ou bloquée, donne à l’artisan une traçabilité complète en cas de litige avec un client sur le montant réellement accepté.
Informer le client du gel appliqué
Un devis accepté gagne à mentionner explicitement, sur le document remis au client, que le prix indiqué est désormais figé et ne pourra plus évoluer avant la réalisation de la prestation, sauf avenant signé pour des travaux supplémentaires clairement identifiés. Cette mention écrite évite toute ambiguïté ultérieure sur la portée réelle de l’engagement pris par l’artisan.
Le cas des avenants
Un chantier qui évolue en cours de réalisation, avec des travaux supplémentaires non prévus initialement, ne doit jamais modifier le prix figé du devis d’origine. Un avenant distinct, avec son propre champ de prix et sa propre date d’acceptation, garde la traçabilité complète de chaque évolution du montant total facturé au client.
En résumé
Copier le prix au moment de l’acceptation puis verrouiller le champ correspondant élimine le risque de modification accidentelle après engagement du client. La facturation finale, avec ses éventuels ajustements pour travaux supplémentaires, reste un processus distinct qui s’appuie sur ce prix figé comme référence de départ.