Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
2ce68c7
Add Validation_Failed state
dominictb Aug 6, 2026
2190814
Add NOC code constants
dominictb Aug 6, 2026
94b144b
Add terms
dominictb Aug 6, 2026
5357409
Add lastNocCode to types
dominictb Aug 6, 2026
ea2d771
Add NOC code helper
dominictb Aug 6, 2026
6ba314f
Add support for Validation_Failed connection status
dominictb Aug 6, 2026
f23b343
Update getBankAccountConnectionStatus usage in PaymentMethodList
dominictb Aug 6, 2026
9296371
Update getBankAccountConnectionStatus usage in WorkspaceWorkflowsPage
dominictb Aug 6, 2026
836e974
Update getBankAccountConnectionStatus usage in test
dominictb Aug 6, 2026
b02a655
Fix spellcheck
dominictb Aug 6, 2026
8bf4771
Run generateTranslations script
dominictb Aug 6, 2026
c76f360
Initialize FixBankAccountPage
dominictb Aug 6, 2026
6f3c380
Add type definition for ResendFailedValidationAmounts command
dominictb Aug 6, 2026
73c4d55
Add ResendFailedValidationAmounts command
dominictb Aug 6, 2026
9aa2671
Add translation terms for FixBankAccount page
dominictb Aug 6, 2026
450bf4d
Run generateTranslations script
dominictb Aug 6, 2026
ea4c06a
Update translation style
dominictb Aug 6, 2026
25f3484
Run generateTranslations script
dominictb Aug 6, 2026
ee2b6d1
Show success state
dominictb Aug 6, 2026
9a28b08
Show insufficient funds error
dominictb Aug 6, 2026
bb05812
Show debit blocked error
dominictb Aug 6, 2026
356a6ae
Only show RBR for insufficient funds and debit blocked error
dominictb Aug 6, 2026
7d34fdf
Expose requiresFixHandler
dominictb Aug 6, 2026
1ec0b51
Navigate to FixBankAccountPage on tapping Fix
dominictb Aug 6, 2026
28ac5f4
Navigate to FixBankAccountPage from workspace workflows page
dominictb Aug 6, 2026
e92eae2
Update route entry point
dominictb Aug 6, 2026
7bb4f38
Navigate to FixBankAccountPage from payment flow
dominictb Aug 6, 2026
d869204
Update success text style
dominictb Aug 6, 2026
380b9d4
Remove HTML from insufficientFundsBody
dominictb Aug 6, 2026
98cdc20
Do not use HTML for insufficient funds error
dominictb Aug 6, 2026
54fae1b
Optimistically set data in action
dominictb Aug 6, 2026
a5c3408
Show loading indicator
dominictb Aug 6, 2026
5464c03
Fix lint
dominictb Aug 6, 2026
691d159
Add illustrations
dominictb Aug 7, 2026
4fa0ea7
Replace illustrations in FixBankAccountPage
dominictb Aug 7, 2026
5aa710c
Compress SVG
dominictb Aug 7, 2026
4436708
Add English generic error message
dominictb Aug 7, 2026
d11a2d7
Run generateTranslations script
dominictb Aug 7, 2026
4988ac7
Show generic error message for other NOC codes
dominictb Aug 7, 2026
ee1d8b0
Merge branch 'main' of github.com:dominictb/App into feat/support-val…
dominictb Aug 11, 2026
bb4299b
Enfore bankAccountID param as string
dominictb Aug 11, 2026
d6a7e67
Add selector for bankAccountList
dominictb Aug 11, 2026
0a81354
Remove displayName from FixBankAccountPage
dominictb Aug 11, 2026
fac8f27
Do not navigate if methodID is undefined
dominictb Aug 11, 2026
9ea10a6
Do not navigate if methodID is undefined
dominictb Aug 11, 2026
261e021
Enfore bankAccountID param as string
dominictb Aug 11, 2026
e5f950d
Add tests for resendFailedValidationAmounts action
dominictb Aug 11, 2026
ecfd884
Add tests for hasInsufficientFundsError and hasDebitBlockedError utils
dominictb Aug 11, 2026
ab64da9
Remove redundant br in translations
dominictb Aug 11, 2026
d128ae5
Render error message above submit button
dominictb Aug 11, 2026
9bb53f2
Fix double back button
dominictb Aug 11, 2026
e012eff
Fix mismatch button paddings
dominictb Aug 11, 2026
f81112c
Fix lint
dominictb Aug 11, 2026
7f7c72d
Fix test
dominictb Aug 12, 2026
7b60721
Fix error message pushes main content
dominictb Aug 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions assets/images/laptop-with-second-screen-bank.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/images/scissors-cutting-money.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -755,6 +755,7 @@ const CONST = {
OPEN: 'OPEN',
DELETED: 'DELETED',
LOCKED: 'LOCKED',
VALIDATION_FAILED: 'VALIDATION_FAILED',
},
MAX_LENGTH: {
FULL_SSN: 9,
Expand Down Expand Up @@ -792,6 +793,10 @@ const CONST = {
'resultcode.ssn.issued.prior.to.dob',
],
},
NOC_CODE: {
INSUFFICIENT_FUNDS: ['R01', 'R09'] as string[],
DEBIT_BLOCKED: ['R05', 'R06', 'R07', 'R08', 'R10', 'R11', 'R16', 'R23', 'R29'] as string[],
},
},
CORPAY_DOCUMENT: {
ALLOWED_FILE_TYPES: ['pdf', 'jpg', 'jpeg', 'png'],
Expand Down Expand Up @@ -954,6 +959,7 @@ const CONST = {
OPEN: 'OPEN',
DELETED: 'DELETED',
LOCKED: 'LOCKED',
VALIDATION_FAILED: 'VALIDATION_FAILED',
},
},
ENABLE_GLOBAL_REIMBURSEMENTS: {
Expand Down
13 changes: 13 additions & 0 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,19 @@ const DYNAMIC_ROUTES = {
getRoute: (shouldSkipPurposeSelection?: boolean) => `add-bank-account/verify-account${shouldSkipPurposeSelection ? '?shouldSkipPurposeSelection=true' : ''}` as const,
queryParams: ['shouldSkipPurposeSelection'],
},
FIX_BANK_ACCOUNT: {
path: 'fix-bank-account/:bankAccountID',
entryScreens: [
SCREENS.SETTINGS.WALLET.ROOT,
SCREENS.WORKSPACE.WORKFLOWS,
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
SCREENS.REPORT,
SCREENS.SEARCH.ROOT,
],
getRoute: (bankAccountID: string) => `fix-bank-account/${bankAccountID}` as const,
},
BANK_ACCOUNT_VERIFY_ACCOUNT: {
path: 'verify-bank-account',
entryScreens: [SCREENS.REIMBURSEMENT_ACCOUNT],
Expand Down
1 change: 1 addition & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ const SCREENS = {
HELP: 'Settings_Help',
DYNAMIC_VERIFY_ACCOUNT: 'Dynamic_Verify_Account',
DYNAMIC_ADD_BANK_ACCOUNT_VERIFY_ACCOUNT: 'Dynamic_Add_Bank_Account_Verify_Account',
DYNAMIC_FIX_BANK_ACCOUNT: 'Dynamic_Fix_Bank_Account',
DYNAMIC_EXIT_SURVEY_CONFIRM: 'Dynamic_ExitSurvey_Confirm',
DYNAMIC_EXIT_SURVEY_REASON: 'Dynamic_ExitSurvey_Reason',
DYNAMIC_KEYBOARD_SHORTCUTS: 'Dynamic_Keyboard_Shortcuts',
Expand Down
4 changes: 4 additions & 0 deletions src/components/Icon/chunks/illustrations.chunk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import Hand from '@assets/images/hand.svg';
import LaptopWithMembers from '@assets/images/illustration-laptop-members.svg';
import LaptopOnDeskWithCoffeeAndKey from '@assets/images/laptop-on-desk-with-coffee-and-key.svg';
import LaptopWithSecondScreenAndHourglass from '@assets/images/laptop-with-second-screen-and-hourglass.svg';
import LaptopWithSecondScreenBank from '@assets/images/laptop-with-second-screen-bank.svg';
import LaptopWithSecondScreenSync from '@assets/images/laptop-with-second-screen-sync.svg';
import LaptopWithSecondScreenX from '@assets/images/laptop-with-second-screen-x.svg';
// Multifactor Authentication Illustrations
Expand Down Expand Up @@ -99,6 +100,7 @@ import ValidateCode from '@assets/images/product-illustrations/validate-code.svg
import WorkspaceScene from '@assets/images/product-illustrations/workspace-scene.svg';
import ReceiptStack from '@assets/images/receipt-upload.svg';
import RunningTurtle from '@assets/images/running-turtle.svg';
import ScissorsCuttingMoney from '@assets/images/scissors-cutting-money.svg';
import Shutter from '@assets/images/shutter.svg';
// Simple Illustrations - Bucket 3 (Common)
import Puzzle from '@assets/images/simple-illustrations/emptystate__puzzlepieces.svg';
Expand Down Expand Up @@ -264,6 +266,7 @@ const Illustrations = {
Computer,
ExpensifyCardImage,
LaptopWithSecondScreenAndHourglass,
LaptopWithSecondScreenBank,
LaptopWithSecondScreenSync,
LaptopWithSecondScreenX,
LaptopOnDeskWithCoffeeAndKey,
Expand Down Expand Up @@ -329,6 +332,7 @@ const Illustrations = {
ReceiptStack,
RunningTurtle,
Shutter,
ScissorsCuttingMoney,
TravelCVV,
TurtleInShell,

Expand Down
14 changes: 12 additions & 2 deletions src/components/SettlementButton/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ import useVerifyAccountAndResume from '@hooks/useVerifyAccountAndResume';
import {createWorkspace, generateDefaultWorkspaceName, isCurrencySupportedForDirectReimbursement, isCurrencySupportedForGlobalReimbursement} from '@libs/actions/Policy/Policy';
import {navigateToBankAccountRoute} from '@libs/actions/ReimbursementAccount';
import {getLastPolicyBankAccountID, getLastPolicyPaymentMethod} from '@libs/actions/Search';
import {isBankAccountPartiallySetup} from '@libs/BankAccountUtils';
import {getBankAccountConnectionStatus, isBankAccountPartiallySetup} from '@libs/BankAccountUtils';
import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute';
import Navigation from '@libs/Navigation/Navigation';
import {isTrackOnboardingChoice} from '@libs/OnboardingUtils';
import {formatPaymentMethods, getActivePaymentType, getBusinessBankAccountOptions, matchesCurrency} from '@libs/PaymentUtils';
Expand All @@ -51,7 +52,7 @@ import {navigateToConciergeChat} from '@userActions/Report';

import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES';
import type {AccountData, BankAccount, LastPaymentMethodType, Policy} from '@src/types/onyx';
import type {PaymentMethodType} from '@src/types/onyx/OriginalMessage';
import {isEmptyObject} from '@src/types/utils/EmptyObject';
Expand Down Expand Up @@ -195,6 +196,7 @@ function SettlementButton({
const shouldShowPayWithExpensifyOption = !shouldHidePaymentOptions;
const shouldShowPayElsewhereOption = !shouldHidePaymentOptions && !isInvoiceReport;
const isBankAccountLocked = policy?.achAccount?.state === CONST.BANK_ACCOUNT.STATE.LOCKED;
const isBankAccountValidationFailed = policy?.achAccount?.state === CONST.BANK_ACCOUNT.STATE.VALIDATION_FAILED;

function getLatestPersonalBankAccount() {
return formattedPaymentMethods.filter((ba) => (ba.accountData as AccountData)?.type === CONST.BANK_ACCOUNT.TYPE.PERSONAL);
Expand All @@ -203,6 +205,14 @@ function SettlementButton({
// The guards checked after the account-validation gate. Also re-checked when a payment
// interrupted by account validation resumes, since the validation gate skipped them.
const checkForPostValidationBlockers = () => {
if (isBankAccountValidationFailed && policy?.achAccount?.bankAccountID) {
const bankConnectionStatus = getBankAccountConnectionStatus(bankAccountList?.[policy.achAccount.bankAccountID]?.accountData);
if (bankConnectionStatus?.requiresFixHandler) {
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.FIX_BANK_ACCOUNT.getRoute(policy.achAccount.bankAccountID.toString())));
return true;
}
}

if (isBankAccountLocked) {
showConfirmModal({
title: translate('bankAccount.lockedBankAccount'),
Expand Down
13 changes: 13 additions & 0 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2602,6 +2602,19 @@ const translations: TranslationDeepObject<typeof en> = {
confirmTestTransactions: 'Bitte bestätigen Sie Testtransaktionen',
accountRequiresAttention: 'Dieses Konto erfordert Ihre Aufmerksamkeit',
unlock: 'Entsperren',
debitBlocked: 'Ihre Bank hat Testtransaktionen auf dieses Konto blockiert',
insufficientFunds: 'Testtransaktionen sind aufgrund unzureichender Deckung fehlgeschlagen',
validationFailedFallback: 'Ihre Bank hat Testtransaktionen auf dieses Konto blockiert. <concierge-link>Kontaktieren Sie Concierge</concierge-link>',
},
fixBankAccount: {
title: 'Bankkonto beheben',
debitBlockedBody:
'Ihre Bank hat die Testtransaktionen auf dieses Konto blockiert.<br/><br/>Bitte lassen Sie die folgenden ACH-IDs von Expensify auf die Whitelist setzen:<bullet-list><bullet-item>1270239450</bullet-item><bullet-item>2270239450</bullet-item><bullet-item>4270239450</bullet-item></bullet-list>Senden Sie anschließend die unten stehenden Testtransaktionen erneut.',
insufficientFundsBody: 'Testtransaktionen sind aufgrund unzureichender Deckung fehlgeschlagen. Sobald wieder Geld verfügbar ist, verwenden Sie die Schaltfläche unten.',
resendButton: 'Transaktionen erneut senden',
successTitle: 'Transaktionen gesendet!',
successBody: 'Prüfen Sie Ihr Bankkonto in den nächsten 1–2 Werktagen.',
successButton: 'Verstanden',
},
},
cardPage: {
Expand Down
13 changes: 13 additions & 0 deletions src/languages/el.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2659,6 +2659,19 @@ const translations: TranslationDeepObject<typeof en> = {
confirmTestTransactions: 'Παρακαλούμε επιβεβαιώστε τις δοκιμαστικές συναλλαγές',
accountRequiresAttention: 'Αυτός ο λογαριασμός χρειάζεται προσοχή',
unlock: 'Ξεκλείδωμα',
debitBlocked: 'Η τράπεζά σας μπλόκαρε τις δοκιμαστικές συναλλαγές σε αυτόν τον λογαριασμό',
insufficientFunds: 'Οι δοκιμαστικές συναλλαγές απέτυχαν λόγω ανεπαρκών χρημάτων',
validationFailedFallback: 'Η τράπεζά σας μπλόκαρε τις δοκιμαστικές συναλλαγές σε αυτόν τον λογαριασμό. <concierge-link>Επικοινωνήστε με το Concierge</concierge-link>',
},
fixBankAccount: {
title: 'Διόρθωση τραπεζικού λογαριασμού',
debitBlockedBody:
'Η τράπεζά σας μπλόκαρε τις δοκιμαστικές συναλλαγές σε αυτόν τον λογαριασμό.<br/><br/>Παρακαλούμε ζητήστε τους να προσθέσουν στις εξαιρέσεις τα ACH IDs της Expensify:<bullet-list><bullet-item>1270239450</bullet-item><bullet-item>2270239450</bullet-item><bullet-item>4270239450</bullet-item></bullet-list>Έπειτα, στείλτε ξανά τις παρακάτω δοκιμαστικές συναλλαγές.',
insufficientFundsBody: 'Οι δοκιμαστικές συναλλαγές απέτυχαν λόγω ανεπαρκών κεφαλαίων. Μόλις υπάρχουν διαθέσιμα κεφάλαια, χρησιμοποιήστε το παρακάτω κουμπί.',
resendButton: 'Επαναποστολή συναλλαγών',
successTitle: 'Οι συναλλαγές στάλθηκαν!',
successBody: 'Ελέγξτε τον τραπεζικό σας λογαριασμό μέσα στις επόμενες 1–2 εργάσιμες ημέρες.',
successButton: 'Το κατάλαβα',
},
},
cardPage: {
Expand Down
13 changes: 13 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2662,6 +2662,19 @@ const translations = {
confirmTestTransactions: 'Please confirm test transactions',
accountRequiresAttention: 'This account requires attention',
unlock: 'Unlock',
debitBlocked: 'Your bank blocked test transactions to this account',
insufficientFunds: 'Test transactions failed due to insufficient funds',
validationFailedFallback: 'Your bank blocked test transactions to this account. <concierge-link>Contact Concierge</concierge-link>',
},
fixBankAccount: {
title: 'Fix bank account',
debitBlockedBody:
"Your bank blocked the test transactions to this account.<br/><br/>Please have them whitelist Expensify's ACH IDs:<bullet-list><bullet-item>1270239450</bullet-item><bullet-item>2270239450</bullet-item><bullet-item>4270239450</bullet-item></bullet-list>Then, resend the test transactions below.",
insufficientFundsBody: 'Test transactions failed due to insufficient funds. Once funds are available, use the button below.',
Comment thread
dominictb marked this conversation as resolved.
resendButton: 'Resend transactions',
successTitle: 'Transactions sent!',
successBody: 'Check your bank account in the next 1-2 business days.',
successButton: 'Got it',
},
assignedCards: 'Cards',
assignedCardsDescription: 'Transactions from assigned cards sync automatically.',
Expand Down
13 changes: 13 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2523,6 +2523,19 @@ const translations: TranslationDeepObject<typeof en> = {
confirmTestTransactions: 'Confirma las transacciones de prueba',
accountRequiresAttention: 'Esta cuenta requiere atención',
unlock: 'Desbloquear',
debitBlocked: 'Tu banco bloqueó las transacciones de prueba a esta cuenta',
insufficientFunds: 'Las transacciones de prueba fallaron por fondos insuficientes',
validationFailedFallback: 'Tu banco bloqueó las transacciones de prueba a esta cuenta. <concierge-link>Contacta con Concierge</concierge-link>',
},
fixBankAccount: {
title: 'Corregir cuenta bancaria',
debitBlockedBody:
'Tu banco bloqueó las transacciones de prueba a esta cuenta.<br/><br/>Pídeles que agreguen a la lista blanca los ID de ACH de Expensify:<bullet-list><bullet-item>1270239450</bullet-item><bullet-item>2270239450</bullet-item><bullet-item>4270239450</bullet-item></bullet-list>Luego, vuelve a enviar las transacciones de prueba de abajo.',
insufficientFundsBody: 'Las transacciones de prueba fallaron por fondos insuficientes. Cuando haya fondos disponibles, utiliza el botón de abajo.',
resendButton: 'Reenviar transacciones',
successTitle: '¡Transacciones enviadas!',
successBody: 'Revisa tu cuenta bancaria en los próximos 1-2 días hábiles.',
successButton: 'Entendido',
},
},
cardPage: {
Expand Down
13 changes: 13 additions & 0 deletions src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2607,6 +2607,19 @@ const translations: TranslationDeepObject<typeof en> = {
confirmTestTransactions: 'Veuillez confirmer les transactions de test',
accountRequiresAttention: 'Ce compte nécessite une attention particulière',
unlock: 'Déverrouiller',
debitBlocked: 'Votre banque a bloqué les transactions de test vers ce compte',
insufficientFunds: 'Les transactions de test ont échoué en raison de fonds insuffisants',
validationFailedFallback: 'Votre banque a bloqué les transactions de test vers ce compte. <concierge-link>Contacter Concierge</concierge-link>',
},
fixBankAccount: {
title: 'Corriger le compte bancaire',
debitBlockedBody:
'Votre banque a bloqué les transactions de test vers ce compte.<br/><br/>Veuillez leur demander d’ajouter les identifiants ACH d’Expensify à leur liste blanche :<bullet-list><bullet-item>1270239450</bullet-item><bullet-item>2270239450</bullet-item><bullet-item>4270239450</bullet-item></bullet-list>Puis, renvoyez les transactions de test ci-dessous.',
insufficientFundsBody: 'Les transactions de test ont échoué en raison de fonds insuffisants. Une fois les fonds disponibles, utilisez le bouton ci-dessous.',
resendButton: 'Renvoyer les transactions',
successTitle: 'Transactions envoyées !',
successBody: 'Vérifiez votre compte bancaire dans un délai de 1 à 2 jours ouvrables.',
successButton: 'Compris',
},
},
cardPage: {
Expand Down
13 changes: 13 additions & 0 deletions src/languages/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2595,6 +2595,19 @@ const translations: TranslationDeepObject<typeof en> = {
confirmTestTransactions: 'Conferma le transazioni di prova',
accountRequiresAttention: 'Questo conto richiede attenzione',
unlock: 'Sblocca',
debitBlocked: 'La tua banca ha bloccato le transazioni di prova su questo conto',
insufficientFunds: 'Le transazioni di prova non sono riuscite per fondi insufficienti',
validationFailedFallback: 'La tua banca ha bloccato le transazioni di prova su questo conto. <concierge-link>Contatta Concierge</concierge-link>',
},
fixBankAccount: {
title: 'Correggi conto bancario',
debitBlockedBody:
'La tua banca ha bloccato le transazioni di prova verso questo conto.<br/><br/>Chiedi loro di inserire nella whitelist gli ID ACH di Expensify:<bullet-list><bullet-item>1270239450</bullet-item><bullet-item>2270239450</bullet-item><bullet-item>4270239450</bullet-item></bullet-list>Poi reinvia le transazioni di prova qui sotto.',
insufficientFundsBody: 'Le transazioni di prova non sono andate a buon fine per fondi insufficienti. Quando i fondi saranno disponibili, usa il pulsante qui sotto.',
resendButton: 'Invia nuovamente le transazioni',
successTitle: 'Transazioni inviate!',
successBody: 'Controlla il tuo conto bancario entro 1-2 giorni lavorativi.',
successButton: 'Ricevuto',
},
},
cardPage: {
Expand Down
13 changes: 13 additions & 0 deletions src/languages/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2572,6 +2572,19 @@ const translations: TranslationDeepObject<typeof en> = {
confirmTestTransactions: 'テスト取引を確認してください',
accountRequiresAttention: 'このアカウントには対応が必要です',
unlock: 'ロック解除',
debitBlocked: 'この口座へのテスト取引は銀行によってブロックされました',
insufficientFunds: '残高不足のためテスト取引に失敗しました',
validationFailedFallback: 'この口座へのテスト取引は銀行によってブロックされました。<concierge-link>Concierge に連絡する</concierge-link>',
},
fixBankAccount: {
title: '銀行口座を修正',
debitBlockedBody:
'この口座へのテスト取引が銀行によってブロックされました。<br/><br/>銀行に依頼して、Expensify の ACH ID をホワイトリストに登録してもらってください。<bullet-list><bullet-item>1270239450</bullet-item><bullet-item>2270239450</bullet-item><bullet-item>4270239450</bullet-item></bullet-list>その後、以下のテスト取引を再送してください。',
insufficientFundsBody: '残高不足のためテスト取引に失敗しました。残高が利用可能になりましたら、下のボタンを使用してください。',
resendButton: '取引を再送信',
successTitle: '取引を送信しました!',
successBody: '1〜2営業日以内に銀行口座をご確認ください。',
successButton: '了解しました',
},
},
cardPage: {
Expand Down
13 changes: 13 additions & 0 deletions src/languages/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2596,6 +2596,19 @@ const translations: TranslationDeepObject<typeof en> = {
confirmTestTransactions: 'Bevestig testtransacties alsjeblieft',
accountRequiresAttention: 'Deze account vereist aandacht',
unlock: 'Ontgrendelen',
debitBlocked: 'Je bank heeft testtransacties naar deze rekening geblokkeerd',
insufficientFunds: 'Testtransacties mislukt vanwege onvoldoende saldo',
validationFailedFallback: 'Je bank heeft testtransacties naar deze rekening geblokkeerd. <concierge-link>Neem contact op met Concierge</concierge-link>',
},
fixBankAccount: {
title: 'Bankrekening herstellen',
debitBlockedBody:
"Je bank heeft de testtransacties naar deze rekening geblokkeerd.<br/><br/>Vraag hen om de ACH-ID's van Expensify op de whitelist te zetten:<bullet-list><bullet-item>1270239450</bullet-item><bullet-item>2270239450</bullet-item><bullet-item>4270239450</bullet-item></bullet-list>Stuur daarna de testtransacties hieronder opnieuw.",
insufficientFundsBody: 'Testtransacties zijn mislukt vanwege onvoldoende saldo. Zodra er voldoende saldo is, gebruik dan de knop hieronder.',
resendButton: 'Transacties opnieuw verzenden',
successTitle: 'Transacties verzonden!',
successBody: 'Controleer je bankrekening in de komende 1–2 werkdagen.',
successButton: 'Begrepen',
},
},
cardPage: {
Expand Down
Loading
Loading