You could use JS inside a matrix constant sum question.
Here’s the demo: https://iima.au1.qualtrics.com/jfe/preview/previewId/00a1841e-33a5-49ae-a9c5-6934da853af4/SV_8HBDY4VRJnFn40J/BL_eWhyLPGnUXT8onQ?Q_SurveyVersionID=current
Qualtrics.SurveyEngine.addOnReady(function () {
const quest = this;
const qc = quest.getQuestionContainer();
const maxAmount = parseInt("500");
const alertText = "Please ensure the amount consumed is less than";
const nextButton = document.querySelector("#NextButton");
const totalRow = qc.querySelector("tr.CSTotal");
const remainingRow = totalRow.cloneNode(true);
totalRow.insertAdjacentElement("afterend", remainingRow);
totalRow.querySelector("th").innerHTML = "Amount Consumed";
remainingRow.querySelector("th").innerHTML = 'Amount Left <small id="amountAlert" style="color: red;display:none;">+++++ $ _____.</small>';
const totalInput = totalRow.querySelector("input");
const remainingInput = remainingRow.querySelector("input");
totalInput.oninput = function () {
setTimeout(() => {
const amountUsed = parseInt(totalInput.value.replaceAll(/\D/gm, ""));
const amountLeft = maxAmount - amountUsed;
remainingInput.value = amountLeft;
if (amountLeft < 0) {
nextButton.style.display = "none";
alertMessage.style.display = "block";
} else {
nextButton.style.display = "";
alertMessage.style.display = "none";
}
}, 0);
};
remainingInput.value = maxAmount;
const alertMessage = qc.querySelector("#amountAlert");
alertMessage.innerHTML = alertMessage.innerHTML.replace("+++++", alertText);
alertMessage.innerHTML = alertMessage.innerHTML.replace("_____", maxAmount);
});