How to handle crossed message: Execution Reports and Cancel Replaces

Imported from previous forum

According to the specification, a Cancel/Replace only has one quantity field: OrderQty(38). So, for example, if one sent a New Order with OrderQty=100 and then wished to reduce it to 40, they would send a Cancel/Replace with OrderQty=40. My question is, what if there was a partial fill for 80 of the original 100 order, but the Cancel/Replace is sent BEFORE this Execution Report is received… now the Cancel Replace arrives requesting a reduction in quantity from 100 to 40, but the actual open volume has already been reduced from 100 to 20. What is the proper processing of this Cancel/Replace? Some possible solutions include:
(a) reject Cancel/Replace since it is obvious that it was sent based on out-of-date volume, leaving 20 open
(b) accept Cancel/Replace and cancel remaining 20, since already-executed volume already exceeds newly request volume
© other solutions?

Thanks in advance for any comments or suggestion you have…