-
-
Notifications
You must be signed in to change notification settings - Fork 4k
Fix rounding issue on refund #14496
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Fix rounding issue on refund #14496
Conversation
🦋 Changeset detectedLatest commit: 97cf59a The changes in this PR will be included in the next version bump. This PR includes changesets to release 76 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
@pepijn-vanvlaanderen is attempting to deploy a commit to the medusajs Team on Vercel. A member of the Team first needs to authorize it. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR is being reviewed by Cursor Bugbot
Details
Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.
To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.
packages/core/core-flows/src/payment/workflows/refund-payment.ts
Outdated
Show resolved
Hide resolved
| MathBN.gte( | ||
| MathBN.sub(totalRefundedAmount, capturedAmount), | ||
| currencyEpsilon | ||
| ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @pepijn-vanvlaanderen,
even though this is correct, would you mind invert the check to make it easier to read?
MathBN.lt( MathBN.sub(captured, refund), epsilon )
| ) | ||
|
|
||
| if ( | ||
| MathBN.gte( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same
Summary
What — What changes are introduced in this PR?
When a payment collection exists with a payment amount of >2 decimal, you could encounter the error 'You are not allowed to refund more than the captured amount'.
Why — Why are these changes relevant or necessary?
For example when an order got paid 87,96, but the captured amount is 87.957975, you will hit this issue and you are not allowed to do the full refund.
How — How have these changes been implemented?
Updated the validation rule and payment module to do a check based on the currencyEpsilon introduced in #14225.
Testing — How have these changes been tested, or how can the reviewer test the feature?
Implemented and tested on our own projects. Existing tests should pass.
Examples
Provide examples or code snippets that demonstrate how this feature works, or how it can be used in practice.
This helps with documentation and ensures maintainers can quickly understand and verify the change.
// Example usageChecklist
Please ensure the following before requesting a review:
yarn changesetand follow the promptsNote
Fix rounding-related refund validation
refund-paymentworkflow andPaymentModuleService.refundPayment_to compare(total_refunded - captured)againstcurrencyEpsilonderived fromdefaultCurrencies/getEpsilonFromDecimalPrecisioncurrency_codeis selected/used for epsilon calculation; only block refunds when the difference meets/exceeds epsilon@medusajs/core-flowsand@medusajs/paymentWritten by Cursor Bugbot for commit 97cf59a. This will update automatically on new commits. Configure here.