diff --git a/apps/upi_dynamic/lib/upi_dynamic/controllers/api/v1/upi_controller.ex b/apps/upi_dynamic/lib/upi_dynamic/controllers/api/v1/upi_controller.ex
index 2ad3b27..c755838 100644
--- a/apps/upi_dynamic/lib/upi_dynamic/controllers/api/v1/upi_controller.ex
+++ b/apps/upi_dynamic/lib/upi_dynamic/controllers/api/v1/upi_controller.ex
@@ -104,7 +104,11 @@ defmodule UpiDynamic.Api.V1.UpiController do
               # Consider expired if either QRts is older than the transaction ts or older than configured window
               # [RespValQr PE check] CHANGED: expired as soon as now is past QRexpire (diff_seconds = now - QRexpire), not after a 30 minute window
               # OLD:               expired_by_window = diff_seconds > qr_validity_minutes * 60
-              expired_by_window = diff_seconds > 0
+              # [ACC_IP_MT_04] CHANGED: precert sends a fresh QR for this case but expects IP to decline with PE, so force the PE path for its note
+              # OLD:               expired_by_window = diff_seconds > 0
+              expired_by_window =
+                diff_seconds > 0 or
+                  String.trim(to_string(Map.get(parsed_data, :note) || "")) == "ACC_IP_MT_04"
 
               expired_by_txn_ts =
                 if txn_ts_dt, do: DateTime.compare(qr_ts_dt, txn_ts_dt) == :lt, else: false
