diff --git a/app/tasks/maintenance/resolve_pending_correction_for_dossier_with_invalid_commune_external_id_task.rb b/app/tasks/maintenance/resolve_pending_correction_for_dossier_with_invalid_commune_external_id_task.rb
new file mode 100644
index 000000000..a48c2d978
--- /dev/null
+++ b/app/tasks/maintenance/resolve_pending_correction_for_dossier_with_invalid_commune_external_id_task.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+module Maintenance
+  class ResolvePendingCorrectionForDossierWithInvalidCommuneExternalIdTask < MaintenanceTasks::Task
+    DEFAULT_INSTRUCTEUR_EMAIL = ENV.fetch('DEFAULT_INSTRUCTEUR_EMAIL') { CONTACT_EMAIL }
+
+    no_collection
+
+    def process
+      DossierCorrection.joins(:commentaire)
+        .where(commentaire: { instructeur_id: current_instructeur.id })
+        .where(resolved_at: nil)
+        .find_each do |dossier_correction|
+          penultimate_traitement, last_traitement = *dossier_correction.dossier.traitements.last(2)
+          dossier_correction.resolve!
+
+          if last_traitement_by_us?(last_traitement) && last_transition_to_en_construction?(last_traitement, penultimate_traitement)
+            dossier_correction.dossier.passer_en_instruction(instructeur: current_instructeur) if dossier_correction.dossier.validate(:champs_public_value)
+          end
+        end
+    end
+
+    def current_instructeur
+      @current_instructeur = User.find_by(email: DEFAULT_INSTRUCTEUR_EMAIL).instructeur
+    end
+
+    def current_instructeur_id
+      current_instructeur.id
+    end
+
+    def current_instructeur_email
+      current_instructeur.email
+    end
+
+    def last_traitement_by_us?(traitement)
+      traitement.instructeur_email == DEFAULT_INSTRUCTEUR_EMAIL
+    end
+
+    def last_transition_to_en_construction?(last_traitement, penultimate_traitement)
+      last_traitement.state == "en_construction" && penultimate_traitement.state == 'en_instruction'
+    end
+  end
+end
diff --git a/spec/tasks/maintenance/resolve_pending_correction_for_dossier_with_invalid_commune_external_id_task_spec.rb b/spec/tasks/maintenance/resolve_pending_correction_for_dossier_with_invalid_commune_external_id_task_spec.rb
new file mode 100644
index 000000000..4ae1575b8
--- /dev/null
+++ b/spec/tasks/maintenance/resolve_pending_correction_for_dossier_with_invalid_commune_external_id_task_spec.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+require "rails_helper"
+
+module Maintenance
+  RSpec.describe ResolvePendingCorrectionForDossierWithInvalidCommuneExternalIdTask do
+    describe "#process" do
+      subject(:process) { described_class.process }
+      let(:instructeur) { create(:instructeur, email: ENV.fetch('DEFAULT_INSTRUCTEUR_EMAIL') { CONTACT_EMAIL }) }
+      let(:commentaire) { create(:commentaire, instructeur:) }
+      let(:dossier_correction) { create(:dossier_correction, commentaire:, dossier:, resolved_at: nil) }
+
+      before { dossier_correction }
+
+      context 'when dossier did transitioned to en_construction from en_instruction' do
+        let(:dossier) { create(:dossier, :en_instruction) }
+        before { dossier.repasser_en_construction!(instructeur:) }
+        it 'goes back to en_instruction (my mistake, sorry dear colleague, users etc...)' do
+          expect { subject }.to change { dossier.reload.state }.from('en_construction').to('en_instruction')
+        end
+      end
+
+      context 'when dossier didnt transitioned' do
+        let(:dossier) { create(:dossier, :en_construction) }
+
+        it 'noop' do
+          expect { subject }.not_to change { dossier.reload.state }
+        end
+      end
+    end
+  end
+end