Shares are only removed if both MON and VTC are paid at once, otherwise they are marked as paid. It sounds bad to "remove" something, and by moving them to paid table they aren't "removed", but "marked" as paid.

As far as the query goes, it will ignore those rows anyway by filtering them out as unpaid, so at some point they will have to be manually moved to the paid table.

 if not (monpaid or vtcpaid):
            if verboseLog: app_log("No valid payments found: {0} | {1} | {2:.8f} | {3:.8f}".format(user, auxuser, vtcvalue, monvalue))
            continue