@final-commerce/command-frame 0.5.0-preprod.5 → 0.5.0-preprod.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
export const mockProcessPartialRefund = async (params) => {
|
|
2
2
|
// The mock has no split-payment modal or order engine, so `openUI` (default
|
|
3
|
-
// true on the real command), `legs` (the headless per-tender allocation)
|
|
4
|
-
//
|
|
5
|
-
// shape is accepted and echoed, nothing
|
|
3
|
+
// true on the real command), `legs` (the headless per-tender allocation), a
|
|
4
|
+
// per-leg `giftCard` destination (mixed returns) and the top-level `giftCard`
|
|
5
|
+
// routing are all inert here — the shape is accepted and echoed, nothing
|
|
6
|
+
// else. No gift card is credited.
|
|
7
|
+
//
|
|
8
|
+
// The one rule worth mirroring is the mutual exclusion, so a flow built
|
|
9
|
+
// against the mock fails the same way it will against the runtime.
|
|
10
|
+
if (params?.legs && params?.giftCard) {
|
|
11
|
+
throw new Error('refund.giftCardAndLegs: pass either `legs` (you allocate) or `giftCard` (the engine allocates), not both');
|
|
12
|
+
}
|
|
6
13
|
console.log("[Mock] processPartialRefund called", {
|
|
7
14
|
...params,
|
|
8
15
|
openUI: params?.openUI ?? true,
|
|
9
16
|
legs: params?.legs ?? null,
|
|
17
|
+
giftCard: params?.giftCard ?? null,
|
|
10
18
|
});
|
|
11
19
|
return {
|
|
12
20
|
success: true,
|
|
@@ -88,6 +88,47 @@ export interface ProcessPartialRefundParams {
|
|
|
88
88
|
label?: string;
|
|
89
89
|
};
|
|
90
90
|
}[];
|
|
91
|
+
/**
|
|
92
|
+
* Route part (or all) of the refund onto ONE gift-card / store-credit tender
|
|
93
|
+
* and let the engine send whatever is left back to the original payments.
|
|
94
|
+
*
|
|
95
|
+
* This is the declarative alternative to hand-building `legs`: state the card
|
|
96
|
+
* and how much lands on it, and the engine does the allocation — it already
|
|
97
|
+
* owns that math for every other refund path. Prefer it over `legs` for a
|
|
98
|
+
* gift-card destination; a flow that computes its own split is duplicating
|
|
99
|
+
* engine arithmetic that will drift (see "Query, never recompute").
|
|
100
|
+
*
|
|
101
|
+
* - `amount` omitted → the WHOLE refund lands on the card (what an
|
|
102
|
+
* all-`giftCard` `legs` staging does today).
|
|
103
|
+
* - `amount` set → that much lands on the card, in minor units; the
|
|
104
|
+
* remainder returns to the original payments, allocated by the engine.
|
|
105
|
+
*
|
|
106
|
+
* DRAWING ORDER — the card is filled from the tenders that cannot be
|
|
107
|
+
* refunded to source first (a redeem tender has nowhere to return to), then
|
|
108
|
+
* proportionally from the rest. So `amount` can never be lower than what
|
|
109
|
+
* those tenders must contribute: below that the call throws
|
|
110
|
+
* `REFUND_GIFT_AMOUNT_BELOW_MINIMUM`, naming the minimum, and nothing is
|
|
111
|
+
* committed. Surface that message — it is the number to clamp the field to,
|
|
112
|
+
* so the flow never has to derive it.
|
|
113
|
+
*
|
|
114
|
+
* Exactly one destination card, therefore exactly ONE credit for the caller
|
|
115
|
+
* to place and one to reverse. **Credit-first:** credit `referenceId` for
|
|
116
|
+
* `amount` (or the full refund total when omitted) BEFORE calling; on any
|
|
117
|
+
* throw nothing was recorded — reverse it.
|
|
118
|
+
*
|
|
119
|
+
* Requires `openUI: false`. Mutually exclusive with `legs` — passing both
|
|
120
|
+
* throws, since they are two answers to the same question.
|
|
121
|
+
*/
|
|
122
|
+
giftCard?: {
|
|
123
|
+
/** Card/account id the flow already credited (stored raw). */
|
|
124
|
+
referenceId: string;
|
|
125
|
+
/** Minor units landing on the card. Omit for the whole refund. */
|
|
126
|
+
amount?: number;
|
|
127
|
+
/** Provider/program name. Defaults to `giftCard`. */
|
|
128
|
+
processor?: string;
|
|
129
|
+
/** Human label for the destination tender. */
|
|
130
|
+
label?: string;
|
|
131
|
+
};
|
|
91
132
|
/** Optional items to refund. */
|
|
92
133
|
items?: {
|
|
93
134
|
/** internalId or variantId or customSaleId. */
|