diff --git a/src/CONST/index.ts b/src/CONST/index.ts
index f3f1ce77b402..47293f981aee 100644
--- a/src/CONST/index.ts
+++ b/src/CONST/index.ts
@@ -6574,6 +6574,7 @@ const CONST = {
RTER_VIOLATION_TYPES: {
BROKEN_CARD_CONNECTION: 'brokenCardConnection',
BROKEN_CARD_CONNECTION_530: 'brokenCardConnection530',
+ BROKEN_CARD_CONNECTION_531: 'brokenCardConnection531',
SEVEN_DAY_HOLD: 'sevenDayHold',
},
REVIEW_DUPLICATES_ORDER: ['merchant', 'category', 'tag', 'description', 'taxCode', 'billable', 'reimbursable'],
diff --git a/src/components/BrokenConnectionDescription.tsx b/src/components/BrokenConnectionDescription.tsx
index 6699ddc1b190..861e060c6b8f 100644
--- a/src/components/BrokenConnectionDescription.tsx
+++ b/src/components/BrokenConnectionDescription.tsx
@@ -32,11 +32,12 @@ function BrokenConnectionDescription({transactionID, policy, report}: BrokenConn
const {environmentURL} = useEnvironment();
const brokenConnection530Error = transactionViolations?.find((violation) => violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530);
+ const brokenConnection531Error = transactionViolations?.find((violation) => violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531);
const brokenConnectionError = transactionViolations?.find((violation) => violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION);
const isPolicyAdmin = isPolicyAdminPolicyUtils(policy);
const workspaceCompanyCardRoute = `${environmentURL}/${ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policy?.id)}`;
- if (!brokenConnection530Error && !brokenConnectionError) {
+ if (!brokenConnection530Error && !brokenConnection531Error && !brokenConnectionError) {
return '';
}
@@ -44,6 +45,10 @@ function BrokenConnectionDescription({transactionID, policy, report}: BrokenConn
return translate('violations.brokenConnection530Error');
}
+ if (brokenConnection531Error) {
+ return translate('violations.brokenConnection531Error');
+ }
+
if (isPolicyAdmin && !isCurrentUserSubmitter(report)) {
return ;
}
diff --git a/src/components/MoneyRequestHeader.tsx b/src/components/MoneyRequestHeader.tsx
index 0dadca3f4edf..849f83d886c2 100644
--- a/src/components/MoneyRequestHeader.tsx
+++ b/src/components/MoneyRequestHeader.tsx
@@ -128,7 +128,10 @@ function MoneyRequestHeader({reportID: reportIDProp, onBackButtonPress}: MoneyRe
return {icon: getStatusIcon(icons.CreditCardHourglass), description: translate('iou.transactionPendingDescription')};
}
if (!!transaction?.transactionID && !!transactionViolations.length && shouldShowBrokenConnectionViolation) {
- const brokenConnectionError = transactionViolations?.find((violation) => violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION);
+ const brokenConnectionError = transactionViolations?.find(
+ (violation) =>
+ violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531,
+ );
const cardID = brokenConnectionError?.data?.cardID;
const card = cardID ? cardList?.[cardID] : undefined;
const isBrokenPersonalCard = isPersonalCard(card);
diff --git a/src/hooks/useMoneyReportHeaderStatusBar.ts b/src/hooks/useMoneyReportHeaderStatusBar.ts
index 2f45d7a3d185..1e2bd3bfa61f 100644
--- a/src/hooks/useMoneyReportHeaderStatusBar.ts
+++ b/src/hooks/useMoneyReportHeaderStatusBar.ts
@@ -122,7 +122,10 @@ function useMoneyReportHeaderStatusBar(reportID: string | undefined, chatReportI
return CONST.REPORT.STATUS_BAR_TYPE.DUPLICATES;
}
if (!!transaction?.transactionID && !!transactionViolations.length && shouldShowBrokenConnectionViolation) {
- const brokenConnectionError = transactionViolations.find((violation) => violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION);
+ const brokenConnectionError = transactionViolations.find(
+ (violation) =>
+ violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531,
+ );
const cardID = brokenConnectionError?.data?.cardID;
const card = cardID ? cardList?.[cardID] : undefined;
if (isPersonalCard(card) && brokenConnectionError) {
diff --git a/src/languages/de.ts b/src/languages/de.ts
index e339cc766d65..a66bf9000915 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -9818,6 +9818,9 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Beleg kann wegen unterbrochener Bankverbindung nicht automatisch zugeordnet werden.';
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return 'Beleg kann wegen eines vorübergehenden Bankproblems nicht automatisch zugeordnet werden. Bitte versuchen Sie es später erneut.';
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return 'Beleg kann wegen unterbrochener Bankverbindung nicht automatisch zugeordnet werden.';
@@ -9837,6 +9840,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
return '';
},
brokenConnection530Error: 'Beleg ausstehend wegen unterbrochener Bankverbindung',
+ brokenConnection531Error: 'Beleg kann wegen eines vorübergehenden Bankproblems nicht automatisch zugeordnet werden. Bitte versuchen Sie es später erneut.',
adminBrokenConnectionError: ({workspaceCompanyCardRoute}: {workspaceCompanyCardRoute: string}) =>
`Beleg ausstehend wegen unterbrochener Bankverbindung. Bitte in Firmenkarten beheben.`,
memberBrokenConnectionError: 'Beleg ausstehend aufgrund einer unterbrochenen Bankverbindung. Bitte wende dich an eine Workspace-Admin, um das Problem zu beheben.',
diff --git a/src/languages/el.ts b/src/languages/el.ts
index eca129a70a5d..ebc0c6056179 100644
--- a/src/languages/el.ts
+++ b/src/languages/el.ts
@@ -10049,6 +10049,9 @@ ${reportName}`,
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Δεν είναι δυνατή η αυτόματη αντιστοίχιση της απόδειξης λόγω σπασμένης σύνδεσης με την τράπεζα.';
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return 'Δεν είναι δυνατή η αυτόματη αντιστοίχιση της απόδειξης λόγω προσωρινού προβλήματος της τράπεζας. Δοκιμάστε ξανά αργότερα.';
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return 'Δεν είναι δυνατή η αυτόματη αντιστοίχιση της απόδειξης λόγω σπασμένης σύνδεσης με την τράπεζα.';
@@ -10068,6 +10071,7 @@ ${reportName}`,
return '';
},
brokenConnection530Error: 'Η απόδειξη εκκρεμεί λόγω αποσυνδεδεμένου τραπεζικού λογαριασμού',
+ brokenConnection531Error: 'Δεν είναι δυνατή η αυτόματη αντιστοίχιση της απόδειξης λόγω προσωρινού προβλήματος της τράπεζας. Δοκιμάστε ξανά αργότερα.',
adminBrokenConnectionError: ({workspaceCompanyCardRoute}: {workspaceCompanyCardRoute: string}) =>
`Η απόδειξη εκκρεμεί λόγω κατεστραμμένης σύνδεσης τράπεζας. Παρακαλώ επιλύστε το στις εταιρικές κάρτες.`,
memberBrokenConnectionError: 'Η απόδειξη εκκρεμεί λόγω προβλήματος στη σύνδεση με την τράπεζα. Παρακαλείστε να ζητήσετε από έναν διαχειριστή χώρου εργασίας να το επιλύσει.',
diff --git a/src/languages/en.ts b/src/languages/en.ts
index e83404432758..325e78b764f9 100644
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -9961,6 +9961,9 @@ const translations = {
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return "Can't auto-match receipt due to broken bank connection.";
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return "Can't auto-match receipt due to a temporary bank issue. Please try again later.";
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return "Can't auto-match receipt due to broken bank connection.";
@@ -9981,6 +9984,7 @@ const translations = {
return '';
},
brokenConnection530Error: 'Receipt pending due to broken bank connection',
+ brokenConnection531Error: "Can't auto-match receipt due to a temporary bank issue. Please try again later.",
adminBrokenConnectionError: ({workspaceCompanyCardRoute}: {workspaceCompanyCardRoute: string}) =>
`Receipt pending due to broken bank connection. Please resolve in Company cards.`,
memberBrokenConnectionError: 'Receipt pending due to broken bank connection. Please ask a workspace admin to resolve.',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 8550a36aad84..5edf0174a2ad 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -10019,6 +10019,9 @@ El plan Controlar empieza en 9 $ por miembro activo al mes.`,
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'No se puede emparejar automáticamente el recibo debido a una conexión bancaria interrumpida.';
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return 'No se puede emparejar automáticamente el recibo debido a un problema temporal del banco. Vuelve a intentarlo más tarde.';
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return 'No se puede emparejar automáticamente el recibo debido a una conexión bancaria interrumpida.';
@@ -10040,6 +10043,7 @@ El plan Controlar empieza en 9 $ por miembro activo al mes.`,
return '';
},
brokenConnection530Error: 'Recibo pendiente debido a una conexión bancaria rota',
+ brokenConnection531Error: 'No se puede emparejar automáticamente el recibo debido a un problema temporal del banco. Vuelve a intentarlo más tarde.',
adminBrokenConnectionError: ({workspaceCompanyCardRoute}) =>
`Recibo pendiente debido a una conexión bancaria rota. Por favor, resuélvelo en Tarjetas de empresa.`,
memberBrokenConnectionError: 'Recibo pendiente debido a una conexión bancaria rota. Por favor, pide a un administrador del espacio de trabajo que lo resuelva.',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 341f6e276551..5b81514bff86 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -9854,6 +9854,9 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Impossible d’apparier automatiquement le reçu en raison d’une connexion bancaire rompue.';
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return 'Impossible d’apparier automatiquement le reçu en raison d’un problème temporaire de la banque. Veuillez réessayer plus tard.';
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return 'Impossible d’apparier automatiquement le reçu en raison d’une connexion bancaire rompue.';
@@ -9873,6 +9876,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
return '';
},
brokenConnection530Error: 'Reçu en attente en raison d’une connexion bancaire rompue',
+ brokenConnection531Error: 'Impossible d’apparier automatiquement le reçu en raison d’un problème temporaire de la banque. Veuillez réessayer plus tard.',
adminBrokenConnectionError: ({workspaceCompanyCardRoute}: {workspaceCompanyCardRoute: string}) =>
`Reçu en attente en raison d’une connexion bancaire rompue. Veuillez résoudre le problème dans les Cartes d’entreprise.`,
memberBrokenConnectionError: 'Reçu en attente en raison d’une connexion bancaire rompue. Veuillez demander à un administrateur de l’espace de travail de résoudre le problème.',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index e5732ddb33a1..0eb14ea3ecd1 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -9791,6 +9791,9 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Impossibile abbinare automaticamente la ricevuta a causa di un problema di connessione bancaria.';
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return 'Impossibile abbinare automaticamente la ricevuta a causa di un problema temporaneo della banca. Riprova più tardi.';
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return 'Impossibile abbinare automaticamente la ricevuta a causa di un problema di connessione bancaria.';
@@ -9810,6 +9813,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
return '';
},
brokenConnection530Error: 'Ricevuta in sospeso a causa di connessione bancaria interrotta',
+ brokenConnection531Error: 'Impossibile abbinare automaticamente la ricevuta a causa di un problema temporaneo della banca. Riprova più tardi.',
adminBrokenConnectionError: ({workspaceCompanyCardRoute}: {workspaceCompanyCardRoute: string}) =>
`Ricevuta in sospeso a causa di un collegamento bancario interrotto. Risolvi il problema in Carte aziendali.`,
memberBrokenConnectionError: 'Ricevuta in sospeso a causa di un collegamento bancario interrotto. Chiedi a un amministratore dello spazio di lavoro di risolvere il problema.',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 5eaddd3c4e04..b09fb6a827b0 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -9662,6 +9662,9 @@ ${reportName}`,
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return '銀行連携の不具合により、領収書を自動照合できません。';
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return '銀行側の一時的な問題により、領収書を自動照合できません。後でもう一度お試しください。';
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return '銀行連携の不具合により、領収書を自動照合できません。';
@@ -9681,6 +9684,7 @@ ${reportName}`,
return '';
},
brokenConnection530Error: '銀行連携の不具合により領収書が保留されています',
+ brokenConnection531Error: '銀行側の一時的な問題により、領収書を自動照合できません。後でもう一度お試しください。',
adminBrokenConnectionError: ({workspaceCompanyCardRoute}: {workspaceCompanyCardRoute: string}) =>
`銀行接続の不具合により領収書が保留されています。会社カードで解決してください。`,
memberBrokenConnectionError: '銀行連携の不具合により領収書が保留されています。ワークスペース管理者に対応を依頼してください。',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 5cfc17a78608..f2b65c8492e4 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -9761,6 +9761,9 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Bon kan automatisch aan bon koppelen vanwege verbroken bankverbinding.';
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return 'Bon kan niet automatisch worden gekoppeld vanwege een tijdelijk probleem bij de bank. Probeer het later opnieuw.';
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return 'Bon kan automatisch aan bon koppelen vanwege verbroken bankverbinding.';
@@ -9780,6 +9783,7 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
return '';
},
brokenConnection530Error: 'Bonnetje in behandeling vanwege verbroken bankverbinding',
+ brokenConnection531Error: 'Bon kan niet automatisch worden gekoppeld vanwege een tijdelijk probleem bij de bank. Probeer het later opnieuw.',
adminBrokenConnectionError: ({workspaceCompanyCardRoute}: {workspaceCompanyCardRoute: string}) =>
`Bon in behandeling vanwege een verbroken bankverbinding. Los dit op in Bedrijfspassen.`,
memberBrokenConnectionError: 'Bon wordt vastgehouden vanwege een verbroken bankkoppeling. Vraag een werkruimtebeheerder om dit op te lossen.',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index e3f085645e06..10ab61d5497b 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -9733,6 +9733,9 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Nie można automatycznie dopasować paragonu z powodu zerwanego połączenia z bankiem.';
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return 'Nie można automatycznie dopasować paragonu z powodu tymczasowego problemu z bankiem. Spróbuj ponownie później.';
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return 'Nie można automatycznie dopasować paragonu z powodu zerwanego połączenia z bankiem.';
@@ -9752,6 +9755,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
return '';
},
brokenConnection530Error: 'Paragon oczekuje z powodu przerwanego połączenia z bankiem',
+ brokenConnection531Error: 'Nie można automatycznie dopasować paragonu z powodu tymczasowego problemu z bankiem. Spróbuj ponownie później.',
adminBrokenConnectionError: ({workspaceCompanyCardRoute}: {workspaceCompanyCardRoute: string}) =>
`Oczekuje na rachunek z powodu przerwanego połączenia z bankiem. Rozwiąż problem w sekcji Karty firmowe.`,
memberBrokenConnectionError: 'Paragon oczekuje z powodu zerwanego połączenia z bankiem. Poproś administratora przestrzeni roboczej o rozwiązanie problemu.',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 1fc515162525..07715659c176 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -9756,6 +9756,9 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Não é possível conciliar automaticamente o recibo devido a uma conexão bancária com erro.';
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return 'Não é possível conciliar automaticamente o recibo devido a um problema temporário no banco. Tente novamente mais tarde.';
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return 'Não é possível conciliar automaticamente o recibo devido a uma conexão bancária com erro.';
@@ -9775,6 +9778,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
return '';
},
brokenConnection530Error: 'Recibo pendente devido à conexão bancária interrompida',
+ brokenConnection531Error: 'Não é possível conciliar automaticamente o recibo devido a um problema temporário no banco. Tente novamente mais tarde.',
adminBrokenConnectionError: ({workspaceCompanyCardRoute}: {workspaceCompanyCardRoute: string}) =>
`Recibo pendente devido a uma conexão bancária interrompida. Resolva em Cartões corporativos.`,
memberBrokenConnectionError: 'Recibo pendente devido à conexão bancária com problemas. Peça a um administrador do workspace para resolver.',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 283097d61a33..6c714aa40826 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -9415,6 +9415,9 @@ ${reportName}`,
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return '由于银行连接中断,无法自动匹配收据。';
}
+ if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531) {
+ return '由于银行出现暂时性问题,无法自动匹配收据。请稍后重试。';
+ }
if (isPersonalCard && (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || brokenBankConnection)) {
if (!connectionLink) {
return '由于银行连接中断,无法自动匹配收据。';
@@ -9432,6 +9435,7 @@ ${reportName}`,
return '';
},
brokenConnection530Error: '由于银行连接中断,收据待处理',
+ brokenConnection531Error: '由于银行出现暂时性问题,无法自动匹配收据。请稍后重试。',
adminBrokenConnectionError: ({workspaceCompanyCardRoute}: {workspaceCompanyCardRoute: string}) =>
`由于银行连接中断,收据暂时待处理。请前往公司卡中解决。`,
memberBrokenConnectionError: '由于银行连接中断,收据处于待处理状态。请联系工作区管理员解决。',
diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts
index 9be380e29052..2335b96564ab 100644
--- a/src/libs/TransactionUtils/index.ts
+++ b/src/libs/TransactionUtils/index.ts
@@ -1862,7 +1862,8 @@ function hasPendingRTERViolation(transactionViolations?: TransactionViolations |
transactionViolation.name === CONST.VIOLATIONS.RTER &&
transactionViolation.data?.pendingPattern &&
transactionViolation.data?.rterType !== CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION &&
- transactionViolation.data?.rterType !== CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530,
+ transactionViolation.data?.rterType !== CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530 &&
+ transactionViolation.data?.rterType !== CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531,
);
}
@@ -1910,7 +1911,9 @@ function hasBrokenConnectionViolation(
function isBrokenConnectionViolation(violation: TransactionViolation) {
return (
violation.name === CONST.VIOLATIONS.RTER &&
- (violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION || violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530)
+ (violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION ||
+ violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530 ||
+ violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531)
);
}
diff --git a/tests/ui/BrokenConnectionDescriptionTest.tsx b/tests/ui/BrokenConnectionDescriptionTest.tsx
new file mode 100644
index 000000000000..5acadb199f58
--- /dev/null
+++ b/tests/ui/BrokenConnectionDescriptionTest.tsx
@@ -0,0 +1,63 @@
+import {render, screen} from '@testing-library/react-native';
+
+import BrokenConnectionDescription from '@components/BrokenConnectionDescription';
+import ComposeProviders from '@components/ComposeProviders';
+import HTMLEngineProvider from '@components/HTMLEngineProvider';
+import {LocaleContextProvider} from '@components/LocaleContextProvider';
+import OnyxListItemProvider from '@components/OnyxListItemProvider';
+
+import CONST from '@src/CONST';
+import IntlStore from '@src/languages/IntlStore';
+import ONYXKEYS from '@src/ONYXKEYS';
+import type {TransactionViolations} from '@src/types/onyx';
+
+import React from 'react';
+import {Text} from 'react-native';
+import Onyx from 'react-native-onyx';
+
+import waitForBatchedUpdatesWithAct from '../utils/waitForBatchedUpdatesWithAct';
+
+const mockUseTransactionViolations = jest.fn();
+jest.mock('@hooks/useTransactionViolations', () => ({
+ __esModule: true,
+ default: (...args: unknown[]) => mockUseTransactionViolations(...args),
+}));
+
+const renderDescription = () =>
+ render(
+
+
+
+
+ ,
+ );
+
+describe('BrokenConnectionDescription', () => {
+ beforeAll(() => {
+ Onyx.init({keys: ONYXKEYS});
+ return IntlStore.load(CONST.LOCALES.EN);
+ });
+
+ afterEach(() => {
+ mockUseTransactionViolations.mockReset();
+ });
+
+ it('shows the temporary retry-later message for a 531 broken card connection', async () => {
+ mockUseTransactionViolations.mockReturnValue([
+ {
+ name: 'rter',
+ type: 'violation',
+ data: {rterType: CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531},
+ },
+ ] as TransactionViolations);
+
+ renderDescription();
+ await waitForBatchedUpdatesWithAct();
+
+ expect(screen.getByText("Can't auto-match receipt due to a temporary bank issue. Please try again later.")).toBeTruthy();
+ });
+});
diff --git a/tests/unit/TransactionUtilsTest.ts b/tests/unit/TransactionUtilsTest.ts
index 865ea3d412fe..04864f31bcb8 100644
--- a/tests/unit/TransactionUtilsTest.ts
+++ b/tests/unit/TransactionUtilsTest.ts
@@ -1293,6 +1293,14 @@ describe('TransactionUtils', () => {
expect(showBrokenConnectionViolation).toBe(true);
});
+ it('should return true for a 531 (temporary, retry later) broken connection violation', () => {
+ const policy = createMock({role: CONST.POLICY.ROLE.USER});
+ const transactionViolations = [{type: CONST.VIOLATION_TYPES.VIOLATION, name: CONST.VIOLATIONS.RTER, data: {rterType: CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531}}];
+ const showBrokenConnectionViolation = shouldShowBrokenConnectionViolation(undefined, policy, transactionViolations);
+
+ expect(showBrokenConnectionViolation).toBe(true);
+ });
+
it('should return true when a broken connection violation exists for any of the provided transactions and the user is the policy member', () => {
const policy = createMock({
role: CONST.POLICY.ROLE.USER,
diff --git a/tests/unit/ViolationUtilsTest.ts b/tests/unit/ViolationUtilsTest.ts
index 1e7cf440f632..fc3182c88bee 100644
--- a/tests/unit/ViolationUtilsTest.ts
+++ b/tests/unit/ViolationUtilsTest.ts
@@ -3421,6 +3421,14 @@ const brokenCardConnection530Violation: TransactionViolation = {
},
};
+const brokenCardConnection531Violation: TransactionViolation = {
+ name: CONST.VIOLATIONS.RTER,
+ type: CONST.VIOLATION_TYPES.VIOLATION,
+ data: {
+ rterType: CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_531,
+ },
+};
+
describe('getViolationTranslation', () => {
it('should return the correct message for broken card connection violation', () => {
const testPolicyID = 'test-policy-123';
@@ -3443,6 +3451,14 @@ describe('getViolationTranslation', () => {
);
});
+ it('should return the temporary retry-later message for a 531 broken card connection', async () => {
+ IntlStore.load(CONST.LOCALES.EN);
+ await waitForBatchedUpdates();
+ expect(ViolationsUtils.getViolationTranslation({dateFnsLocale: undefined, violation: brokenCardConnection531Violation, translate: translateLocal, convertToDisplayString})).toBe(
+ "Can't auto-match receipt due to a temporary bank issue. Please try again later.",
+ );
+ });
+
describe('increasedDistance violation', () => {
const increasedDistanceViolation: TransactionViolation = {
name: CONST.VIOLATIONS.INCREASED_DISTANCE,