diff --git a/assets/pdfs/PDSAndFSG.pdf b/assets/pdfs/PDSAndFSG.pdf index 76b265f6df16..168b55a1d332 100644 Binary files a/assets/pdfs/PDSAndFSG.pdf and b/assets/pdfs/PDSAndFSG.pdf differ diff --git a/cspell.json b/cspell.json index a47b2b92091f..be1cc3aa5437 100644 --- a/cspell.json +++ b/cspell.json @@ -668,6 +668,7 @@ "idempotently", "idfa", "ifdef", + "illion", "imagebutton", "inbetweenCompo", "initialises", diff --git a/src/components/SubStepForms/AgreementsFullStep.tsx b/src/components/SubStepForms/AgreementsFullStep.tsx index 3dd72bba6522..e0fbd45b3a98 100644 --- a/src/components/SubStepForms/AgreementsFullStep.tsx +++ b/src/components/SubStepForms/AgreementsFullStep.tsx @@ -1,10 +1,11 @@ import CheckboxWithLabel from '@components/CheckboxWithLabel'; import FormProvider from '@components/Form/FormProvider'; import InputWrapper from '@components/Form/InputWrapper'; -import type {FormInputErrors, FormOnyxKeys, FormOnyxValues} from '@components/Form/types'; +import type {FormInputErrors, FormOnyxKeys, FormOnyxValues, FormRef} from '@components/Form/types'; import InteractiveStepWrapper from '@components/InteractiveStepWrapper'; import RenderHTML from '@components/RenderHTML'; import Text from '@components/Text'; +import UploadFile from '@components/UploadFile'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -13,11 +14,14 @@ import {getFieldRequiredErrors, isRequiredFulfilled} from '@libs/ValidationUtils import requiresDocusignStep from '@pages/ReimbursementAccount/NonUSD/utils/requiresDocusignStep'; -import {clearErrors} from '@userActions/FormActions'; +import {clearErrorFields, clearErrors, setDraftValues, setErrorFields} from '@userActions/FormActions'; +import CONST from '@src/CONST'; import type {OnyxFormValuesMapping} from '@src/ONYXKEYS'; +import type {FileObject} from '@src/types/utils/Attachment'; -import React, {useCallback, useMemo} from 'react'; +import React, {useCallback, useMemo, useRef, useState} from 'react'; +import {View} from 'react-native'; function IsAuthorizedToUseBankAccountLabel() { const {translate} = useLocalize(); @@ -71,6 +75,12 @@ type AgreementsFullStepProps = { /** Index of currently active step in header */ startStepIndex: number; + + /** ID of the bank statement file upload input. When provided, a required bank statement upload is rendered. */ + bankStatementInputID?: FormOnyxKeys; + + /** Default value for the bank statement file upload input */ + bankStatementDefaultValue?: FileObject[]; }; function AgreementsFullStep({ @@ -83,15 +93,53 @@ function AgreementsFullStep({ currency, stepNames, startStepIndex, + bankStatementInputID, + bankStatementDefaultValue, }: AgreementsFullStepProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); + const formRef = useRef(null); + const [uploadedBankStatement, setUploadedBankStatement] = useState(bankStatementDefaultValue ?? []); + const isDocusignStepRequired = requiresDocusignStep(currency); - const stepFields = useMemo( - () => [inputIDs.authorizedToBindClientToAgreement, inputIDs.provideTruthfulInformation, inputIDs.agreeToTermsAndConditions, inputIDs.consentToPrivacyNotice], - [inputIDs.authorizedToBindClientToAgreement, inputIDs.provideTruthfulInformation, inputIDs.agreeToTermsAndConditions, inputIDs.consentToPrivacyNotice], - ); + const stepFields = useMemo(() => { + const fields = [inputIDs.authorizedToBindClientToAgreement, inputIDs.provideTruthfulInformation, inputIDs.agreeToTermsAndConditions, inputIDs.consentToPrivacyNotice]; + if (bankStatementInputID) { + fields.push(bankStatementInputID); + } + return fields; + }, [inputIDs.authorizedToBindClientToAgreement, inputIDs.provideTruthfulInformation, inputIDs.agreeToTermsAndConditions, inputIDs.consentToPrivacyNotice, bankStatementInputID]); + + const handleSelectBankStatement = (files: FileObject[]) => { + if (!bankStatementInputID) { + return; + } + setDraftValues(formID, {[bankStatementInputID]: [...uploadedBankStatement, ...files]}); + setUploadedBankStatement((prev) => [...prev, ...files]); + }; + + const handleRemoveBankStatement = (fileName: string) => { + if (!bankStatementInputID) { + return; + } + const newUploadedFiles = uploadedBankStatement.filter((file) => file.name !== fileName); + setDraftValues(formID, {[bankStatementInputID]: newUploadedFiles}); + setUploadedBankStatement(newUploadedFiles); + }; + + const setBankStatementError = (error: string) => { + if (!bankStatementInputID) { + return; + } + if (!error) { + clearErrorFields(formID); + return; + } + formRef.current?.resetFormFieldError(String(bankStatementInputID)); + clearErrors(formID); + setErrorFields(formID, {[bankStatementInputID]: {onUpload: error}}); + }; const handleBackButtonPress = () => { clearErrors(formID); @@ -132,6 +180,7 @@ function AgreementsFullStep({ startStepIndex={startStepIndex} > ({ defaultValue={defaultValues[inputIDs.consentToPrivacyNotice]} shouldSaveDraft /> + {!!bankStatementInputID && ( + <> + + {translate('agreementsStep.bankStatement')} + { + handleSelectBankStatement(files); + }} + onRemove={(fileName) => { + handleRemoveBankStatement(fileName); + }} + acceptedFileTypes={[...CONST.CORPAY_DOCUMENT.ALLOWED_FILE_TYPES]} + value={uploadedBankStatement} + inputID={String(bankStatementInputID)} + setError={(error) => { + setBankStatementError(error); + }} + fileLimit={1} + maxFileSize={CONST.CORPAY_DOCUMENT.MAX_FILE_SIZE} + /> + {translate('agreementsStep.bankStatementDescription')} + + )} ); diff --git a/src/languages/de.ts b/src/languages/de.ts index 90c12f77afa9..d6fc8510a961 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -4248,6 +4248,9 @@ ${amount} für ${merchant} – ${date}`, proofOf: 'Nachweis der Privatadresse', enterOneEmail: (companyName: string) => `Gib die E-Mail-Adresse einer Geschäftsführungsperson von ${companyName} ein`, regulationRequiresOneMoreDirector: 'Vorschriften erfordern mindestens eine weitere:n Geschäftsführer:in als Unterzeichner:in.', + bothSignersMustBeOnIllionReport: + 'Beide Unterzeichner müssen im illion-Bericht des Unternehmens als Direktoren aufgeführt sein. Es können nicht beliebige zwei Personen im Unternehmen sein.', + signerMustBeOnIllionReport: 'Die als Unterzeichner hinzugefügte Geschäftsführungsperson muss im illion-Bericht des Unternehmens aufgeführt sein.', hangTight: 'Einen Moment bitte ...', enterTwoEmails: (companyName: string) => `Gib die E-Mail-Adressen von zwei Direktoren bei ${companyName} ein`, sendReminder: 'Erinnerung senden', @@ -4258,11 +4261,11 @@ ${amount} für ${merchant} – ${date}`, proofOfDirectorsDescription: 'Beispiele: Oncorp-Unternehmensprofil oder Unternehmensregistrierung.', codiceFiscale: 'Steuernummer', codiceFiscaleDescription: 'Codice Fiscale für Unterzeichnende, Bevollmächtigte und wirtschaftlich Berechtigte.', - PDSandFSG: 'PDS- und FSG-Offenlegungsunterlagen', + PDSandFSG: 'PDS-, FSG- und TMD-Offenlegungsunterlagen', PDSandFSGDescription: Str.dedent(` - Unsere Partnerschaft mit Corpay nutzt eine API-Verbindung, um deren umfangreiches Netzwerk internationaler Bankpartner zu verwenden und so Globale Erstattungen in Expensify zu ermöglichen. Gemäß den australischen Vorschriften stellen wir Ihnen den Financial Services Guide (FSG) und die Product Disclosure Statement (PDS) von Corpay zur Verfügung. + Unsere Partnerschaft mit Corpay nutzt eine API-Verbindung, um das umfangreiche Netzwerk internationaler Bankpartner zu verwenden, das Globale Rückerstattungen in Expensify ermöglicht. Gemäß den australischen Vorschriften stellen wir Ihnen den Financial Services Guide (FSG), das Product Disclosure Statement (PDS) und die Target Market Determination (TMD) von Corpay zur Verfügung. - Bitte lesen Sie die FSG- und PDS-Dokumente sorgfältig, da sie vollständige Details und wichtige Informationen zu den Produkten und Dienstleistungen enthalten, die Corpay anbietet. Bewahren Sie diese Dokumente für zukünftige Referenzzwecke auf. + Bitte lesen Sie die FSG-, PDS- und TMD-Dokumente sorgfältig, da sie vollständige Details und wichtige Informationen zu den Produkten und Dienstleistungen enthalten, die Corpay anbietet. Bewahren Sie diese Dokumente für eine spätere Bezugnahme auf. `), pleaseUpload: 'Bitte laden Sie unten zusätzliche Unterlagen hoch, damit wir Ihre Identität als Geschäftsführer*in des Unternehmens verifizieren können.', enterSignerInfo: 'Unterzeichnerinformationen eingeben', @@ -4274,6 +4277,8 @@ ${amount} für ${merchant} – ${date}`, }, }, agreementsStep: { + bankStatement: 'Kontoauszug', + bankStatementDescription: 'Bitte laden Sie einen aktuellen Kontoauszug hoch, der innerhalb der letzten drei Monate ausgestellt wurde, für das Geschäftskonto, das Sie verbinden.', agreements: 'Vereinbarungen', pleaseConfirm: 'Bitte bestätige die folgenden Vereinbarungen', regulationRequiresUs: 'Vorschriften verpflichten uns, die Identität jeder Person zu überprüfen, die mehr als 25 % des Unternehmens besitzt.', @@ -4282,7 +4287,7 @@ ${amount} für ${merchant} – ${date}`, iAcceptTheTermsAndConditions: `Ich akzeptiere die Allgemeinen Geschäftsbedingungen.`, iAcceptTheTermsAndConditionsAccessibility: 'Ich akzeptiere die Geschäftsbedingungen.', accept: 'Akzeptieren und Bankkonto hinzufügen', - iConsentToThePrivacyNotice: 'Ich stimme der Datenschutzerklärung zu.', + iConsentToThePrivacyNotice: 'Ich stimme der Datenschutzerklärung zu.', iConsentToThePrivacyNoticeAccessibility: 'Ich stimme der Datenschutzerklärung zu.', error: { authorized: 'Sie müssen eine vertretungsberechtigte Führungskraft mit Vollmacht zur Führung des Geschäftskontos sein', diff --git a/src/languages/el.ts b/src/languages/el.ts index bf92231ac01f..a9f33aff9d86 100644 --- a/src/languages/el.ts +++ b/src/languages/el.ts @@ -4310,6 +4310,9 @@ ${amount} για ${merchant} - ${date}`, proofOf: 'Απόδειξη προσωπικής διεύθυνσης', enterOneEmail: (companyName: string) => `Εισαγάγετε το email ενός διευθυντή στην ${companyName}`, regulationRequiresOneMoreDirector: 'Η νομοθεσία απαιτεί τουλάχιστον έναν ακόμη διευθυντή ως υπογράφοντα.', + bothSignersMustBeOnIllionReport: + 'Και οι δύο υπογράφοντες πρέπει να αναφέρονται ως διευθυντές στην αναφορά illion της εταιρείας. Δεν μπορούν να είναι οποιοιδήποτε δύο άτομα στην επιχείρηση.', + signerMustBeOnIllionReport: 'Ο διευθυντής που προσθέτετε ως υπογράφοντα πρέπει να αναγράφεται στην αναφορά illion της εταιρείας.', hangTight: 'Μισό λεπτό...', enterTwoEmails: (companyName: string) => `Εισαγάγετε τα email δύο διευθυντών στην ${companyName}`, sendReminder: 'Αποστολή υπενθύμισης', @@ -4320,11 +4323,11 @@ ${amount} για ${merchant} - ${date}`, proofOfDirectorsDescription: 'Παραδείγματα: εταιρικό προφίλ Oncorp ή καταχώριση επιχείρησης.', codiceFiscale: 'Κωδικός Φορολογικού Μητρώου', codiceFiscaleDescription: 'Codice Fiscale για υπογράφοντες, εξουσιοδοτημένους χρήστες και πραγματικούς δικαιούχους.', - PDSandFSG: 'Έγγραφα γνωστοποίησης PDS + FSG', + PDSandFSG: 'Έγγραφα γνωστοποίησης PDS, FSG και TMD', PDSandFSGDescription: Str.dedent(` - Η συνεργασία μας με την Corpay χρησιμοποιεί σύνδεση API ώστε να αξιοποιήσει το εκτεταμένο δίκτυο διεθνών τραπεζικών συνεργατών της για να υποστηρίξει τις Παγκόσμιες Αποζημιώσεις στην Expensify. Σύμφωνα με την αυστραλιανή νομοθεσία, σας παρέχουμε τον Οδηγό Χρηματοοικονομικών Υπηρεσιών (Financial Services Guide, FSG) και τη Δήλωση Αποκάλυψης Προϊόντος (Product Disclosure Statement, PDS) της Corpay. + Η συνεργασία μας με την Corpay χρησιμοποιεί σύνδεση API για να αξιοποιήσει το εκτεταμένο δίκτυο διεθνών τραπεζικών συνεργατών της, ώστε να υποστηρίξει τις παγκόσμιες επιστροφές χρημάτων στο Expensify. Σύμφωνα με τους κανονισμούς της Αυστραλίας, σάς παρέχουμε τον Οδηγό Χρηματοοικονομικών Υπηρεσιών (FSG), το Έγγραφο Γνωστοποίησης Προϊόντος (PDS) και τον Καθορισμό Στόχου Αγοράς (TMD) της Corpay. - Παρακαλούμε διαβάστε προσεκτικά τα έγγραφα FSG και PDS, καθώς περιέχουν πλήρεις λεπτομέρειες και σημαντικές πληροφορίες για τα προϊόντα και τις υπηρεσίες που προσφέρει η Corpay. Διατηρήστε αυτά τα έγγραφα για μελλοντική αναφορά. + Παρακαλούμε διαβάστε προσεκτικά τα έγγραφα FSG, PDS και TMD, καθώς περιέχουν πλήρεις λεπτομέρειες και σημαντικές πληροφορίες σχετικά με τα προϊόντα και τις υπηρεσίες που προσφέρει η Corpay. Κρατήστε αυτά τα έγγραφα για μελλοντική αναφορά. `), pleaseUpload: 'Παρακαλούμε ανεβάστε επιπλέον έγγραφα παρακάτω, ώστε να μας βοηθήσετε να επαληθεύσουμε την ταυτότητά σας ως διευθυντή της επιχείρησης.', enterSignerInfo: 'Εισαγάγετε τα στοιχεία υπογράφοντα', @@ -4336,6 +4339,9 @@ ${amount} για ${merchant} - ${date}`, }, }, agreementsStep: { + bankStatement: 'Απόσπασμα κίνησης λογαριασμού', + bankStatementDescription: + 'Παρακαλούμε προσκομίστε ένα πρόσφατο αντίγραφο κίνησης τραπεζικού λογαριασμού, εκδοθέν μέσα στους τελευταίους τρεις μήνες, για τον επαγγελματικό τραπεζικό λογαριασμό που συνδέετε.', agreements: 'Συμφωνίες', pleaseConfirm: 'Παρακαλούμε επιβεβαιώστε τις παρακάτω συμφωνίες', regulationRequiresUs: 'Οι κανονισμοί απαιτούν να επαληθεύουμε την ταυτότητα κάθε ατόμου που κατέχει πάνω από 25% της επιχείρησης.', @@ -4344,7 +4350,7 @@ ${amount} για ${merchant} - ${date}`, iAcceptTheTermsAndConditions: `Αποδέχομαι τους όρους και τις προϋποθέσεις.`, iAcceptTheTermsAndConditionsAccessibility: 'Αποδέχομαι τους όρους και τις προϋποθέσεις.', accept: 'Αποδοχή και προσθήκη τραπεζικού λογαριασμού', - iConsentToThePrivacyNotice: 'Συναινώ στην ειδοποίηση απορρήτου.', + iConsentToThePrivacyNotice: 'Συναινώ με την ειδοποίηση απορρήτου.', iConsentToThePrivacyNoticeAccessibility: 'Συναινώ στην ειδοποίηση απορρήτου.', error: { authorized: 'Πρέπει να είστε υπεύθυνος αξιωματούχος με εξουσιοδότηση να διαχειρίζεστε τον επαγγελματικό τραπεζικό λογαριασμό', diff --git a/src/languages/en.ts b/src/languages/en.ts index 76b65c1ce7fc..3dc1757c1861 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -4342,6 +4342,8 @@ const translations = { proofOf: 'Proof of personal address', enterOneEmail: (companyName: string) => `Enter the email of a director at ${companyName}`, regulationRequiresOneMoreDirector: 'Regulation requires at least one more director as a signer.', + bothSignersMustBeOnIllionReport: "Both signers must be listed as directors on the company's illion report. They can't be any two people at the business.", + signerMustBeOnIllionReport: "The director you add as a signer must be listed on the company's illion report.", hangTight: 'Hang tight...', enterTwoEmails: (companyName: string) => `Enter the emails of two directors at ${companyName}`, sendReminder: 'Send a reminder', @@ -4352,11 +4354,11 @@ const translations = { proofOfDirectorsDescription: 'Examples: Oncorp Corporate Profile or Business Registration.', codiceFiscale: 'Codice Fiscale', codiceFiscaleDescription: 'Codice Fiscale for Signatories, Authorized Users and Beneficial Owners.', - PDSandFSG: 'PDS + FSG disclosure paperwork', + PDSandFSG: 'PDS, FSG + TMD disclosure paperwork', PDSandFSGDescription: Str.dedent(` - Our partnership with Corpay utilizes an API connection to take advantage of their vast network of international banking partners to power Global Reimbursements in Expensify. As per Australian regulation we are providing you with Corpay's Financial Services Guide (FSG) and Product Disclosure Statement (PDS). + Our partnership with Corpay utilizes an API connection to take advantage of their vast network of international banking partners to power Global Reimbursements in Expensify. As per Australian regulation we are providing you with Corpay's Financial Services Guide (FSG), Product Disclosure Statement (PDS) and Target Market Determination (TMD). - Please read the FSG and PDS documents carefully as they contain full details and important information on the products and services Corpay offers. Retain these documents for future reference. + Please read the FSG, PDS and TMD documents carefully as they contain full details and important information on the products and services Corpay offers. Retain these documents for future reference. `), pleaseUpload: 'Please upload additional documentation below to help us verify your identity as a director of the business.', enterSignerInfo: 'Enter signer info', @@ -4368,6 +4370,8 @@ const translations = { }, }, agreementsStep: { + bankStatement: 'Bank statement', + bankStatementDescription: "Please provide a recent bank statement, dated within the last three months, for the business bank account you're connecting.", 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.', @@ -4376,7 +4380,7 @@ const translations = { iAcceptTheTermsAndConditions: `I accept the terms and conditions.`, iAcceptTheTermsAndConditionsAccessibility: 'I accept the terms and conditions.', accept: 'Accept and add bank account', - iConsentToThePrivacyNotice: 'I consent to the privacy notice.', + iConsentToThePrivacyNotice: 'I consent to the privacy notice.', iConsentToThePrivacyNoticeAccessibility: 'I consent to the privacy notice.', error: { authorized: 'You must be a controlling officer with authorization to operate the business bank account', diff --git a/src/languages/es.ts b/src/languages/es.ts index efedd83a41f4..4b96bd1372a8 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -4128,6 +4128,9 @@ ${amount} para ${merchant} - ${date}`, proofOf: 'Comprobante de domicilio personal', enterOneEmail: (companyName) => `Introduce el correo electrónico del director en ${companyName}`, regulationRequiresOneMoreDirector: 'El reglamento exige que haya otro director como firmante.', + bothSignersMustBeOnIllionReport: + 'Ambas personas firmantes deben figurar como directores en el informe de illion de la empresa. No pueden ser simplemente dos personas cualquiera del negocio.', + signerMustBeOnIllionReport: 'El director que añadas como firmante debe estar incluido en el informe de illion de la empresa.', hangTight: 'Espera un momento...', enterTwoEmails: (companyName) => `Introduce los correos electrónicos de dos directores en ${companyName}`, sendReminder: 'Enviar un recordatorio', @@ -4138,9 +4141,12 @@ ${amount} para ${merchant} - ${date}`, proofOfDirectorsDescription: 'Ejemplos: Perfil Corporativo de Oncorp o Registro Comercial.', codiceFiscale: 'Codice Fiscale', codiceFiscaleDescription: 'Codice Fiscale para firmantes, usuarios autorizados y beneficiarios finales.', - PDSandFSG: 'Documentación de divulgación PDS + FSG', - PDSandFSGDescription: - 'Nuestra colaboración con Corpay utiliza una conexión API para aprovechar su amplia red de socios bancarios internacionales y facilitar los reembolsos globales en Expensify. Según la normativa australiana, te proporcionamos la Guía de Servicios Financieros (FSG) y el Documento de Divulgación del Producto (PDS) de Corpay.\n\nPor favor, lee detenidamente los documentos FSG y PDS, ya que contienen información completa e importante sobre los productos y servicios que ofrece Corpay. Conserva estos documentos para futuras consultas.', + PDSandFSG: 'Documentación de divulgación del PDS, FSG y TMD', + PDSandFSGDescription: Str.dedent(` + Nuestra colaboración con Corpay utiliza una conexión API para aprovechar su amplia red de socios bancarios internacionales y así impulsar los Reembolsos Globales en Expensify. De acuerdo con la normativa australiana, te proporcionamos la Guía de Servicios Financieros (FSG), el Documento de Divulgación del Producto (PDS) y la Determinación del Mercado Objetivo (TMD) de Corpay. + + Lee detenidamente los documentos FSG, PDS y TMD, ya que contienen todos los detalles e información importante sobre los productos y servicios que ofrece Corpay. Conserva estos documentos para futuras consultas. + `), pleaseUpload: 'Sube documentación adicional a continuación para ayudarnos a verificar tu identidad como director de la empresa.', enterSignerInfo: 'Ingrese la información del firmante', thisStep: 'Este paso ha sido completado', @@ -4151,6 +4157,8 @@ ${amount} para ${merchant} - ${date}`, }, }, agreementsStep: { + bankStatement: 'Extracto bancario', + bankStatementDescription: 'Por favor, proporciona un extracto bancario reciente, con fecha de los últimos tres meses, de la cuenta bancaria de empresa que estás conectando.', agreements: 'Acuerdos', pleaseConfirm: 'Por favor confirme los acuerdos a continuación', regulationRequiresUs: 'La normativa requiere que verifiquemos la identidad de cualquier individuo que posea más del 25% del negocio.', @@ -4159,7 +4167,7 @@ ${amount} para ${merchant} - ${date}`, iAcceptTheTermsAndConditions: `Acepto los términos y condiciones.`, iAcceptTheTermsAndConditionsAccessibility: 'Acepto los términos y condiciones.', accept: 'Agregar y aceptar cuenta bancaria', - iConsentToThePrivacyNotice: 'Doy mi consentimiento para el aviso de privacidad.', + iConsentToThePrivacyNotice: 'Doy mi consentimiento al aviso de privacidad.', iConsentToThePrivacyNoticeAccessibility: 'Doy mi consentimiento para el aviso de privacidad.', error: { authorized: 'Debe ser un funcionario controlador con autorización para operar la cuenta bancaria comercial', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 6ff241adbee0..4dfd79493b96 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -4258,6 +4258,9 @@ ${amount} pour ${merchant} - ${date}`, proofOf: 'Justificatif de domicile personnel', enterOneEmail: (companyName: string) => `Saisissez l’e-mail d’un directeur de ${companyName}`, regulationRequiresOneMoreDirector: 'La réglementation exige au moins un autre directeur en tant que signataire.', + bothSignersMustBeOnIllionReport: + 'Les deux signataires doivent être indiqués comme administrateurs sur le rapport illion de l’entreprise. Il ne peut pas s’agir de n’importe quelles deux personnes de l’entreprise.', + signerMustBeOnIllionReport: 'Le directeur que vous ajoutez comme signataire doit figurer sur le rapport illion de l’entreprise.', hangTight: 'Un instant...', enterTwoEmails: (companyName: string) => `Saisissez les adresses e-mail de deux directeurs de ${companyName}`, sendReminder: 'Envoyer un rappel', @@ -4268,11 +4271,11 @@ ${amount} pour ${merchant} - ${date}`, proofOfDirectorsDescription: 'Exemples : profil d’entreprise Oncorp ou enregistrement d’entreprise.', codiceFiscale: 'Code fiscal', codiceFiscaleDescription: 'Code fiscal pour les signataires, utilisateurs autorisés et bénéficiaires effectifs.', - PDSandFSG: 'Documents de divulgation PDS + FSG', + PDSandFSG: 'Documents de divulgation PDS, FSG et TMD', PDSandFSGDescription: Str.dedent(` - Notre partenariat avec Corpay utilise une connexion API afin de tirer parti de leur vaste réseau de partenaires bancaires internationaux pour alimenter les remboursements internationaux dans Expensify. Conformément à la réglementation australienne, nous vous fournissons le Financial Services Guide (FSG) et le Product Disclosure Statement (PDS) de Corpay. + Notre partenariat avec Corpay utilise une connexion API pour tirer parti de son vaste réseau de partenaires bancaires internationaux afin d’alimenter les remboursements internationaux dans Expensify. Conformément à la réglementation australienne, nous vous fournissons le Financial Services Guide (FSG), le Product Disclosure Statement (PDS) et le Target Market Determination (TMD) de Corpay. - Veuillez lire attentivement les documents FSG et PDS, car ils contiennent des informations complètes et importantes sur les produits et services proposés par Corpay. Conservez ces documents pour référence ultérieure. + Veuillez lire attentivement les documents FSG, PDS et TMD, car ils contiennent tous les détails et des informations importantes sur les produits et services proposés par Corpay. Conservez ces documents pour référence ultérieure. `), pleaseUpload: 'Veuillez téléverser ci-dessous des documents supplémentaires pour nous aider à vérifier votre identité en tant que dirigeant(e) de l’entreprise.', enterSignerInfo: 'Saisir les informations du signataire', @@ -4284,6 +4287,8 @@ ${amount} pour ${merchant} - ${date}`, }, }, agreementsStep: { + bankStatement: 'Relevé bancaire', + bankStatementDescription: 'Veuillez fournir un relevé bancaire récent, daté de moins de trois mois, pour le compte bancaire professionnel que vous connectez.', agreements: 'Accords', pleaseConfirm: 'Veuillez confirmer les accords ci-dessous', regulationRequiresUs: 'La réglementation nous oblige à vérifier l’identité de toute personne détenant plus de 25 % de l’entreprise.', @@ -4292,7 +4297,7 @@ ${amount} pour ${merchant} - ${date}`, iAcceptTheTermsAndConditions: `J'accepte les conditions générales.`, iAcceptTheTermsAndConditionsAccessibility: 'J’accepte les conditions générales.', accept: 'Accepter et ajouter un compte bancaire', - iConsentToThePrivacyNotice: 'Je consens à l’avis de confidentialité.', + iConsentToThePrivacyNotice: 'Je consens à l’avis de confidentialité.', iConsentToThePrivacyNoticeAccessibility: 'Je consens à la notice de confidentialité.', error: { authorized: 'Vous devez être un responsable habilité, autorisé à utiliser le compte bancaire professionnel', diff --git a/src/languages/it.ts b/src/languages/it.ts index 1c34234fac77..1daf4d345e73 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -4230,6 +4230,9 @@ ${amount} per ${merchant} - ${date}`, proofOf: 'Prova di indirizzo personale', enterOneEmail: (companyName: string) => `Inserisci l’email di un direttore di ${companyName}`, regulationRequiresOneMoreDirector: 'La normativa richiede almeno un altro direttore come firmatario.', + bothSignersMustBeOnIllionReport: + 'Entrambi i firmatari devono essere indicati come amministratori nel report illion dell’azienda. Non possono essere due persone qualsiasi dell’azienda.', + signerMustBeOnIllionReport: "Il direttore che aggiungi come firmatario deve essere indicato nel report illion dell'azienda.", hangTight: 'Un attimo...', enterTwoEmails: (companyName: string) => `Inserisci le email di due direttori di ${companyName}`, sendReminder: 'Invia un promemoria', @@ -4240,11 +4243,11 @@ ${amount} per ${merchant} - ${date}`, proofOfDirectorsDescription: 'Esempi: profilo aziendale Oncorp o registrazione dell’impresa.', codiceFiscale: 'Codice fiscale', codiceFiscaleDescription: 'Codice fiscale per firmatari, utenti autorizzati e titolari effettivi.', - PDSandFSG: 'Documentazione di informativa PDS + FSG', + PDSandFSG: 'Documentazione informativa PDS, FSG + TMD', PDSandFSGDescription: Str.dedent(` - La nostra partnership con Corpay utilizza una connessione API per sfruttare la loro vasta rete di partner bancari internazionali e alimentare i Rimborsi globali in Expensify. In conformità alla normativa australiana, ti forniamo la Financial Services Guide (FSG) e il Product Disclosure Statement (PDS) di Corpay. + La nostra partnership con Corpay utilizza una connessione API per sfruttare la loro vasta rete di partner bancari internazionali e alimentare i Rimborsi Globali in Expensify. In conformità con la normativa australiana, ti forniamo la Financial Services Guide (FSG), il Product Disclosure Statement (PDS) e il Target Market Determination (TMD) di Corpay. - Leggi attentamente i documenti FSG e PDS, poiché contengono tutti i dettagli e informazioni importanti sui prodotti e servizi offerti da Corpay. Conserva questi documenti per riferimenti futuri. + Leggi attentamente i documenti FSG, PDS e TMD, perché contengono tutti i dettagli e informazioni importanti sui prodotti e servizi offerti da Corpay. Conserva questi documenti per riferimento futuro. `), pleaseUpload: 'Carica ulteriore documentazione qui sotto per aiutarci a verificare la tua identità come amministratore dell’azienda.', enterSignerInfo: 'Inserisci le informazioni del firmatario', @@ -4256,6 +4259,8 @@ ${amount} per ${merchant} - ${date}`, }, }, agreementsStep: { + bankStatement: 'Estratto conto bancario', + bankStatementDescription: 'Fornisci un estratto conto bancario recente, datato negli ultimi tre mesi, per il conto bancario aziendale che stai collegando.', agreements: 'Accordi', pleaseConfirm: 'Conferma gli accordi qui sotto', regulationRequiresUs: 'La normativa ci impone di verificare l’identità di ogni persona fisica che possiede più del 25% dell’attività.', @@ -4264,7 +4269,7 @@ ${amount} per ${merchant} - ${date}`, iAcceptTheTermsAndConditions: `Accetto i termini e condizioni.`, iAcceptTheTermsAndConditionsAccessibility: 'Accetto i termini e le condizioni.', accept: 'Accetta e aggiungi conto bancario', - iConsentToThePrivacyNotice: 'Acconsento all’informativa sulla privacy.', + iConsentToThePrivacyNotice: 'Acconsento all’informativa sulla privacy.', iConsentToThePrivacyNoticeAccessibility: 'Acconsento all’informativa sulla privacy.', error: { authorized: 'Devi essere un responsabile con autorizzazione a operare sul conto bancario aziendale', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index ad527c2c3524..5103f2b1b359 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -4198,6 +4198,8 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' proofOf: '個人住所の証明', enterOneEmail: (companyName: string) => `${companyName} のディレクターのメールアドレスを入力してください`, regulationRequiresOneMoreDirector: '規定により、署名者として最低でももう一人の取締役が必要です。', + bothSignersMustBeOnIllionReport: '両方の署名者は、会社の illion レポートに取締役として記載されている必要があります。事業に関わる任意の2人であってはなりません。', + signerMustBeOnIllionReport: '署名者として追加する取締役は、会社の illion レポートに記載されている必要があります。', hangTight: '少々お待ちください…', enterTwoEmails: (companyName: string) => `${companyName} の取締役2名のメールアドレスを入力してください`, sendReminder: 'リマインダーを送信', @@ -4208,11 +4210,11 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' proofOfDirectorsDescription: '例:Oncorp 企業プロフィールまたは企業登録。', codiceFiscale: '納税者番号', codiceFiscaleDescription: '署名者、権限を付与されたユーザー、および実質的支配者のための納税者番号(Codice Fiscale)。', - PDSandFSG: 'PDS と FSG の開示書類', + PDSandFSG: 'PDS、FSG + TMD 開示書類', PDSandFSGDescription: Str.dedent(` - Expensify は Corpay との提携により、API 接続を通じて Corpay の広大な国際銀行パートナーネットワークを活用し、グローバル払い戻し機能を提供しています。オーストラリアの規制に基づき、Corpay の金融サービスガイド(FSG)および商品開示説明書(PDS)をお渡しします。 + Corpay との提携では API 接続を利用し、Corpay が有する広範な国際銀行ネットワークを活用して、Expensify のグローバル払い戻し機能を提供しています。オーストラリアの規制に従い、Corpay の金融サービスガイド(FSG)、商品開示文書(PDS)、ターゲット市場判定書(TMD)をご提供します。 - FSG と PDS には、Corpay が提供する商品とサービスの詳細および重要な情報が記載されていますので、よくお読みください。今後の参照のため、これらの書類を保管しておいてください。 + これらの FSG、PDS、TMD の各文書には、Corpay が提供する商品およびサービスの詳細と重要な情報が記載されていますので、必ず注意深くお読みください。今後の参照のために、これらの文書を保管しておいてください。 `), pleaseUpload: 'ビジネスの取締役としての本人確認を行うため、以下に追加の書類をアップロードしてください。', enterSignerInfo: '署名者情報を入力', @@ -4224,6 +4226,8 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' }, }, agreementsStep: { + bankStatement: '銀行取引明細書', + bankStatementDescription: '接続するビジネス用銀行口座について、過去3か月以内の日付の最新の銀行取引明細書をご提出ください。', agreements: '契約書', pleaseConfirm: '以下の規約に同意してください', regulationRequiresUs: '法律により、事業の持分を25%超所有するすべての個人の本人確認を行うことが求められています。', @@ -4232,7 +4236,7 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' iAcceptTheTermsAndConditions: `私は利用規約と条件に同意します。`, iAcceptTheTermsAndConditionsAccessibility: '利用規約に同意します。', accept: '承認して銀行口座を追加', - iConsentToThePrivacyNotice: '私はプライバシー通知に同意します。', + iConsentToThePrivacyNotice: '私はプライバシー通知に同意します。', iConsentToThePrivacyNoticeAccessibility: 'プライバシー通知に同意します。', error: { authorized: 'ビジネス用銀行口座を操作する権限を持つ管理責任者である必要があります', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index c6f495885175..d68de5a1818f 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -4230,6 +4230,9 @@ ${amount} voor ${merchant} - ${date}`, proofOf: 'Bewijs van privéadres', enterOneEmail: (companyName: string) => `Voer het e-mailadres in van een directeur bij ${companyName}`, regulationRequiresOneMoreDirector: 'Volgens de regelgeving is minstens één extra directeur als ondertekenaar vereist.', + bothSignersMustBeOnIllionReport: + 'Beide ondertekenaars moeten als directeur op het illion-rapport van het bedrijf staan. Het mogen niet zomaar twee willekeurige mensen binnen het bedrijf zijn.', + signerMustBeOnIllionReport: 'De directeur die je toevoegt als ondertekenaar, moet vermeld staan in het illion‑rapport van het bedrijf.', hangTight: 'Even geduld...', enterTwoEmails: (companyName: string) => `Voer de e-mailadressen in van twee directeuren bij ${companyName}`, sendReminder: 'Stuur een herinnering', @@ -4240,11 +4243,11 @@ ${amount} voor ${merchant} - ${date}`, proofOfDirectorsDescription: 'Voorbeelden: Oncorp bedrijfsprofiel of bedrijfsregistratie.', codiceFiscale: 'Codice Fiscale', codiceFiscaleDescription: 'Codice Fiscale voor ondertekenaars, bevoegde gebruikers en uiteindelijk belanghebbenden.', - PDSandFSG: 'PDS- en FSG-informatiedocumenten', + PDSandFSG: 'PDS-, FSG- en TMD-openbaarmakingsdocumenten', PDSandFSGDescription: Str.dedent(` - Onze samenwerking met Corpay maakt gebruik van een API-koppeling om te profiteren van hun uitgebreide netwerk van internationale bankpartners, waarmee Wereldwijde Vergoedingen in Expensify mogelijk worden gemaakt. Conform de Australische regelgeving verstrekken wij je hierbij de Financial Services Guide (FSG) en de Product Disclosure Statement (PDS) van Corpay. + Onze samenwerking met Corpay maakt gebruik van een API-verbinding om te profiteren van hun uitgebreide netwerk van internationale bankpartners om Wereldwijde Vergoedingen in Expensify mogelijk te maken. In overeenstemming met de Australische regelgeving verstrekken we je hierbij Corpay's Financial Services Guide (FSG), Product Disclosure Statement (PDS) en Target Market Determination (TMD). - Lees de FSG- en PDS-documenten zorgvuldig door, aangezien zij volledige details en belangrijke informatie bevatten over de producten en diensten die Corpay aanbiedt. Bewaar deze documenten voor toekomstig gebruik. + Lees de FSG-, PDS- en TMD-documenten zorgvuldig, omdat ze volledige details en belangrijke informatie bevatten over de producten en diensten die Corpay aanbiedt. Bewaar deze documenten voor toekomstig gebruik. `), pleaseUpload: 'Upload hieronder extra documentatie om ons te helpen uw identiteit als directeur van het bedrijf te verifiëren.', enterSignerInfo: 'Voer ondertekenaargegevens in', @@ -4256,6 +4259,8 @@ ${amount} voor ${merchant} - ${date}`, }, }, agreementsStep: { + bankStatement: 'Bankafschrift', + bankStatementDescription: 'Upload een recent bankafschrift, gedateerd binnen de laatste drie maanden, voor de zakelijke bankrekening die je koppelt.', agreements: 'Overeenkomsten', pleaseConfirm: 'Bevestig de onderstaande overeenkomsten', regulationRequiresUs: 'Volgens de regelgeving moeten we de identiteit verifiëren van elke persoon die meer dan 25% van het bedrijf bezit.', @@ -4264,7 +4269,7 @@ ${amount} voor ${merchant} - ${date}`, iAcceptTheTermsAndConditions: `Ik ga akkoord met de algemene voorwaarden.`, iAcceptTheTermsAndConditionsAccessibility: 'Ik ga akkoord met de algemene voorwaarden.', accept: 'Accepteren en bankrekening toevoegen', - iConsentToThePrivacyNotice: 'Ik ga akkoord met de privacyverklaring.', + iConsentToThePrivacyNotice: 'Ik ga akkoord met de privacyverklaring.', iConsentToThePrivacyNoticeAccessibility: 'Ik ga akkoord met de privacyverklaring.', error: { authorized: 'Je moet een tekenbevoegde functionaris zijn met machtiging om de zakelijke bankrekening te beheren', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 4a171f78e0aa..fa1830253139 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -4215,6 +4215,8 @@ ${amount} dla ${merchant} - ${date}`, proofOf: 'Potwierdzenie adresu zamieszkania', enterOneEmail: (companyName: string) => `Wpisz adres e-mail dyrektora w firmie ${companyName}`, regulationRequiresOneMoreDirector: 'Przepisy wymagają co najmniej jednego dodatkowego dyrektora jako sygnatariusza.', + bothSignersMustBeOnIllionReport: 'Obaj sygnatariusze muszą być wymienieni jako dyrektorzy w raporcie illion firmy. Nie mogą to być przypadkowe dwie osoby z firmy.', + signerMustBeOnIllionReport: 'Dyrektor, którego dodasz jako sygnatariusza, musi figurować w raporcie illion firmy.', hangTight: 'Chwileczkę…', enterTwoEmails: (companyName: string) => `Wpisz adresy e-mail dwóch dyrektorów w firmie ${companyName}`, sendReminder: 'Wyślij przypomnienie', @@ -4225,11 +4227,11 @@ ${amount} dla ${merchant} - ${date}`, proofOfDirectorsDescription: 'Przykłady: profil korporacyjny Oncorp lub rejestracja firmy.', codiceFiscale: 'Kod fiskalny', codiceFiscaleDescription: 'Codice Fiscale dla sygnatariuszy, użytkowników upoważnionych i beneficjentów rzeczywistych.', - PDSandFSG: 'Dokumenty ujawnieniowe PDS + FSG', + PDSandFSG: 'Dokumenty ujawniające PDS, FSG + TMD', PDSandFSGDescription: Str.dedent(` - Nasza współpraca z Corpay wykorzystuje połączenie API, aby korzystać z ich rozległej sieci międzynarodowych partnerów bankowych obsługujących Globalne Zwroty w Expensify. Zgodnie z regulacjami obowiązującymi w Australii udostępniamy Ci Przewodnik po usługach finansowych (Financial Services Guide, FSG) oraz Dokument ujawniający informacje o produkcie (Product Disclosure Statement, PDS) firmy Corpay. + Nasze partnerstwo z Corpay wykorzystuje połączenie API, aby skorzystać z ich rozległej sieci międzynarodowych partnerów bankowych i dzięki temu obsługiwać Globalne Zwroty w Expensify. Zgodnie z australijskimi przepisami udostępniamy ci Financial Services Guide (FSG), Product Disclosure Statement (PDS) oraz Target Market Determination (TMD) firmy Corpay. - Przeczytaj uważnie dokumenty FSG i PDS, ponieważ zawierają one pełne informacje i ważne szczegóły dotyczące produktów i usług oferowanych przez Corpay. Zachowaj te dokumenty do wykorzystania w przyszłości. + Przeczytaj uważnie dokumenty FSG, PDS i TMD, ponieważ zawierają one pełne informacje i ważne szczegóły na temat produktów i usług oferowanych przez Corpay. Zachowaj te dokumenty do przyszłego wglądu. `), pleaseUpload: 'Prześlij poniżej dodatkową dokumentację, abyśmy mogli zweryfikować Twoją tożsamość jako dyrektora firmy.', enterSignerInfo: 'Wprowadź dane sygnatariusza', @@ -4241,6 +4243,8 @@ ${amount} dla ${merchant} - ${date}`, }, }, agreementsStep: { + bankStatement: 'Wyciąg bankowy', + bankStatementDescription: 'Dołącz aktualny wyciąg bankowy z ostatnich trzech miesięcy dla firmowego rachunku bankowego, który chcesz połączyć.', agreements: 'Umowy', pleaseConfirm: 'Potwierdź poniższe zgody', regulationRequiresUs: 'Przepisy wymagają od nas weryfikacji tożsamości każdej osoby, która posiada ponad 25% udziałów w firmie.', @@ -4249,7 +4253,7 @@ ${amount} dla ${merchant} - ${date}`, iAcceptTheTermsAndConditions: `Akceptuję warunki i zasady.`, iAcceptTheTermsAndConditionsAccessibility: 'Akceptuję warunki.', accept: 'Zaakceptuj i dodaj konto bankowe', - iConsentToThePrivacyNotice: 'Wyrażam zgodę na informację o ochronie prywatności.', + iConsentToThePrivacyNotice: 'Wyrażam zgodę na informację o prywatności.', iConsentToThePrivacyNoticeAccessibility: 'Wyrażam zgodę na informację o prywatności.', error: { authorized: 'Musisz być osobą zasiadającą we władzach firmy z upoważnieniem do obsługi firmowego rachunku bankowego', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index dea97fc1921e..08d059bd6048 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -4218,6 +4218,8 @@ ${amount} para ${merchant} - ${date}`, proofOf: 'Comprovante de endereço residencial', enterOneEmail: (companyName: string) => `Insira o e-mail de um diretor em ${companyName}`, regulationRequiresOneMoreDirector: 'A regulamentação exige pelo menos mais um diretor como signatário.', + bothSignersMustBeOnIllionReport: 'Ambos os signatários devem constar como diretores no relatório illion da empresa. Eles não podem ser quaisquer duas pessoas do negócio.', + signerMustBeOnIllionReport: 'O diretor que você adicionar como signatário deve constar no relatório da empresa na illion.', hangTight: 'Aguarde um instante...', enterTwoEmails: (companyName: string) => `Insira os e-mails de dois diretores em ${companyName}`, sendReminder: 'Enviar um lembrete', @@ -4228,11 +4230,11 @@ ${amount} para ${merchant} - ${date}`, proofOfDirectorsDescription: 'Exemplos: Perfil Corporativo Oncorp ou Registro de Empresa.', codiceFiscale: 'Código fiscal', codiceFiscaleDescription: 'Codice Fiscale para signatários, usuários autorizados e beneficiários finais.', - PDSandFSG: 'Documentação de divulgação do PDS + FSG', + PDSandFSG: 'Documentação de divulgação PDS, FSG + TMD', PDSandFSGDescription: Str.dedent(` - Nossa parceria com a Corpay utiliza uma conexão de API para aproveitar sua vasta rede de parceiros bancários internacionais e impulsionar os Reembolsos Globais no Expensify. De acordo com a regulamentação australiana, estamos fornecendo o Guia de Serviços Financeiros (FSG) e o Documento de Divulgação de Produto (PDS) da Corpay. + Nossa parceria com a Corpay utiliza uma conexão por API para aproveitar sua ampla rede de parceiros bancários internacionais e viabilizar Reembolsos Globais no Expensify. De acordo com a regulamentação australiana, estamos fornecendo a você o Financial Services Guide (FSG), o Product Disclosure Statement (PDS) e o Target Market Determination (TMD) da Corpay. - Leia com atenção os documentos FSG e PDS, pois eles contêm todos os detalhes e informações importantes sobre os produtos e serviços oferecidos pela Corpay. Guarde esses documentos para referência futura. + Leia atentamente os documentos FSG, PDS e TMD, pois eles contêm todos os detalhes e informações importantes sobre os produtos e serviços oferecidos pela Corpay. Guarde esses documentos para referência futura. `), pleaseUpload: 'Envie abaixo documentação adicional para nos ajudar a verificar sua identidade como diretor(a) da empresa.', enterSignerInfo: 'Insira as informações do assinante', @@ -4244,6 +4246,8 @@ ${amount} para ${merchant} - ${date}`, }, }, agreementsStep: { + bankStatement: 'Extrato bancário', + bankStatementDescription: 'Forneça um extrato bancário recente, datado dos últimos três meses, da conta bancária empresarial que você está conectando.', agreements: 'Acordos', pleaseConfirm: 'Confirme os acordos abaixo', regulationRequiresUs: 'A regulamentação exige que verifiquemos a identidade de qualquer pessoa física que possua mais de 25% do negócio.', @@ -4252,7 +4256,7 @@ ${amount} para ${merchant} - ${date}`, iAcceptTheTermsAndConditions: `Eu aceito os termos e condições.`, iAcceptTheTermsAndConditionsAccessibility: 'Eu aceito os termos e condições.', accept: 'Aceitar e adicionar conta bancária', - iConsentToThePrivacyNotice: 'Eu concordo com o aviso de privacidade.', + iConsentToThePrivacyNotice: 'Eu concordo com o aviso de privacidade.', iConsentToThePrivacyNoticeAccessibility: 'Eu concordo com o aviso de privacidade.', error: { authorized: 'Você precisa ser um administrador responsável com autorização para movimentar a conta bancária da empresa', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 7ce8b8c0ef09..2b561421d2c4 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -4108,6 +4108,8 @@ ${amount},商户:${merchant} - 日期:${date}`, proofOf: '个人住址证明', enterOneEmail: (companyName: string) => `输入 ${companyName} 一位主管的邮箱地址`, regulationRequiresOneMoreDirector: '根据规定,至少还需要一名董事作为签署人。', + bothSignersMustBeOnIllionReport: '两位签署人都必须在公司提供给 illion 的报告中被列为董事,不能只是公司里的任意两个人。', + signerMustBeOnIllionReport: '您添加为签署人的董事,必须列在公司的 illion 报告中。', hangTight: '请稍候…', enterTwoEmails: (companyName: string) => `输入 ${companyName} 的两位董事的邮箱地址`, sendReminder: '发送提醒', @@ -4118,11 +4120,11 @@ ${amount},商户:${merchant} - 日期:${date}`, proofOfDirectorsDescription: '示例:Oncorp 公司概况或商业注册。', codiceFiscale: '税号', codiceFiscaleDescription: '签署人、授权用户和实益所有人的税号(Codice Fiscale)。', - PDSandFSG: 'PDS + FSG 披露文件', + PDSandFSG: 'PDS、FSG 和 TMD 披露文件', PDSandFSGDescription: Str.dedent(` - 我们与 Corpay 的合作通过 API 连接,利用其庞大的国际银行合作伙伴网络,为 Expensify 提供全球报销服务。根据澳大利亚相关法规,我们向您提供 Corpay 的《金融服务指南(FSG)》和《产品披露声明(PDS)》。 + 我们与 Corpay 建立的合作关系通过 API 连接,利用其庞大的国际银行合作伙伴网络,为 Expensify 的全球报销功能提供支持。根据澳大利亚相关法规,我们向您提供 Corpay 的《金融服务指南(FSG)》《产品披露声明(PDS)》以及《目标市场确定文件(TMD)》。 - 请仔细阅读 FSG 和 PDS 文档,因为其中包含 Corpay 所提供产品和服务的完整细节和重要信息。请妥善保留这些文档以备日后查阅。 + 请仔细阅读这些 FSG、PDS 和 TMD 文件,因为其中包含 Corpay 所提供产品和服务的完整细节和重要信息。请妥善保留这些文件,以备今后查阅。 `), pleaseUpload: '请在下方上传更多证明文件,以帮助我们核实您作为该企业董事的身份。', enterSignerInfo: '输入签署人信息', @@ -4134,6 +4136,8 @@ ${amount},商户:${merchant} - 日期:${date}`, }, }, agreementsStep: { + bankStatement: '银行对账单', + bankStatementDescription: '请提供一份在最近三个月内出具的、用于您正在连接的企业银行账户的最新银行对账单。', agreements: '协议', pleaseConfirm: '请确认以下协议', regulationRequiresUs: '法规要求我们核实任何持有该企业超过 25% 股权的个人身份。', @@ -4142,7 +4146,7 @@ ${amount},商户:${merchant} - 日期:${date}`, iAcceptTheTermsAndConditions: `我接受条款和条件。`, iAcceptTheTermsAndConditionsAccessibility: '我接受条款和条件。', accept: '接受并添加银行账户', - iConsentToThePrivacyNotice: '我同意隐私声明。', + iConsentToThePrivacyNotice: '我同意隐私声明。', iConsentToThePrivacyNoticeAccessibility: '我同意隐私声明。', error: { authorized: '您必须是拥有操作该企业银行账户授权的控制负责人', diff --git a/src/libs/API/parameters/FinishCorpayBankAccountOnboardingParams.ts b/src/libs/API/parameters/FinishCorpayBankAccountOnboardingParams.ts index 0321cc0b56f0..4935df6739b5 100644 --- a/src/libs/API/parameters/FinishCorpayBankAccountOnboardingParams.ts +++ b/src/libs/API/parameters/FinishCorpayBankAccountOnboardingParams.ts @@ -3,6 +3,7 @@ import type {FileObject} from '@src/types/utils/Attachment'; type FinishCorpayBankAccountOnboardingParams = { inputs: string; achAuthorizationForm?: FileObject; + bankStatement?: FileObject; bankAccountID: number; }; diff --git a/src/pages/ReimbursementAccount/NonUSD/Agreements/index.tsx b/src/pages/ReimbursementAccount/NonUSD/Agreements/index.tsx index 4036c6e86236..7c07e6814d58 100644 --- a/src/pages/ReimbursementAccount/NonUSD/Agreements/index.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/Agreements/index.tsx @@ -29,6 +29,8 @@ function Agreements({onBackButtonPress, onSubmit, stepNames, currency}: NonUSDPa const bankAccountID = reimbursementAccount?.achData?.bankAccountID ?? CONST.DEFAULT_NUMBER_ID; const isDocusignStepRequired = requiresDocusignStep(currency); const isSubmittingRef = useRef(false); + const isBankStatementNeeded = currency === CONST.CURRENCY.AUD; + const bankStatementDefaultValue = reimbursementAccountDraft?.[INPUT_IDS.ADDITIONAL_DATA.CORPAY.BANK_STATEMENT] ?? []; const submit = () => { if (isDocusignStepRequired) { @@ -85,6 +87,8 @@ function Agreements({onBackButtonPress, onSubmit, stepNames, currency}: NonUSDPa currency={currency ?? ''} startStepIndex={5} stepNames={stepNames} + bankStatementInputID={isBankStatementNeeded ? INPUT_IDS.ADDITIONAL_DATA.CORPAY.BANK_STATEMENT : undefined} + bankStatementDefaultValue={bankStatementDefaultValue} /> ); } diff --git a/src/pages/ReimbursementAccount/NonUSD/Docusign/index.tsx b/src/pages/ReimbursementAccount/NonUSD/Docusign/index.tsx index 7ea07d5b7330..4c382288accf 100644 --- a/src/pages/ReimbursementAccount/NonUSD/Docusign/index.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/Docusign/index.tsx @@ -20,6 +20,7 @@ const INPUT_KEYS = { CONSENT_TO_PRIVACY_NOTICE: INPUT_IDS.ADDITIONAL_DATA.CORPAY.CONSENT_TO_PRIVACY_NOTICE, AUTHORIZED_TO_BIND_CLIENT_TO_AGREEMENT: INPUT_IDS.ADDITIONAL_DATA.CORPAY.AUTHORIZED_TO_BIND_CLIENT_TO_AGREEMENT, ACH_AUTHORIZATION_FORM: INPUT_IDS.ADDITIONAL_DATA.CORPAY.ACH_AUTHORIZATION_FORM, + BANK_STATEMENT: INPUT_IDS.ADDITIONAL_DATA.CORPAY.BANK_STATEMENT, }; function Docusign({onBackButtonPress, onSubmit, stepNames, currency}: NonUSDPageProps) { @@ -37,6 +38,7 @@ function Docusign({onBackButtonPress, onSubmit, stepNames, currency}: NonUSDPage authorizedToBindClientToAgreement: finalStepValues.authorizedToBindClientToAgreement, }), achAuthorizationForm: finalStepValues.achAuthorizationForm.at(0), + bankStatement: finalStepValues.bankStatement.at(0), bankAccountID, }); }; diff --git a/src/pages/ReimbursementAccount/NonUSD/SignerInfo/EnterEmail.tsx b/src/pages/ReimbursementAccount/NonUSD/SignerInfo/EnterEmail.tsx index 2bb87c20b727..f0b59f30048b 100644 --- a/src/pages/ReimbursementAccount/NonUSD/SignerInfo/EnterEmail.tsx +++ b/src/pages/ReimbursementAccount/NonUSD/SignerInfo/EnterEmail.tsx @@ -1,6 +1,6 @@ import FormProvider from '@components/Form/FormProvider'; import InputWrapper from '@components/Form/InputWrapper'; -import type {FormInputErrors, FormOnyxValues} from '@components/Form/types'; +import type {FormInputErrors, FormOnyxKeys, FormOnyxValues} from '@components/Form/types'; import Text from '@components/Text'; import TextInput from '@components/TextInput'; @@ -52,7 +52,12 @@ function EnterEmail({onSubmit, isUserDirector, isLoading}: EnterEmailProps) { const validate = useCallback( (values: FormOnyxValues): FormInputErrors => { - const errors = getFieldRequiredErrors(values, shouldGatherBothEmails ? [SIGNER_EMAIL, SECOND_SIGNER_EMAIL] : [SIGNER_EMAIL], translate); + // The single visible input writes to SECOND_SIGNER_EMAIL when only the second signer's email is gathered, so require that field instead of the (hidden, unpopulated) SIGNER_EMAIL. + const primaryEmailField = shouldGatherOnlySecondSignerEmail ? SECOND_SIGNER_EMAIL : SIGNER_EMAIL; + const requiredFields: Array> = shouldGatherBothEmails + ? [primaryEmailField, SECOND_SIGNER_EMAIL] + : [primaryEmailField]; + const errors = getFieldRequiredErrors(values, requiredFields, translate); if (!shouldGatherOnlySecondSignerEmail && values[SIGNER_EMAIL] && !Str.isValidEmail(values[SIGNER_EMAIL])) { errors[SIGNER_EMAIL] = translate('bankAccount.error.email'); } @@ -86,6 +91,8 @@ function EnterEmail({onSubmit, isUserDirector, isLoading}: EnterEmailProps) { > {translate(shouldGatherBothEmails ? 'signerInfoStep.enterTwoEmails' : 'signerInfoStep.enterOneEmail', companyName)} {!shouldGatherBothEmails && {translate('signerInfoStep.regulationRequiresOneMoreDirector')}} + {shouldGatherBothEmails && {translate('signerInfoStep.bothSignersMustBeOnIllionReport')}} + {shouldGatherOnlySecondSignerEmail && {translate('signerInfoStep.signerMustBeOnIllionReport')}} ( acc[value] = (reimbursementAccountDraft?.[value] ?? reimbursementAccount?.achData?.[value as keyof ACHData] ?? reimbursementAccount?.achData?.corpay?.[value as keyof Corpay] ?? - (value === INPUT_IDS.ADDITIONAL_DATA.CORPAY.ACH_AUTHORIZATION_FORM ? [] : '')) as ReimbursementAccountForm[TProps]; + (value === INPUT_IDS.ADDITIONAL_DATA.CORPAY.ACH_AUTHORIZATION_FORM || value === INPUT_IDS.ADDITIONAL_DATA.CORPAY.BANK_STATEMENT ? [] : '')) as ReimbursementAccountForm[TProps]; return acc; }, {} as SubStepValues); } diff --git a/src/types/form/ReimbursementAccountForm.ts b/src/types/form/ReimbursementAccountForm.ts index e94cc5ab2fc5..cf4a527e22ae 100644 --- a/src/types/form/ReimbursementAccountForm.ts +++ b/src/types/form/ReimbursementAccountForm.ts @@ -157,6 +157,7 @@ const INPUT_IDS = { SIGNER_COMPLETE_RESIDENTIAL_ADDRESS: 'signerCompleteResidentialAddress', DOWNLOADED_PDS_AND_FSG: 'downloadedPDSandFSG', ACH_AUTHORIZATION_FORM: 'achAuthorizationForm', + BANK_STATEMENT: 'bankStatement', SECOND_SIGNER_EMAIL: 'secondSignerEmail', SECOND_SIGNER_FULL_NAME: 'secondSignerFullName', SECOND_SIGNER_DATE_OF_BIRTH: 'secondSignerDateOfBirth', @@ -454,6 +455,7 @@ type NonUSDReimbursementAccountAdditionalProps = { /** Powerform required for US and CA workspaces */ [INPUT_IDS.ADDITIONAL_DATA.CORPAY.ACH_AUTHORIZATION_FORM]: FileObject[]; + [INPUT_IDS.ADDITIONAL_DATA.CORPAY.BANK_STATEMENT]: FileObject[]; }; type ReimbursementAccountForm = ReimbursementAccountFormExtraProps &