Я не уверен, что это вопрос программирования. Проблема здесь заключается в требованиях к бухгалтерскому учету. В нашей системе мы проводим дебет в вспомогательную бухгалтерскую книгу AR, а затем кредит / дебет в главную бухгалтерскую книгу. Если мы затем получим отклонение, отскоченный чек или что-то еще, мы публикуем новые транзакции, которые отменяют его. Без этого не было бы записи о том, что на самом деле произошло.
Мы предотвращаем некоторые из них с помощью кредитных карт, потому что мы можем оплатить их в пост-время. Если транзакция не может быть завершена, пакет AR не публикуется, и клерк должен исправить ее или удалить транзакцию. В транзакции вспомогательной книги AR установлен флажок, который необходимо перевернуть, прежде чем он повлияет на баланс, и GL не будет откорректирован до успешной публикации. Если сообщение будет опубликовано успешно, но мы получим возвратный платеж, мы все равно будем использовать вышеуказанный метод.
На самом деле все сводится к тому, какие записи хочет хранить ваш контроллер. Они могут захотеть отслеживать неудачные транзакции для составления отчетов и возможного обнаружения мошенничества. Общее правило: если что-то опубликовано, оно никогда не должно меняться.