Polymorphic dispatch coding is very simple. Case statements can become very complex. Each strategy can have local variables and remember calls across time. You don't pay for the strategies you don't use. You have to link in all the support, even if you only use one option.
Flags are evil.
This is particularly ugly and will be hard to maintain. Also, there is some chance that how you prepare the check may be dependent on the details of how you calculate the pay, though we try to eliminate any such dependency. It's very messy, very fragile, and hard to extend. The derived class has to deal with the differences in pay generation based on different types perhaps, and it would be scribbled right into the derived class methods. Here things are much more simple.