-
Notifications
You must be signed in to change notification settings - Fork 7
add a swift external account type #473
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| allOf: | ||
| - $ref: ./SwiftAccountInfoBase.yaml | ||
| - type: object | ||
| required: | ||
| - paymentRails | ||
| properties: | ||
| paymentRails: | ||
| type: array | ||
| items: | ||
| type: string | ||
| enum: | ||
| - SWIFT |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| type: object | ||
| required: | ||
| - accountType | ||
| - swiftCode | ||
| - bankName | ||
| - country | ||
| properties: | ||
| accountType: | ||
| type: string | ||
| enum: | ||
| - SWIFT_ACCOUNT | ||
| country: | ||
| type: string | ||
| description: The ISO 3166-1 alpha-2 country code of the bank account | ||
| example: NG | ||
| minLength: 2 | ||
| maxLength: 2 | ||
| pattern: ^[A-Z]{2}$ | ||
| swiftCode: | ||
| type: string | ||
| description: The SWIFT/BIC code of the bank | ||
| example: DEUTDEFF | ||
| minLength: 8 | ||
| maxLength: 11 | ||
| pattern: ^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$ | ||
| bankName: | ||
| type: string | ||
| description: The name of the bank | ||
| example: Deutsche Bank | ||
| minLength: 1 | ||
| maxLength: 255 | ||
| accountNumber: | ||
| type: string | ||
| description: >- | ||
| The bank account number. Required for most corridors. | ||
| Use iban instead for IBAN-only corridors (e.g. BR, GB). | ||
| example: '1234567890' | ||
| minLength: 1 | ||
| maxLength: 34 | ||
| iban: | ||
| type: string | ||
| description: >- | ||
| The IBAN of the bank account. Required for IBAN-only corridors (e.g. BR, GB). | ||
| Use accountNumber for all other corridors. | ||
| example: GB29NWBK60161331926819 | ||
| minLength: 15 | ||
| maxLength: 34 | ||
| pattern: ^[A-Z]{2}[0-9]{2}[A-Za-z0-9]{11,30}$ | ||
|
Comment on lines
+32
to
+48
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Both Prompt To Fix With AIThis is a comment left during a code review.
Path: openapi/components/schemas/common/SwiftAccountInfoBase.yaml
Line: 32-48
Comment:
**No enforcement that at least one of `accountNumber` or `iban` is provided**
Both `accountNumber` and `iban` are absent from the `required` list, yet the descriptions state that one is mandatory depending on the corridor. A client can submit a valid (schema-passing) create request with neither field, which would only fail at runtime. A JSON Schema `oneOf` / `if-then-else` or a simple `anyOf` with two options (one requiring `accountNumber`, one requiring `iban`) is the standard way to enforce "exactly one of" at the spec layer, matching the pattern used by corridor-specific schemas like `AedAccountInfoBase.yaml` where the relevant identifier is listed directly in `required`.
How can I resolve this? If you propose a fix, please make it concise.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we dont want another level of nesting / one of here |
||
| example: | ||
| accountType: SWIFT_ACCOUNT | ||
| country: NG | ||
| swiftCode: DEUTDEFF | ||
| bankName: Deutsche Bank | ||
| accountNumber: '1234567890' | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| title: Individual Beneficiary | ||
| type: object | ||
| required: | ||
| - beneficiaryType | ||
| - fullName | ||
| properties: | ||
| beneficiaryType: | ||
| type: string | ||
| enum: | ||
| - INDIVIDUAL | ||
| fullName: | ||
| type: string | ||
| description: The full name of the beneficiary | ||
| birthDate: | ||
| type: string | ||
| description: The birth date of the beneficiary | ||
| nationality: | ||
| type: string | ||
| description: The nationality of the beneficiary | ||
| email: | ||
| type: string | ||
| description: The email of the beneficiary | ||
| phoneNumber: | ||
| type: string | ||
| description: The phone number of the beneficiary | ||
| countryOfResidence: | ||
| type: string | ||
| description: The country of residence of the beneficiary | ||
| address: | ||
| $ref: ./Address.yaml | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [Re: line +31] is this different from a regular Individual beneficiary? See this comment inline on Graphite.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. no but I was following the existing pattern of having a dedicated individual bene schema per account type
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. oh yeah it was so we could separate out required fields based on country
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @claude add a note to openapi/readme.md to note for external accounts, we created individual beneficiares as not each country has the same fields / required information |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,91 +1,93 @@ | ||
| oneOf: | ||
| - $ref: ./AedExternalAccountInfo.yaml | ||
| - $ref: ./BdtExternalAccountInfo.yaml | ||
| - $ref: ./BrlExternalAccountInfo.yaml | ||
| - $ref: ./BwpExternalAccountInfo.yaml | ||
| - $ref: ./CadExternalAccountInfo.yaml | ||
| - $ref: ./CopExternalAccountInfo.yaml | ||
| - $ref: ./DkkExternalAccountInfo.yaml | ||
| - $ref: ./EgpExternalAccountInfo.yaml | ||
| - $ref: ./EurExternalAccountInfo.yaml | ||
| - $ref: ./GbpExternalAccountInfo.yaml | ||
| - $ref: ./GhsExternalAccountInfo.yaml | ||
| - $ref: ./GtqExternalAccountInfo.yaml | ||
| - $ref: ./HkdExternalAccountInfo.yaml | ||
| - $ref: ./HtgExternalAccountInfo.yaml | ||
| - $ref: ./IdrExternalAccountInfo.yaml | ||
| - $ref: ./InrExternalAccountInfo.yaml | ||
| - $ref: ./JmdExternalAccountInfo.yaml | ||
| - $ref: ./KesExternalAccountInfo.yaml | ||
| - $ref: ./MwkExternalAccountInfo.yaml | ||
| - $ref: ./MxnExternalAccountInfo.yaml | ||
| - $ref: ./MyrExternalAccountInfo.yaml | ||
| - $ref: ./NgnExternalAccountInfo.yaml | ||
| - $ref: ./PhpExternalAccountInfo.yaml | ||
| - $ref: ./PkrExternalAccountInfo.yaml | ||
| - $ref: ./RwfExternalAccountInfo.yaml | ||
| - $ref: ./SgdExternalAccountInfo.yaml | ||
| - $ref: ./SlvExternalAccountInfo.yaml | ||
| - $ref: ./ThbExternalAccountInfo.yaml | ||
| - $ref: ./TzsExternalAccountInfo.yaml | ||
| - $ref: ./UgxExternalAccountInfo.yaml | ||
| - $ref: ./UsdExternalAccountInfo.yaml | ||
| - $ref: ./VndExternalAccountInfo.yaml | ||
| - $ref: ./XafExternalAccountInfo.yaml | ||
| - $ref: ./XofExternalAccountInfo.yaml | ||
| - $ref: ./ZarExternalAccountInfo.yaml | ||
| - $ref: ./ZmwExternalAccountInfo.yaml | ||
| - $ref: ./SparkWalletExternalAccountInfo.yaml | ||
| - $ref: ./SwiftExternalAccountInfo.yaml | ||
| - $ref: ./BaseWalletExternalAccountInfo.yaml | ||
| - $ref: ./EthereumWalletExternalAccountInfo.yaml | ||
| - $ref: ./LightningExternalAccountInfo.yaml | ||
| - $ref: ./PolygonWalletExternalAccountInfo.yaml | ||
| - $ref: ./SolanaWalletExternalAccountInfo.yaml | ||
| - $ref: ./SparkWalletExternalAccountInfo.yaml | ||
| - $ref: ./TronWalletExternalAccountInfo.yaml | ||
| - $ref: ./PolygonWalletExternalAccountInfo.yaml | ||
| - $ref: ./BaseWalletExternalAccountInfo.yaml | ||
| - $ref: ./EthereumWalletExternalAccountInfo.yaml | ||
| - $ref: ./AedExternalAccountInfo.yaml | ||
| - $ref: ./BwpExternalAccountInfo.yaml | ||
| - $ref: ./XafExternalAccountInfo.yaml | ||
| - $ref: ./BdtExternalAccountInfo.yaml | ||
| - $ref: ./CopExternalAccountInfo.yaml | ||
| - $ref: ./EgpExternalAccountInfo.yaml | ||
| - $ref: ./GhsExternalAccountInfo.yaml | ||
| - $ref: ./GtqExternalAccountInfo.yaml | ||
| - $ref: ./HtgExternalAccountInfo.yaml | ||
| - $ref: ./JmdExternalAccountInfo.yaml | ||
| - $ref: ./PkrExternalAccountInfo.yaml | ||
| - $ref: ./SlvExternalAccountInfo.yaml | ||
| discriminator: | ||
| propertyName: accountType | ||
| mapping: | ||
| AED_ACCOUNT: ./AedExternalAccountInfo.yaml | ||
| BDT_ACCOUNT: ./BdtExternalAccountInfo.yaml | ||
| BRL_ACCOUNT: ./BrlExternalAccountInfo.yaml | ||
| BWP_ACCOUNT: ./BwpExternalAccountInfo.yaml | ||
| CAD_ACCOUNT: ./CadExternalAccountInfo.yaml | ||
| COP_ACCOUNT: ./CopExternalAccountInfo.yaml | ||
| DKK_ACCOUNT: ./DkkExternalAccountInfo.yaml | ||
| EGP_ACCOUNT: ./EgpExternalAccountInfo.yaml | ||
| EUR_ACCOUNT: ./EurExternalAccountInfo.yaml | ||
| GBP_ACCOUNT: ./GbpExternalAccountInfo.yaml | ||
| GHS_ACCOUNT: ./GhsExternalAccountInfo.yaml | ||
| GTQ_ACCOUNT: ./GtqExternalAccountInfo.yaml | ||
| HKD_ACCOUNT: ./HkdExternalAccountInfo.yaml | ||
| HTG_ACCOUNT: ./HtgExternalAccountInfo.yaml | ||
| IDR_ACCOUNT: ./IdrExternalAccountInfo.yaml | ||
| INR_ACCOUNT: ./InrExternalAccountInfo.yaml | ||
| JMD_ACCOUNT: ./JmdExternalAccountInfo.yaml | ||
| KES_ACCOUNT: ./KesExternalAccountInfo.yaml | ||
| MWK_ACCOUNT: ./MwkExternalAccountInfo.yaml | ||
| MXN_ACCOUNT: ./MxnExternalAccountInfo.yaml | ||
| MYR_ACCOUNT: ./MyrExternalAccountInfo.yaml | ||
| NGN_ACCOUNT: ./NgnExternalAccountInfo.yaml | ||
| PHP_ACCOUNT: ./PhpExternalAccountInfo.yaml | ||
| PKR_ACCOUNT: ./PkrExternalAccountInfo.yaml | ||
| RWF_ACCOUNT: ./RwfExternalAccountInfo.yaml | ||
| SGD_ACCOUNT: ./SgdExternalAccountInfo.yaml | ||
| SLV_ACCOUNT: ./SlvExternalAccountInfo.yaml | ||
| THB_ACCOUNT: ./ThbExternalAccountInfo.yaml | ||
| TZS_ACCOUNT: ./TzsExternalAccountInfo.yaml | ||
| UGX_ACCOUNT: ./UgxExternalAccountInfo.yaml | ||
| USD_ACCOUNT: ./UsdExternalAccountInfo.yaml | ||
| VND_ACCOUNT: ./VndExternalAccountInfo.yaml | ||
| XAF_ACCOUNT: ./XafExternalAccountInfo.yaml | ||
| XOF_ACCOUNT: ./XofExternalAccountInfo.yaml | ||
| ZAR_ACCOUNT: ./ZarExternalAccountInfo.yaml | ||
| ZMW_ACCOUNT: ./ZmwExternalAccountInfo.yaml | ||
| SPARK_WALLET: ./SparkWalletExternalAccountInfo.yaml | ||
| LIGHTNING: ./LightningExternalAccountInfo.yaml | ||
| SOLANA_WALLET: ./SolanaWalletExternalAccountInfo.yaml | ||
| TRON_WALLET: ./TronWalletExternalAccountInfo.yaml | ||
| POLYGON_WALLET: ./PolygonWalletExternalAccountInfo.yaml | ||
| SWIFT_ACCOUNT: ./SwiftExternalAccountInfo.yaml | ||
| BASE_WALLET: ./BaseWalletExternalAccountInfo.yaml | ||
| ETHEREUM_WALLET: ./EthereumWalletExternalAccountInfo.yaml | ||
| AED_ACCOUNT: ./AedExternalAccountInfo.yaml | ||
| BWP_ACCOUNT: ./BwpExternalAccountInfo.yaml | ||
| XAF_ACCOUNT: ./XafExternalAccountInfo.yaml | ||
| BDT_ACCOUNT: ./BdtExternalAccountInfo.yaml | ||
| COP_ACCOUNT: ./CopExternalAccountInfo.yaml | ||
| EGP_ACCOUNT: ./EgpExternalAccountInfo.yaml | ||
| GHS_ACCOUNT: ./GhsExternalAccountInfo.yaml | ||
| GTQ_ACCOUNT: ./GtqExternalAccountInfo.yaml | ||
| HTG_ACCOUNT: ./HtgExternalAccountInfo.yaml | ||
| JMD_ACCOUNT: ./JmdExternalAccountInfo.yaml | ||
| LIGHTNING: ./LightningExternalAccountInfo.yaml | ||
| LIGHTNING_ACCOUNT: ./LightningExternalAccountInfo.yaml | ||
| PKR_ACCOUNT: ./PkrExternalAccountInfo.yaml | ||
| SLV_ACCOUNT: ./SlvExternalAccountInfo.yaml | ||
| POLYGON_WALLET: ./PolygonWalletExternalAccountInfo.yaml | ||
| SOLANA_WALLET: ./SolanaWalletExternalAccountInfo.yaml | ||
| SPARK_WALLET: ./SparkWalletExternalAccountInfo.yaml | ||
| TRON_WALLET: ./TronWalletExternalAccountInfo.yaml |
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.
DE/GB.Prompt To Fix With AI
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.
Yes, the IBAN (International Bank Account Number) is used in Brazil.
It is officially regulated by the Banco Central do Brasil (Central Bank of Brazil) and is exclusively required when sending or receiving international wire transfers