feature/INT-1675 - BACS Direct Debit notifications + refactor - #371
Conversation
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 46 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🟢 Advisory review: Looks good to meThis PR still needs a human approval — wall-e cannot auto-approve it. For what it's worth, I read the diff and found nothing I'd block on. This PR adds Bacs/ACH Direct Debit instrument models, a BacsClient for pre-notifications, scheme-specific billing address and account holder classes, and removes the old shared InstrumentData class as a breaking change for v6.0.0. The implementation is internally consistent, well-documented, and matches its stated intent. What I checked
This is not an approval. wall-e cannot auto-approve this PR — it is an opinion to help whoever does. Advisory review · us.anthropic.claude-sonnet-4-6 · wall-e 2026.06.19-02 |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 46 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
🔴 Risk Classification: MAJORApproval route: AI Review + Human Approval Required Classification reasons
Operational gates
Files analysed: 51 wall-e 2026.06.19-02 · policy |
🔬 Debug — why this classification?Each reason code emitted by the classifier, its source clause in the AI in SDLC Control Framework, and what it means.
Kinds:
See issue #3 for the proposal to formalise this map as Appendix A of the standards doc. wall-e 2026.06.19-02 · debug |
|



Breaking changes (check at the end
)
This pull request introduces comprehensive support for Bacs and ACH Direct Debit instruments in the SDK, including new client classes, request models, and type definitions. It also updates core enums to recognize these new instrument and payment source types. The changes enable storing, configuring, and sending notifications for Bacs and ACH instruments, and ensure the SDK aligns with the latest API specifications.
Bacs Direct Debit Support:
BacsClientfor sending Bacs Direct Debit pre-notifications, with corresponding request and notification type classes (BacsNotificationRequest,BacsNotificationType). Also exposedgetBacsClient()inCheckoutApi. [1] [2] [3] [4] [5] [6] [7]CreateBacsInstrumentRequest,CreateBacsInstrumentAccount,CreateBacsInstrumentData,CreateBacsAccountHolder,CreateBacsBillingAddress, andBacsPaymentType. [1] [2] [3] [4] [5] [6]ACH Direct Debit Support:
CreateAchInstrumentRequest,CreateAchInstrumentData,CreateAchAccountHolder, andAchAccountType. [1] [2] [3] [4]SEPA Direct Debit Support:
CreateSepaAccountHolderfor SEPA instrument account holder details.Core Enum Updates:
InstrumentTypeandPaymentSourceTypeto includebacsandachas valid types, reflecting new instrument and payment source options. [1] [2] [3] [4]These changes provide the necessary models and client interfaces to support Bacs and ACH Direct Debit instruments, improve maintainability, and ensure compatibility with the current API.
Breaking changes


This release is breaking and ships as 6.0.0 (already bumped in this branch via the merged
Release 6.0.0 (#370)commit:CheckoutUtils::PROJECT_VERSIONandversion.json).The instruments models were reshaped so that each scheme (SEPA, Bacs, ACH) and each operation
(store, update) has its own type. Previously a single
InstrumentDataand the sharedCheckout\Common\AccountHolderwere reused across operations they did not match, which exposedfields the API rejects and hid fields it requires.
Removed classes
Checkout\Instruments\Create\InstrumentDataCheckout\Instruments\Create\CreateSepaInstrumentData(store) /Checkout\Instruments\Update\UpdateSepaInstrumentData(update)The removed class held
account_number,country,currency,payment_type,mandate_idanddate_of_signature. All six exist on the replacements, plustype(the SEPA mandate type), whichthe specification declares and the old class was missing.
Retyped properties
All three are on
Checkout\Instruments\Create\CreateSepaInstrumentRequest:$instrument_dataCheckout\Instruments\Create\InstrumentDataCreateSepaInstrumentData$account_holderCheckout\Common\AccountHolder(15 properties)CreateSepaAccountHolder(5 properties)$customer\Checkout\Instruments\Create\UpdateCustomerRequestCreateCustomerInstrumentRequestThe
$customerentry is a documentation correction rather than a runtime change: the old@varpointed at a class that does not exist in that namespace (the real one lives in
Checkout\Instruments\Update). Static analysis will now flag callers who pass the old type.Migration