Придумано на словах, но не реализовано в программе.С точки зрения программы транзакция это одно законченное  движение одной единицы товара.В базе данных  единица товара - сегмент, потому что каждый сегмент может быть продан независимо. И есть операция по его продаже и операция по его возврату. Они в программе реализованы.А все остальное делается набором из этих операций. Поэтому возврат трех отдельных полетов - это три возврата. А что их положили в один пакет, программу не волнует.  Ей не объяснили, что с пакетом надо разбираться как-то иначе.Идею про 2 сегмента не поняла вообще. Почему минимально возможный кусок 2, а не 1 и не 3?