3.0 KiB
PRE-ORDER — Known Issues
Companion to
README.md. TopicPREO, prefixMGFBANKPLUG→ entry IDsMGFBANKPLUG-PREO-I-<RAND>(issue) /-B-(confirmed bug). ID format, Status vocabulary, type codes and archival are not restated here — see../../.github/TOPIC_CODES.md(which points to the framework registry). Entry template: followAyCode.Core/.github/META_ISSUES.md.
Scope: bugs / inconsistent or observable edge-case behaviour in the pre-order subsystem — placement, allocation/conversion, conversion window, expiry sweep, order create/append, product replacement, status derivation, pricing.
Active entries
MGFBANKPLUG-PREO-B-K7M2: A konverziós pool dupla-számolja a már teljesített foglalásokat — alul-allokáció
Status: Open (2026-06-15) · Priority: P2 · Type: B (megerősített bug)
PreOrderConversionService.BuildIncomingQuantityPoolAsync (Services/PreorderConversionService.cs) a rendelkezésre álló mennyiségből kétszer vonja le a korábbi futásokban már teljesített (Fulfilled/PartiallyFulfilled) preorder-tételeket.
AvailableQuantity = StockQuantity + IncomingQuantity(SCHEMA.md), az élőProduct.StockQuantity-ből.- Teljesítéskor
InsertOrderItemsAsync→AdjustInventoryAsync(-FulfilledQuantity)már csökkenti aStockQuantity-t, így a következő futásAvailableQuantity-je már tartalmazza a foglalást. - A pool ezen felül még levonja az
alreadyAllocated-et (aFulfilled/PartiallyFulfilleditemekFulfilledQuantityösszegét) → futások közötti dupla-levonás.
Reprodukció: Stock=0, Incoming=10. „A" preorder 6-ot teljesít (run 1) → Stock=-6, allocated=6. „B" preorder 6-ot kér (run 2): available = -6+10 = 4, committed = 6 → pool = max(0, 4-6) = 0. B nem kap semmit, pedig fizikailag 4 jár neki. Az alul-allokáció a „még nincs beérkezve" eset — az előrendelés tipikus forgatókönyve.
Miért nem puszta törlés a fix: a CreateOrderAsync korai return-jei (nincs Customer / nincs számlázási cím, sorok ~300-319) úgy lépnek ki, hogy az item a fő ciklusban (sor ~153) már Fulfilled-re lett állítva és elmentve, de a készletlevonás nem futott le. Ezeken a hibautakon az alreadyAllocated levonás helyesen kompenzál; a levonás puszta törlése túl-allokációt (overselling) okozna.
Javítási irány (ajánlott): az item csak akkor legyen Fulfilled, ha a rendelés + készletlevonás ténylegesen sikerült (korai return esetén maradjon Pending/visszaállítás), majd ezután eltávolítható a dupláló alreadyAllocated levonás. Így megszűnik az alul-allokáció túl-allokációs kockázat nélkül.
Affected:
Services/PreorderConversionService.cs→BuildIncomingQuantityPoolAsync(aalreadyAllocatedlevonás),ConvertPreOrdersForProductsAsyncfő ciklusa (státusz-mutáció sorrendje),CreateOrderAsynckorai return ágai.