diff --git a/src/languages/en.ts b/src/languages/en.ts
index e40fa0893776..7bdd7e0ac316 100755
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -2371,10 +2371,25 @@ const translations = {
agreementsStep: {
agreements: 'Agreements',
pleaseConfirm: 'Please confirm the agreements below',
+ regulationRequiresUs: 'Regulation requires us to verify the identity of any individual who owns more than 25% of the business.',
+ iAmAuthorized: 'I am authorized to use the business bank account for business spend.',
+ iCertify: 'I certify that the information provided is true and accurate.',
+ termsAndConditions: 'terms and conditions.',
accept: 'Accept and add bank account',
+ error: {
+ authorized: 'You must be a controlling officer with authorization to operate the business bank account',
+ certify: 'Please certify that the information is true and accurate',
+ },
},
finishStep: {
connect: 'Connect bank account',
+ letsFinish: "Let's finish in chat!",
+ thanksFor:
+ "Thanks for those details. A dedicated support agent will now review your information. We'll circle back if we need anything else from you, but in the meantime, feel free to reach out to us with any questions.",
+ iHaveA: 'I have a question',
+ enable2FA: 'Enable two-factor authentication (2FA) to prevent fraud',
+ weTake: 'We take your security seriously. Please set up 2FA now to add an extra layer of protection to your account.',
+ secure: 'Secure your account',
},
reimbursementAccountLoadingAnimation: {
oneMoment: 'One moment',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 7271da67ab9e..90bb2ba466f1 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -2381,7 +2381,7 @@ const translations = {
uploadID: 'Subir documento de identidad y prueba de domicilio',
id: 'Identificación (licencia de conducir o pasaporte)',
personalAddress: 'Prueba de domicilio personal (por ejemplo, factura de servicios públicos)',
- letsDoubleCheck: 'Vamos a comprobar que todo está bien.',
+ letsDoubleCheck: 'Vamos a verificar que todo esté correcto.',
legalName: 'Nombre legal',
proofOf: 'Comprobante de domicilio personal',
enterOneEmail: 'Introduce el correo electrónico del director o alto funcionario en',
@@ -2395,10 +2395,25 @@ const translations = {
agreementsStep: {
agreements: 'Acuerdos',
pleaseConfirm: 'Por favor confirme los acuerdos a continuación',
- accept: 'Aceptar y añadir cuenta bancaria',
+ regulationRequiresUs: 'La normativa requiere que verifiquemos la identidad de cualquier individuo que posea más del 25% del negocio.',
+ iAmAuthorized: 'Estoy autorizado para usar la cuenta bancaria para gastos del negocio.',
+ iCertify: 'Certifico que la información proporcionada es verdadera y correcta.',
+ termsAndConditions: 'términos y condiciones.',
+ accept: 'Agregar y aceptar cuenta bancaria',
+ error: {
+ authorized: 'Debe ser un funcionario controlador con autorización para operar la cuenta bancaria comercial',
+ certify: 'Por favor certifique que la información es verdadera y exacta',
+ },
},
finishStep: {
connect: 'Conectar cuenta bancaria',
+ letsFinish: '¡Terminemos en el chat!',
+ thanksFor:
+ 'Gracias por esos detalles. Un agente de soporte dedicado revisará ahora tu información. Nos pondremos en contacto si necesitamos algo más de tu parte, pero mientras tanto, no dudes en comunicarte con nosotros si tienes alguna pregunta.',
+ iHaveA: 'Tengo una pregunta',
+ enable2FA: 'Habilite la autenticación de dos factores (2FA) para prevenir fraudes',
+ weTake: 'Nos tomamos su seguridad en serio. Por favor, configure 2FA ahora para agregar una capa adicional de protección a su cuenta.',
+ secure: 'Asegure su cuenta',
},
reimbursementAccountLoadingAnimation: {
oneMoment: 'Un momento',
diff --git a/src/pages/ReimbursementAccount/NonUSD/Agreements/Agreements.tsx b/src/pages/ReimbursementAccount/NonUSD/Agreements/index.tsx
similarity index 100%
rename from src/pages/ReimbursementAccount/NonUSD/Agreements/Agreements.tsx
rename to src/pages/ReimbursementAccount/NonUSD/Agreements/index.tsx
diff --git a/src/pages/ReimbursementAccount/NonUSD/Agreements/substeps/Confirmation.tsx b/src/pages/ReimbursementAccount/NonUSD/Agreements/substeps/Confirmation.tsx
index da828929b0da..945b17c530ae 100644
--- a/src/pages/ReimbursementAccount/NonUSD/Agreements/substeps/Confirmation.tsx
+++ b/src/pages/ReimbursementAccount/NonUSD/Agreements/substeps/Confirmation.tsx
@@ -1,24 +1,116 @@
-import React from 'react';
+import React, {useCallback} from 'react';
+import {useOnyx} from 'react-native-onyx';
+import CheckboxWithLabel from '@components/CheckboxWithLabel';
import FormProvider from '@components/Form/FormProvider';
+import InputWrapper from '@components/Form/InputWrapper';
+import type {FormInputErrors, FormOnyxValues} from '@components/Form/types';
import Text from '@components/Text';
+import TextLink from '@components/TextLink';
import useLocalize from '@hooks/useLocalize';
import type {SubStepProps} from '@hooks/useSubStep/types';
import useThemeStyles from '@hooks/useThemeStyles';
+import * as ValidationUtils from '@libs/ValidationUtils';
import ONYXKEYS from '@src/ONYXKEYS';
+import INPUT_IDS from '@src/types/form/ReimbursementAccountForm';
+
+const {AUTHORIZED_TO_BIND_CLIENT_TO_AGREEMENT, PROVIDE_TRUTHFUL_INFORMATION, AGREE_TO_TERMS_AND_CONDITIONS} = INPUT_IDS.ADDITIONAL_DATA.CORPAY;
+const STEP_FIELDS = [AUTHORIZED_TO_BIND_CLIENT_TO_AGREEMENT, PROVIDE_TRUTHFUL_INFORMATION, AGREE_TO_TERMS_AND_CONDITIONS];
+
+function IsAuthorizedToUseBankAccountLabel() {
+ const {translate} = useLocalize();
+ return {translate('agreementsStep.iAmAuthorized')};
+}
+
+function CertifyTrueAndAccurateLabel() {
+ const {translate} = useLocalize();
+ return {translate('agreementsStep.iCertify')};
+}
+
+function TermsAndConditionsLabel() {
+ const {translate} = useLocalize();
+ return (
+
+ {translate('common.iAcceptThe')}
+ {`${translate('agreementsStep.termsAndConditions')}`}
+
+ );
+}
function Confirmation({onNext}: SubStepProps) {
const {translate} = useLocalize();
const styles = useThemeStyles();
+ const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT);
+ const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT);
+
+ const defaultValues = {
+ [AUTHORIZED_TO_BIND_CLIENT_TO_AGREEMENT]:
+ !!reimbursementAccount?.achData?.additionalData?.corpay?.[AUTHORIZED_TO_BIND_CLIENT_TO_AGREEMENT] ?? reimbursementAccountDraft?.[AUTHORIZED_TO_BIND_CLIENT_TO_AGREEMENT] ?? '',
+ [PROVIDE_TRUTHFUL_INFORMATION]:
+ !!reimbursementAccount?.achData?.additionalData?.corpay?.[PROVIDE_TRUTHFUL_INFORMATION] ?? reimbursementAccountDraft?.[PROVIDE_TRUTHFUL_INFORMATION] ?? '',
+ [AGREE_TO_TERMS_AND_CONDITIONS]:
+ !!reimbursementAccount?.achData?.additionalData?.corpay?.[AGREE_TO_TERMS_AND_CONDITIONS] ?? reimbursementAccountDraft?.[AGREE_TO_TERMS_AND_CONDITIONS] ?? '',
+ };
+
+ const validate = useCallback(
+ (values: FormOnyxValues): FormInputErrors => {
+ const errors = ValidationUtils.getFieldRequiredErrors(values, STEP_FIELDS);
+
+ if (!ValidationUtils.isRequiredFulfilled(values[AUTHORIZED_TO_BIND_CLIENT_TO_AGREEMENT])) {
+ errors[AUTHORIZED_TO_BIND_CLIENT_TO_AGREEMENT] = translate('agreementsStep.error.authorized');
+ }
+
+ if (!ValidationUtils.isRequiredFulfilled(values[PROVIDE_TRUTHFUL_INFORMATION])) {
+ errors[PROVIDE_TRUTHFUL_INFORMATION] = translate('agreementsStep.error.certify');
+ }
+
+ if (!ValidationUtils.isRequiredFulfilled(values[AGREE_TO_TERMS_AND_CONDITIONS])) {
+ errors[AGREE_TO_TERMS_AND_CONDITIONS] = translate('common.error.acceptTerms');
+ }
+
+ return errors;
+ },
+ [translate],
+ );
+
return (
{translate('agreementsStep.pleaseConfirm')}
+ {translate('agreementsStep.regulationRequiresUs')}
+
+
+
);
}
diff --git a/src/pages/ReimbursementAccount/NonUSD/Finish/Finish.tsx b/src/pages/ReimbursementAccount/NonUSD/Finish/Finish.tsx
deleted file mode 100644
index 69c0e9e77a45..000000000000
--- a/src/pages/ReimbursementAccount/NonUSD/Finish/Finish.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react';
-import HeaderWithBackButton from '@components/HeaderWithBackButton';
-import ScreenWrapper from '@components/ScreenWrapper';
-import ScrollView from '@components/ScrollView';
-import useLocalize from '@hooks/useLocalize';
-import useThemeStyles from '@hooks/useThemeStyles';
-import Navigation from '@navigation/Navigation';
-
-function Finish() {
- const styles = useThemeStyles();
- const {translate} = useLocalize();
-
- const handleBackButtonPress = () => {
- Navigation.goBack();
- };
-
- return (
-
-
-
-
- );
-}
-
-Finish.displayName = 'Finish';
-
-export default Finish;
diff --git a/src/pages/ReimbursementAccount/NonUSD/Finish/index.tsx b/src/pages/ReimbursementAccount/NonUSD/Finish/index.tsx
new file mode 100644
index 000000000000..48da42b8b1ef
--- /dev/null
+++ b/src/pages/ReimbursementAccount/NonUSD/Finish/index.tsx
@@ -0,0 +1,88 @@
+import React from 'react';
+import {View} from 'react-native';
+import {useOnyx} from 'react-native-onyx';
+import Button from '@components/Button';
+import HeaderWithBackButton from '@components/HeaderWithBackButton';
+import * as Expensicons from '@components/Icon/Expensicons';
+import * as Illustrations from '@components/Icon/Illustrations';
+import ScreenWrapper from '@components/ScreenWrapper';
+import ScrollView from '@components/ScrollView';
+import Section from '@components/Section';
+import Text from '@components/Text';
+import useLocalize from '@hooks/useLocalize';
+import useThemeStyles from '@hooks/useThemeStyles';
+import Navigation from '@navigation/Navigation';
+import * as Report from '@userActions/Report';
+import ONYXKEYS from '@src/ONYXKEYS';
+import ROUTES from '@src/ROUTES';
+
+function Finish() {
+ const styles = useThemeStyles();
+ const {translate} = useLocalize();
+
+ const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT);
+ const policyID = reimbursementAccount?.achData?.policyID ?? '-1';
+
+ const handleBackButtonPress = () => {
+ Navigation.goBack();
+ };
+ const handleNavigateToConciergeChat = () => Report.navigateToConciergeChat(true);
+
+ return (
+
+
+
+
+ {translate('finishStep.thanksFor')}
+
+
+ {
+ Navigation.navigate(ROUTES.SETTINGS_2FA.getRoute(ROUTES.BANK_ACCOUNT_WITH_STEP_TO_OPEN.getRoute('', policyID)));
+ },
+ icon: Expensicons.Shield,
+ shouldShowRightIcon: true,
+ iconRight: Expensicons.NewWindow,
+ wrapperStyle: [styles.cardMenuItem],
+ },
+ ]}
+ >
+
+ {translate('finishStep.weTake')}
+
+
+
+
+ );
+}
+
+Finish.displayName = 'Finish';
+
+export default Finish;
diff --git a/src/pages/ReimbursementAccount/NonUSD/SignerInfo/EnterEmail.tsx b/src/pages/ReimbursementAccount/NonUSD/SignerInfo/EnterEmail.tsx
index 5d0de4eb7fd9..11c778bcd5b8 100644
--- a/src/pages/ReimbursementAccount/NonUSD/SignerInfo/EnterEmail.tsx
+++ b/src/pages/ReimbursementAccount/NonUSD/SignerInfo/EnterEmail.tsx
@@ -58,6 +58,7 @@ function EnterEmail({onSubmit, isUserDirector}: EnterEmailProps) {
style={[styles.mh5, styles.flexGrow1]}
>
{translate(shouldGatherBothEmails ? 'signerInfoStep.enterTwoEmails' : 'signerInfoStep.enterOneEmail')}
+ {!shouldGatherBothEmails && {translate('signerInfoStep.regulationRequiresOneMoreDirector')}}