@swan-io/shared-business 13.4.13 → 13.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +15 -15
- package/src/components/AccountStatement.d.ts +1 -1
- package/src/components/AccountStatement.js +28 -21
- package/src/components/AccountStatementHeader.js +2 -2
- package/src/components/CreditStatement.js +3 -3
- package/src/locales/de.json +11 -7
- package/src/locales/en.json +7 -3
- package/src/locales/es.json +11 -7
- package/src/locales/fi.json +9 -5
- package/src/locales/fr.json +11 -7
- package/src/locales/it.json +16 -12
- package/src/locales/nl.json +10 -6
- package/src/locales/pt.json +9 -5
- package/src/utils/__tests__/validation.test.js +26 -1
- package/src/utils/validation.d.ts +2 -0
- package/src/utils/validation.js +20 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swan-io/shared-business",
|
|
3
|
-
"version": "13.4.
|
|
3
|
+
"version": "13.4.15",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">22.12.0"
|
|
6
6
|
},
|
|
@@ -25,31 +25,31 @@
|
|
|
25
25
|
],
|
|
26
26
|
"license": "MIT",
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@swan-io/lake": "13.4.
|
|
28
|
+
"@swan-io/lake": "13.4.15"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@formatjs/intl": "^
|
|
31
|
+
"@formatjs/intl": "^4.1.2",
|
|
32
32
|
"@placekit/client-js": "^2.3.0",
|
|
33
|
-
"@swan-io/boxed": "^3.2.
|
|
33
|
+
"@swan-io/boxed": "^3.2.1",
|
|
34
34
|
"@swan-io/request": "^3.1.0",
|
|
35
35
|
"@swan-io/use-form": "^3.1.0",
|
|
36
|
-
"dayjs": "^1.11.
|
|
36
|
+
"dayjs": "^1.11.19",
|
|
37
37
|
"iban": "^0.0.14",
|
|
38
|
-
"react": "^19.
|
|
38
|
+
"react": "^19.2.4",
|
|
39
39
|
"react-atomic-state": "^2.1.0",
|
|
40
|
-
"react-dom": "^19.
|
|
41
|
-
"react-dropzone": "^14.
|
|
42
|
-
"react-native-web": "^0.
|
|
40
|
+
"react-dom": "^19.2.4",
|
|
41
|
+
"react-dropzone": "^14.4.0",
|
|
42
|
+
"react-native-web": "^0.21.2",
|
|
43
43
|
"rifm": "^0.12.1",
|
|
44
|
-
"ts-pattern": "^5.
|
|
45
|
-
"uuid": "^
|
|
44
|
+
"ts-pattern": "^5.9.0",
|
|
45
|
+
"uuid": "^13.0.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/iban": "0.0.35",
|
|
49
|
-
"@types/react": "^19.
|
|
50
|
-
"@types/react-dom": "^19.
|
|
49
|
+
"@types/react": "^19.2.10",
|
|
50
|
+
"@types/react-dom": "^19.2.3",
|
|
51
51
|
"@types/react-native": "^0.72.8",
|
|
52
|
-
"type-fest": "^4.
|
|
53
|
-
"@swan-io/lake": "13.4.
|
|
52
|
+
"type-fest": "^5.4.3",
|
|
53
|
+
"@swan-io/lake": "13.4.15"
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StyleProp, ViewStyle } from "react-native";
|
|
2
2
|
import { CountryCCA3 } from "../constants/countries";
|
|
3
|
-
export type TransactionType = "Card" | "Check" | "Fees" | "InternationalDirectDebit" | "InternationalCreditTransfer" | "SepaCreditTransfer" | "SepaDirectDebit" | (string & {});
|
|
3
|
+
export type TransactionType = "Card" | "Check" | "Fees" | "InternationalDirectDebit" | "InternationalCreditTransfer" | "SepaCreditTransfer" | "SepaDirectDebit" | "Seizure" | (string & {});
|
|
4
4
|
type AddressInfo = {
|
|
5
5
|
street: string;
|
|
6
6
|
city: string;
|
|
@@ -13,56 +13,62 @@ const styles = StyleSheet.create({
|
|
|
13
13
|
padding: 10,
|
|
14
14
|
},
|
|
15
15
|
firstSectionTitle: {
|
|
16
|
-
...getTextStyle("sans",
|
|
16
|
+
...getTextStyle("sans", 20),
|
|
17
17
|
color: colors.swan[500],
|
|
18
18
|
fontWeight: "500",
|
|
19
19
|
textTransform: "uppercase",
|
|
20
|
-
|
|
21
|
-
marginTop: "30%",
|
|
20
|
+
marginTop: "37px",
|
|
22
21
|
},
|
|
23
22
|
sectionTitle: {
|
|
24
|
-
...getTextStyle("sans",
|
|
23
|
+
...getTextStyle("sans", 20),
|
|
25
24
|
color: colors.swan[500],
|
|
26
25
|
fontWeight: "500",
|
|
27
26
|
textTransform: "uppercase",
|
|
28
|
-
paddingBottom: spacings[4],
|
|
29
27
|
},
|
|
30
28
|
dateTitle: {
|
|
31
|
-
...getTextStyle("sans",
|
|
29
|
+
...getTextStyle("sans", 12),
|
|
32
30
|
color: colors.swan[500],
|
|
33
|
-
paddingBottom: spacings[4],
|
|
34
31
|
},
|
|
35
32
|
totalAmount: {
|
|
36
|
-
...getTextStyle("sans",
|
|
33
|
+
...getTextStyle("sans", 20),
|
|
37
34
|
fontWeight: "500",
|
|
38
35
|
textAlign: "right",
|
|
39
36
|
},
|
|
40
37
|
pageTitle: {
|
|
41
|
-
...getTextStyle("sans",
|
|
38
|
+
...getTextStyle("sans", 20),
|
|
42
39
|
fontWeight: "500",
|
|
43
40
|
color: "#26232F",
|
|
44
41
|
},
|
|
45
42
|
titleColumn: {
|
|
46
|
-
...getTextStyle("sans",
|
|
47
|
-
fontWeight: "
|
|
43
|
+
...getTextStyle("sans", 12),
|
|
44
|
+
fontWeight: "600",
|
|
48
45
|
paddingVertical: spacings[4],
|
|
49
46
|
minWidth: spacings[96],
|
|
50
47
|
},
|
|
51
48
|
openingBalanceText: {
|
|
52
|
-
...getTextStyle("sans",
|
|
49
|
+
...getTextStyle("sans", 12),
|
|
53
50
|
textAlign: "right",
|
|
54
51
|
},
|
|
52
|
+
thead: {
|
|
53
|
+
marginBottom: 12,
|
|
54
|
+
backgroundColor: colors.gray[50],
|
|
55
|
+
},
|
|
55
56
|
textColumn: {
|
|
56
57
|
paddingVertical: spacings[4],
|
|
57
|
-
...getTextStyle("sans",
|
|
58
|
+
...getTextStyle("sans", 11),
|
|
59
|
+
lineHeight: 16,
|
|
58
60
|
},
|
|
59
61
|
text: {
|
|
60
|
-
...getTextStyle("sans",
|
|
62
|
+
...getTextStyle("sans", 12),
|
|
63
|
+
color: colors.swan[300],
|
|
64
|
+
},
|
|
65
|
+
textBold: {
|
|
66
|
+
...getTextStyle("sans", 12),
|
|
67
|
+
fontWeight: "500",
|
|
61
68
|
},
|
|
62
69
|
pageSubTitle: {
|
|
63
|
-
...getTextStyle("sans",
|
|
70
|
+
...getTextStyle("sans", 12),
|
|
64
71
|
color: "#454348",
|
|
65
|
-
paddingBottom: spacings[12],
|
|
66
72
|
},
|
|
67
73
|
row: {
|
|
68
74
|
textAlign: "right",
|
|
@@ -71,12 +77,12 @@ const styles = StyleSheet.create({
|
|
|
71
77
|
width: "15%",
|
|
72
78
|
},
|
|
73
79
|
closingBalanceRow: {
|
|
74
|
-
...getTextStyle("sans",
|
|
80
|
+
...getTextStyle("sans", 12),
|
|
75
81
|
backgroundColor: colors.gray[50],
|
|
76
82
|
width: "50%",
|
|
77
83
|
},
|
|
78
84
|
closingBalanceRowText: {
|
|
79
|
-
paddingLeft: "20%"
|
|
85
|
+
paddingLeft: "20%",
|
|
80
86
|
},
|
|
81
87
|
});
|
|
82
88
|
const Title = ({ text, align = "left", style, }) => (_jsx(Text, { style: [
|
|
@@ -92,13 +98,14 @@ const translateTransaction = (transaction) => {
|
|
|
92
98
|
.with("Check", () => t("accountStatement.check"))
|
|
93
99
|
.with("Fees", () => t("accountStatement.fees"))
|
|
94
100
|
.with("InternationalDirectDebit", "SepaDirectDebit", () => t("accountStatement.directDebit"))
|
|
95
|
-
.with("
|
|
101
|
+
.with("SepaCreditTransfer", "Seizure", () => t("accountStatement.creditTransfer"))
|
|
102
|
+
.with("InternationalCreditTransfer", () => t("accountStatement.internationalCreditTransfer"))
|
|
96
103
|
.otherwise(() => transaction);
|
|
97
104
|
};
|
|
98
105
|
export const AccountStatementV1 = ({ style, accountHolderName, accountHolderAddress, accountHolderType, iban, bic, openingDate, closingDate, openingBalance, transactions, feesDebit, feesCredit, totalsCredit, totalsDebit, closingBalance, }) => {
|
|
99
|
-
return (_jsx(Box, { style: style, children: _jsx(Box, { style: styles.container, direction: "column", justifyContent: "spaceBetween", children: _jsxs(Box, { children: [
|
|
106
|
+
return (_jsx(Box, { style: style, children: _jsx(Box, { style: styles.container, direction: "column", justifyContent: "spaceBetween", children: _jsxs(Box, { children: [_jsxs(Box, { direction: "row", justifyContent: "spaceBetween", children: [_jsxs(Box, { direction: "column", children: [_jsx(Text, { style: styles.sectionTitle, children: accountHolderName.toUpperCase() }), _jsx(Text, { style: styles.text, children: accountHolderAddress.street }), _jsxs(Text, { style: styles.text, children: [accountHolderAddress.city, ",", " ", isNotNullish(accountHolderAddress.country) && accountHolderAddress.country] }), _jsx(Space, { height: 24 }), isNotEmpty(iban) && (_jsxs(Text, { style: styles.textBold, children: [t("accountStatement.iban"), " ", _jsx(Text, { style: styles.text, children: iban })] })), _jsx(Space, { height: 4 }), isNotEmpty(bic) && (_jsxs(Text, { style: styles.textBold, children: [t("accountStatement.bic"), _jsx(Text, { style: styles.text, children: bic })] }))] }), _jsxs(Box, { direction: "column", alignItems: "end", children: [_jsx(Text, { style: styles.pageTitle, children: t("accountStatement.titleDocument") }), _jsx(Text, { style: styles.pageSubTitle, children: accountHolderType === "Company"
|
|
100
107
|
? t("accountStatement.titleDocument.companyDescription")
|
|
101
|
-
: t("accountStatement.titleDocument.individualDescription") }), _jsx(
|
|
108
|
+
: t("accountStatement.titleDocument.individualDescription") }), _jsx(Space, { height: 24 }), _jsx(Text, { style: styles.textBold, children: t("accountStatement.contactSupport") }), _jsx(Text, { style: styles.text, children: "support.swan.io" })] })] }), _jsx(Space, { height: 48 }), _jsxs(Box, { direction: "row", justifyContent: "spaceBetween", alignItems: "center", children: [_jsx(Box, { direction: "column", children: _jsx(Text, { style: styles.dateTitle, children: t("accountStatement.date", { openingDate, closingDate }) }) }), _jsxs(Box, { direction: "column", children: [_jsx(Text, { style: styles.openingBalanceText, children: t("accountStatement.openingBalance") }), _jsx(Text, { style: styles.totalAmount, children: openingBalance.value })] })] }), _jsx(Space, { height: 24 }), _jsxs(_Fragment, { children: [_jsxs(Box, { direction: "row", style: styles.thead, children: [_jsx(Text, { style: [styles.titleColumn, { width: "13%" }], children: t("accountStatement.column.date") }), _jsx(Text, { style: [styles.titleColumn, { width: "17%" }], children: t("accountStatement.column.type") }), _jsx(Text, { style: [styles.titleColumn, { width: "40%" }], children: t("accountStatement.column.description") }), _jsx(Text, { style: [styles.titleColumn, { width: "15%", textAlign: "right" }], children: t("accountStatement.column.credit") }), _jsx(Text, { style: [styles.titleColumn, { width: "15%", textAlign: "right" }], children: t("accountStatement.column.debit") })] }), _jsx(Box, { direction: "column", children: transactions.map(transaction => (_jsxs(Box, { direction: "row", children: [_jsx(Text, { style: [styles.textColumn, { width: "13%" }], children: transaction.date }), _jsx(Text, { style: [styles.textColumn, { width: "17%" }], children: translateTransaction(transaction.type) }), _jsx(Text, { style: [styles.textColumn, { width: "40%" }], children: transaction.label }), _jsx(Text, { style: [styles.textColumn, { width: "15%", textAlign: "right" }], children: transaction.credit ? transaction.credit.value : "" }), _jsx(Text, { style: [styles.textColumn, { width: "15%", textAlign: "right" }], children: transaction.debit ? transaction.debit.value : "" })] }, transaction.id))) })] }), _jsx(Space, { height: 12 }), _jsxs(Box, { direction: "column", children: [_jsxs(Box, { direction: "row", justifyContent: "end", children: [_jsx(Text, { style: [styles.row, styles.textBold], children: t("accountStatement.column.fees") }), _jsx(Text, { style: [styles.row, styles.textBold], children: feesCredit.value }), _jsx(Text, { style: [styles.row, styles.textBold], children: feesDebit.value })] }), _jsxs(Box, { direction: "row", justifyContent: "end", children: [_jsx(Text, { style: [styles.row, styles.textBold], children: t("accountStatement.column.totals") }), _jsx(Text, { style: [styles.row, styles.textBold], children: totalsCredit.value }), _jsx(Text, { style: [styles.row, styles.textBold], children: totalsDebit.value })] })] }), _jsx(Space, { height: 12 }), _jsx(Box, { direction: "row", justifyContent: "end", children: _jsxs(Box, { direction: "row", alignItems: "center", style: styles.closingBalanceRow, justifyContent: "spaceBetween", children: [_jsx(Title, { style: styles.closingBalanceRowText, text: t("accountStatement.closingBalance") }), _jsx(Title, { text: closingBalance.value, style: styles.totalAmount, align: "right" })] }) })] }) }) }));
|
|
102
109
|
};
|
|
103
110
|
export const AccountStatement = (props) => match(props)
|
|
104
111
|
.with({ version: "v1" }, props => _jsx(AccountStatementV1, { ...props }))
|
|
@@ -23,11 +23,11 @@ const styles = {
|
|
|
23
23
|
partnership: {
|
|
24
24
|
borderLeft: "1px solid #e8e7e8",
|
|
25
25
|
padding: "7px 10px",
|
|
26
|
-
marginLeft: "
|
|
26
|
+
marginLeft: "11px",
|
|
27
27
|
},
|
|
28
28
|
partnershipText: {
|
|
29
29
|
fontSize: "13px",
|
|
30
|
-
lineHeight: "24px"
|
|
30
|
+
lineHeight: "24px",
|
|
31
31
|
},
|
|
32
32
|
logo: {
|
|
33
33
|
display: "flex",
|
|
@@ -84,9 +84,9 @@ const styles = StyleSheet.create({
|
|
|
84
84
|
});
|
|
85
85
|
const translateTransaction = (transaction) => {
|
|
86
86
|
return match(transaction)
|
|
87
|
-
.with("Card", () => t("
|
|
88
|
-
.with("SepaCreditTransfer", () => t("
|
|
89
|
-
.with("SepaDirectDebit", () => t("
|
|
87
|
+
.with("Card", () => t("creditStatement.card"))
|
|
88
|
+
.with("SepaCreditTransfer", () => t("creditStatement.creditTransfer"))
|
|
89
|
+
.with("SepaDirectDebit", () => t("creditStatement.directDebit"))
|
|
90
90
|
.exhaustive();
|
|
91
91
|
};
|
|
92
92
|
const logoStyle = {
|
package/src/locales/de.json
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"accountStatement.bic": "BIC",
|
|
3
3
|
"accountStatement.card": "Karte",
|
|
4
|
-
"accountStatement.check": "
|
|
4
|
+
"accountStatement.check": "Überprüfen",
|
|
5
5
|
"accountStatement.closingBalance": "Endsaldo",
|
|
6
6
|
"accountStatement.column.credit": "Guthaben (€)",
|
|
7
7
|
"accountStatement.column.date": "Datum",
|
|
8
8
|
"accountStatement.column.debit": "Lastschrift (€)",
|
|
9
9
|
"accountStatement.column.description": "Beschreibung",
|
|
10
10
|
"accountStatement.column.fees": "Gebühren",
|
|
11
|
-
"accountStatement.column.total": "
|
|
11
|
+
"accountStatement.column.total": "Gesamt",
|
|
12
12
|
"accountStatement.column.totals": "Summen",
|
|
13
13
|
"accountStatement.column.type": "Typ",
|
|
14
14
|
"accountStatement.contactSupport": "Kontaktiere Swan",
|
|
15
15
|
"accountStatement.creditTransfer": "Überweisung",
|
|
16
16
|
"accountStatement.date": "Von {openingDate} bis {closingDate}",
|
|
17
17
|
"accountStatement.directDebit": "Lastschrift",
|
|
18
|
-
"accountStatement.fees": "
|
|
18
|
+
"accountStatement.fees": "Gebühr",
|
|
19
19
|
"accountStatement.iban": "IBAN",
|
|
20
|
+
"accountStatement.internationalCreditTransfer": "Internationaler Kredittransfer",
|
|
20
21
|
"accountStatement.openingBalance": "Eröffnungssaldo",
|
|
21
22
|
"accountStatement.page": "Seite",
|
|
22
23
|
"accountStatement.partnership": "In Partnerschaft mit",
|
|
@@ -66,13 +67,16 @@
|
|
|
66
67
|
"common.showLess": "Weniger anzeigen",
|
|
67
68
|
"common.showMore": "Mehr anzeigen",
|
|
68
69
|
"common.skipToContent": "Zum Inhalt springen",
|
|
69
|
-
"common.statement.footer": "
|
|
70
|
+
"common.statement.footer": "SWAN ist eine vereinfachte Aktiengesellschaft (SAS), eingetragen im Handelsregister Bobigny unter der Nummer 853 827 103, mit einem Kapital von 16.999,66 Euro, der Umsatzsteuer-Identifikationsnummer FR90853827103 und Sitz in 91 rue du Faubourg Saint-Honoré, 75008 Paris, Frankreich. \n\nAls E-Geld-Institut, das Zahlungsdienstleistungen nach französischem Recht anbietet und von der ACPR zugelassen ist, ist SWAN bei dieser unter der Nummer 17328 registriert.",
|
|
70
71
|
"copyButton.copiedTooltip": "In die Zwischenablage kopiert",
|
|
71
72
|
"copyButton.copyTooltip": "Zum Kopieren anklicken",
|
|
72
73
|
"creditStatement.additionalDetails": "Der Kontoauszug vom <bold>{openingDate}</bold> bis <bold>{closingDate}</bold> enthält alle Gebühren und erhaltenen Zahlungen bis zum {closingDate}. Ihre nächste automatische Lastschrift erfolgt ab {repaymentDate}.\n\nIm Falle einer abgelehnten Bankabbuchung aufgrund unzureichender Guthaben können wir diese Abbuchung mindestens <bold>3 bis 4 Tage</bold> nach der Benachrichtigung durch Ihre Bank erneut einreichen.",
|
|
74
|
+
"creditStatement.card": "Karte",
|
|
73
75
|
"creditStatement.column.credit": "Gutschrift",
|
|
74
76
|
"creditStatement.column.debit": "Lastschrift",
|
|
75
|
-
"creditStatement.
|
|
77
|
+
"creditStatement.creditTransfer": "Kreditübertragung",
|
|
78
|
+
"creditStatement.date": "Von <span>{openingDate}</span> zu <span>{closingDate}</span>",
|
|
79
|
+
"creditStatement.directDebit": "Lastschrift",
|
|
76
80
|
"creditStatement.issueDate": "Ausstellungsdatum {issueDate}",
|
|
77
81
|
"creditStatement.siret": "SIRET",
|
|
78
82
|
"creditStatement.titleDocument": "Rückzahlungserklärung",
|
|
@@ -360,13 +364,13 @@
|
|
|
360
364
|
"supportingDocuments.rejectionReason.BadDocumentQuality": "Die Qualität des Dokuments ist sehr gering",
|
|
361
365
|
"supportingDocuments.rejectionReason.CompanyNameMismatch": "Der im eingereichten Dokument angegebene Firmenname stimmt nicht mit unseren Unterlagen überein.",
|
|
362
366
|
"supportingDocuments.rejectionReason.DeclaredAmountMismatch": "Der im eingereichten Dokument angegebene Betrag stimmt nicht mit unseren Unterlagen überein.",
|
|
363
|
-
"supportingDocuments.rejectionReason.ExpiredDocument": "Das
|
|
367
|
+
"supportingDocuments.rejectionReason.ExpiredDocument": "Das Dokument ist zu alt, bitte stellen Sie die neueste verfügbare Version zur Verfügung.",
|
|
364
368
|
"supportingDocuments.rejectionReason.FullDocumentRequired": "Vollständiges Dokument erforderlich",
|
|
365
369
|
"supportingDocuments.rejectionReason.HandwrittenOrCertifiedElectronicSignatureRequired": "Die Unterschrift ist nicht handschriftlich oder elektronisch beglaubigt.",
|
|
366
370
|
"supportingDocuments.rejectionReason.IbanMismatch": "Die im eingereichten Dokument genannte IBAN des Empfängers stimmt nicht mit der Transaktionsanfrage überein.",
|
|
367
371
|
"supportingDocuments.rejectionReason.InvalidAddress": "Die Adresse im eingereichten Dokument stimmt nicht mit unseren Unterlagen überein.",
|
|
368
372
|
"supportingDocuments.rejectionReason.InvalidDocument": "Das Dokument ist ungültig.",
|
|
369
|
-
"supportingDocuments.rejectionReason.InvalidOrMissingData": "
|
|
373
|
+
"supportingDocuments.rejectionReason.InvalidOrMissingData": "Das eingereichte Dokument ist ungültig oder es fehlen einige Informationen.",
|
|
370
374
|
"supportingDocuments.rejectionReason.InvalidTransaction": "Die Angaben im eingereichten Dokument stimmen nicht mit dieser spezifischen Transaktion überein.",
|
|
371
375
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderId": "Ausweisdokument des Anbieters der Unterkunft erforderlich.",
|
|
372
376
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderIdLetter": "ID des Anbieters der Unterkunft und Nachweis der Unterkunft erforderlich.",
|
package/src/locales/en.json
CHANGED
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
"accountStatement.creditTransfer": "Credit transfer",
|
|
16
16
|
"accountStatement.date": "From {openingDate} to {closingDate}",
|
|
17
17
|
"accountStatement.directDebit": "Direct debit",
|
|
18
|
-
"accountStatement.fees": "
|
|
18
|
+
"accountStatement.fees": "Fee",
|
|
19
19
|
"accountStatement.iban": "IBAN",
|
|
20
|
+
"accountStatement.internationalCreditTransfer": "International Credit Transfer",
|
|
20
21
|
"accountStatement.openingBalance": "Opening balance",
|
|
21
22
|
"accountStatement.page": "Page",
|
|
22
23
|
"accountStatement.partnership": "In partnership with",
|
|
@@ -70,9 +71,12 @@
|
|
|
70
71
|
"copyButton.copiedTooltip": "Copied to clipboard",
|
|
71
72
|
"copyButton.copyTooltip": "Click to copy",
|
|
72
73
|
"creditStatement.additionalDetails": "The statement from <bold>{openingDate}</bold> to <bold>{closingDate}</bold> includes all fees and payments received up to {closingDate}. Your next automatic debit will occur starting from {repaymentDate}.\n\nIn the event of a rejected bank withdrawal due to insufficient funds, we may represent this withdrawal at least <bold>3 to 4 days</bold> after the rejection notified by your bank.",
|
|
74
|
+
"creditStatement.card": "Card",
|
|
73
75
|
"creditStatement.column.credit": "Credit",
|
|
74
76
|
"creditStatement.column.debit": "Debit",
|
|
77
|
+
"creditStatement.creditTransfer": "Credit Transfer",
|
|
75
78
|
"creditStatement.date": "From <span>{openingDate}</span> to <span>{closingDate}</span>",
|
|
79
|
+
"creditStatement.directDebit": "Direct Debit",
|
|
76
80
|
"creditStatement.issueDate": "Issue date {issueDate}",
|
|
77
81
|
"creditStatement.siret": "SIRET",
|
|
78
82
|
"creditStatement.titleDocument": "Repayment statement",
|
|
@@ -360,13 +364,13 @@
|
|
|
360
364
|
"supportingDocuments.rejectionReason.BadDocumentQuality": "The quality of the document is really low",
|
|
361
365
|
"supportingDocuments.rejectionReason.CompanyNameMismatch": "The company name in the document submitted doesn't match our records.",
|
|
362
366
|
"supportingDocuments.rejectionReason.DeclaredAmountMismatch": "The declared amount in the document submitted doesn't match our records.",
|
|
363
|
-
"supportingDocuments.rejectionReason.ExpiredDocument": "The
|
|
367
|
+
"supportingDocuments.rejectionReason.ExpiredDocument": "The document is too old, please provide the latest version available.",
|
|
364
368
|
"supportingDocuments.rejectionReason.FullDocumentRequired": "Full document required",
|
|
365
369
|
"supportingDocuments.rejectionReason.HandwrittenOrCertifiedElectronicSignatureRequired": "The signature is not handwritten or electronically certified.",
|
|
366
370
|
"supportingDocuments.rejectionReason.IbanMismatch": "The beneficiary IBAN on the document submitted doesn't match the transaction request.",
|
|
367
371
|
"supportingDocuments.rejectionReason.InvalidAddress": "The address in the document submitted doesn't match our records.",
|
|
368
372
|
"supportingDocuments.rejectionReason.InvalidDocument": "The document is not valid.",
|
|
369
|
-
"supportingDocuments.rejectionReason.InvalidOrMissingData": "The
|
|
373
|
+
"supportingDocuments.rejectionReason.InvalidOrMissingData": "The document submitted is invalid, or some information is missing.",
|
|
370
374
|
"supportingDocuments.rejectionReason.InvalidTransaction": "The information in the document submitted doesn't match this specific transaction.",
|
|
371
375
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderId": "An identity document for the accommodation provider is required.",
|
|
372
376
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderIdLetter": "The accommodation provider’s ID and proof of accommodation are required.",
|
package/src/locales/es.json
CHANGED
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
"accountStatement.creditTransfer": "Transferencia de crédito",
|
|
16
16
|
"accountStatement.date": "Desde {openingDate} hasta {closingDate}",
|
|
17
17
|
"accountStatement.directDebit": "Domiciliación bancaria",
|
|
18
|
-
"accountStatement.fees": "
|
|
18
|
+
"accountStatement.fees": "Comisión",
|
|
19
19
|
"accountStatement.iban": "IBAN",
|
|
20
|
+
"accountStatement.internationalCreditTransfer": "Transferencia internacional",
|
|
20
21
|
"accountStatement.openingBalance": "Saldo inicial",
|
|
21
22
|
"accountStatement.page": "Página",
|
|
22
23
|
"accountStatement.partnership": "En colaboración con",
|
|
@@ -70,9 +71,12 @@
|
|
|
70
71
|
"copyButton.copiedTooltip": "Copiado al portapapeles",
|
|
71
72
|
"copyButton.copyTooltip": "Haz clic para copiar",
|
|
72
73
|
"creditStatement.additionalDetails": "El extracto del <bold>{openingDate}</bold> al <bold>{closingDate}</bold> incluye todas las tasas y pagos recibidos hasta el {closingDate}. Tu próximo pago domiciliado se realizará a partir del {repaymentDate}.\n\nSi el pago se rechaza por fondos insuficientes, podemos intentar procesarlo de nuevo <bold>3 a 4 días</bold> después de que tu banco te haya notificado el rechazo.",
|
|
74
|
+
"creditStatement.card": "Tarjeta",
|
|
73
75
|
"creditStatement.column.credit": "Crédito",
|
|
74
76
|
"creditStatement.column.debit": "Débito",
|
|
75
|
-
"creditStatement.
|
|
77
|
+
"creditStatement.creditTransfer": "Transferencia",
|
|
78
|
+
"creditStatement.date": "De <span>{openingDate}</span> a <span>{closingDate}</span>",
|
|
79
|
+
"creditStatement.directDebit": "Domiciliación bancaria",
|
|
76
80
|
"creditStatement.issueDate": "Fecha de emisión {issueDate}",
|
|
77
81
|
"creditStatement.siret": "SIRET",
|
|
78
82
|
"creditStatement.titleDocument": "Estado de amortización",
|
|
@@ -102,9 +106,9 @@
|
|
|
102
106
|
"datePicker.year": "Año",
|
|
103
107
|
"error.generic": "Ha ocurrido un error",
|
|
104
108
|
"error.iban.invalid": "El IBAN no es correcto. Vuelve a intentarlo.",
|
|
105
|
-
"error.invalidEmail": "
|
|
106
|
-
"error.invalidName": "
|
|
107
|
-
"error.invalidVatNumber": "
|
|
109
|
+
"error.invalidEmail": "Correo electrónico no válido",
|
|
110
|
+
"error.invalidName": "Nombre no válido",
|
|
111
|
+
"error.invalidVatNumber": "Número de IVA no válido",
|
|
108
112
|
"error.network.500": "Error de servidor interno",
|
|
109
113
|
"error.network.503": "Servicio no disponible",
|
|
110
114
|
"error.requiredField": "Este campo es obligatorio",
|
|
@@ -360,13 +364,13 @@
|
|
|
360
364
|
"supportingDocuments.rejectionReason.BadDocumentQuality": "La calidad del documento es muy baja",
|
|
361
365
|
"supportingDocuments.rejectionReason.CompanyNameMismatch": "El nombre de la empresa en el documento presentado no coincide con nuestros registros.",
|
|
362
366
|
"supportingDocuments.rejectionReason.DeclaredAmountMismatch": "El monto declarado en el documento presentado no coincide con nuestros registros.",
|
|
363
|
-
"supportingDocuments.rejectionReason.ExpiredDocument": "
|
|
367
|
+
"supportingDocuments.rejectionReason.ExpiredDocument": "El documento es demasiado antiguo. Por favor, facilita la última versión disponible.",
|
|
364
368
|
"supportingDocuments.rejectionReason.FullDocumentRequired": "Se requiere el documento completo",
|
|
365
369
|
"supportingDocuments.rejectionReason.HandwrittenOrCertifiedElectronicSignatureRequired": "La firma no es manuscrita o certificada electrónicamente.",
|
|
366
370
|
"supportingDocuments.rejectionReason.IbanMismatch": "El IBAN del beneficiario en el documento presentado no coincide con la solicitud de transacción.",
|
|
367
371
|
"supportingDocuments.rejectionReason.InvalidAddress": "La dirección en el documento presentado no coincide con nuestros registros.",
|
|
368
372
|
"supportingDocuments.rejectionReason.InvalidDocument": "El documento no es válido.",
|
|
369
|
-
"supportingDocuments.rejectionReason.InvalidOrMissingData": "El
|
|
373
|
+
"supportingDocuments.rejectionReason.InvalidOrMissingData": "El documento enviado es inválido o faltan algunos datos.",
|
|
370
374
|
"supportingDocuments.rejectionReason.InvalidTransaction": "La información del documento presentado no coincide con esta transaccoinión específica.",
|
|
371
375
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderId": "Se requiere un documento de identidad para el proveedor de alojamiento.",
|
|
372
376
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderIdLetter": "Se requiere una identificación del proveedor de alojamiento y un comprobante de alojamiento.",
|
package/src/locales/fi.json
CHANGED
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
"accountStatement.creditTransfer": "Tilisiirto",
|
|
16
16
|
"accountStatement.date": "Alkaen {openingDate}, päättyen {closingDate}",
|
|
17
17
|
"accountStatement.directDebit": "Suoraveloitus",
|
|
18
|
-
"accountStatement.fees": "
|
|
18
|
+
"accountStatement.fees": "Maksu",
|
|
19
19
|
"accountStatement.iban": "IBAN",
|
|
20
|
+
"accountStatement.internationalCreditTransfer": "Kansainvälinen tilisiirto",
|
|
20
21
|
"accountStatement.openingBalance": "Avaussaldo",
|
|
21
22
|
"accountStatement.page": "Sivu",
|
|
22
23
|
"accountStatement.partnership": "Kumppanina",
|
|
@@ -70,9 +71,12 @@
|
|
|
70
71
|
"copyButton.copiedTooltip": "Kopioitu leikepöydälle",
|
|
71
72
|
"copyButton.copyTooltip": "Kopioi napsauttamalla",
|
|
72
73
|
"creditStatement.additionalDetails": "<bold>{openingDate}</bold>{openingDate}<bold>{closingDate}</bold> -tilinpäätös sisältää kaikki kulut ja maksut, jotka on vastaanotettu {closingDate} asti. Seuraava automaattinen veloitus tapahtuu {repaymentDate} alkaen.\n\nJos pankkisiirto hylätään varojen puutteen vuoksi, voimme esittää tämän siirron uudelleen vähintään <bold>3–4 päivää</bold> sen jälkeen, kun pankkisi on ilmoittanut hylkäämisestä.",
|
|
74
|
+
"creditStatement.card": "Kortti",
|
|
73
75
|
"creditStatement.column.credit": "Luotto",
|
|
74
76
|
"creditStatement.column.debit": "Veloittaa",
|
|
77
|
+
"creditStatement.creditTransfer": "Tilisiirto",
|
|
75
78
|
"creditStatement.date": "Alkaen <span>{openingDate}</span>, päättyen <span>{closingDate}</span>",
|
|
79
|
+
"creditStatement.directDebit": "Suoraveloitus",
|
|
76
80
|
"creditStatement.issueDate": "Julkaisupäivä {issueDate}",
|
|
77
81
|
"creditStatement.siret": "SIRET",
|
|
78
82
|
"creditStatement.titleDocument": "Takaisinmaksuerittely",
|
|
@@ -102,8 +106,8 @@
|
|
|
102
106
|
"datePicker.year": "Vuosi",
|
|
103
107
|
"error.generic": "Virhe tapahtui",
|
|
104
108
|
"error.iban.invalid": "IBAN-tilinumero ei näytä olevan oikein. Yritä syöttää se uudelleen.",
|
|
105
|
-
"error.invalidEmail": "Virheellinen sähköpostiosoite
|
|
106
|
-
"error.invalidName": "
|
|
109
|
+
"error.invalidEmail": "Virheellinen sähköpostiosoite",
|
|
110
|
+
"error.invalidName": "Virheellinen nimi",
|
|
107
111
|
"error.invalidVatNumber": "Virheellinen ALV-numero",
|
|
108
112
|
"error.network.500": "Sisäinen palvelinvirhe",
|
|
109
113
|
"error.network.503": "Palvelua ei saatavilla",
|
|
@@ -360,13 +364,13 @@
|
|
|
360
364
|
"supportingDocuments.rejectionReason.BadDocumentQuality": "Asiakirjan laatu on todella heikko",
|
|
361
365
|
"supportingDocuments.rejectionReason.CompanyNameMismatch": "Lähetetyssä asiakirjassa oleva yrityksen nimi ei vastaa tietueitamme.",
|
|
362
366
|
"supportingDocuments.rejectionReason.DeclaredAmountMismatch": "Lähetetyssä asiakirjassa ilmoitettu määrä ei vastaa tietueitamme.",
|
|
363
|
-
"supportingDocuments.rejectionReason.ExpiredDocument": "
|
|
367
|
+
"supportingDocuments.rejectionReason.ExpiredDocument": "Asiakirja on liian vanha, toimita uusin saatavilla oleva versio.",
|
|
364
368
|
"supportingDocuments.rejectionReason.FullDocumentRequired": "Täydellinen asiakirja vaaditaan",
|
|
365
369
|
"supportingDocuments.rejectionReason.HandwrittenOrCertifiedElectronicSignatureRequired": "Allekirjoitusta ei ole käsinkirjoitettu tai sähköisesti varmennettu.",
|
|
366
370
|
"supportingDocuments.rejectionReason.IbanMismatch": "Lähetetyssä asiakirjassa oleva maksun vastaanottajan IBAN ei vastaa tapahtumapyyntöä.",
|
|
367
371
|
"supportingDocuments.rejectionReason.InvalidAddress": "Lähetetyssä asiakirjassa oleva osoite ei vastaa tietueitamme.",
|
|
368
372
|
"supportingDocuments.rejectionReason.InvalidDocument": "Asiakirja ei ole kelvollinen.",
|
|
369
|
-
"supportingDocuments.rejectionReason.InvalidOrMissingData": "
|
|
373
|
+
"supportingDocuments.rejectionReason.InvalidOrMissingData": "Toimitettu asiakirja on virheellinen tai siitä puuttuu tietoja.",
|
|
370
374
|
"supportingDocuments.rejectionReason.InvalidTransaction": "Lähetetyn asiakirjan tiedot eivät vastaa tätä tiettyä maksutapahtumaa.",
|
|
371
375
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderId": "Asunnon tarjoajalta vaaditaan henkilöllisyystodistus.",
|
|
372
376
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderIdLetter": "Asunnon tarjoajan henkilöllisyystodistus ja todistus asumisesta vaaditaan.",
|
package/src/locales/fr.json
CHANGED
|
@@ -11,12 +11,13 @@
|
|
|
11
11
|
"accountStatement.column.total": "Total",
|
|
12
12
|
"accountStatement.column.totals": "Totaux",
|
|
13
13
|
"accountStatement.column.type": "Type",
|
|
14
|
-
"accountStatement.contactSupport": "
|
|
14
|
+
"accountStatement.contactSupport": "Contacter Swan",
|
|
15
15
|
"accountStatement.creditTransfer": "Transfert de crédit",
|
|
16
16
|
"accountStatement.date": "Du {openingDate} au {closingDate}",
|
|
17
17
|
"accountStatement.directDebit": "Prélèvement",
|
|
18
18
|
"accountStatement.fees": "Frais",
|
|
19
19
|
"accountStatement.iban": "IBAN",
|
|
20
|
+
"accountStatement.internationalCreditTransfer": "Virement international",
|
|
20
21
|
"accountStatement.openingBalance": "Solde d'ouverture",
|
|
21
22
|
"accountStatement.page": "Page",
|
|
22
23
|
"accountStatement.partnership": "En partenariat avec",
|
|
@@ -69,10 +70,13 @@
|
|
|
69
70
|
"common.statement.footer": "SWAN est une société par actions simplifiée (SAS) immatriculée au Registre du Commerce et des Sociétés de Bobigny sous le numéro 853 827 103, avec un capital de 16 999,66 euros, numéro de TVA FR90853827103 et dont le siège social est situé au 91 rue du Faubourg Saint-Honoré, 75008 Paris, FRANCE.\n\nEn tant qu'établissement de monnaie électronique offrant des services de paiement en vertu du droit français approuvé par l'ACPR, SWAN est inscrite auprès de ce dernier sous le numéro 17328.",
|
|
70
71
|
"copyButton.copiedTooltip": "Copié dans le presse-papier",
|
|
71
72
|
"copyButton.copyTooltip": "Cliquez pour copier",
|
|
72
|
-
"creditStatement.additionalDetails": "Le relevé du <bold>{openingDate}</bold> au <bold>{closingDate}</bold> inclut tous les frais et paiements reçus jusqu'au {closingDate}. Votre prochain prélèvement automatique débutera à partir du {repaymentDate}.\n\nEn cas de rejet de prélèvement bancaire pour insuffisance de fonds, nous pouvons représenter ce prélèvement au
|
|
73
|
+
"creditStatement.additionalDetails": "Le relevé du <bold>{openingDate}</bold> au <bold>{closingDate}</bold> inclut tous les frais et paiements reçus jusqu'au {closingDate}. Votre prochain prélèvement automatique débutera à partir du {repaymentDate}.\n\nEn cas de rejet de prélèvement bancaire pour insuffisance de fonds, nous pouvons représenter ce prélèvement au minimum <bold>3 à 4 jours</bold> après le rejet notifié par votre banque.",
|
|
74
|
+
"creditStatement.card": "Carte",
|
|
73
75
|
"creditStatement.column.credit": "Crédit",
|
|
74
76
|
"creditStatement.column.debit": "Débit",
|
|
75
|
-
"creditStatement.
|
|
77
|
+
"creditStatement.creditTransfer": "Virement",
|
|
78
|
+
"creditStatement.date": "De <span>{openingDate}</span> à <span>{closingDate}</span>",
|
|
79
|
+
"creditStatement.directDebit": "Prélèvement automatique",
|
|
76
80
|
"creditStatement.issueDate": "Date d'émission {issueDate}",
|
|
77
81
|
"creditStatement.siret": "SIRET",
|
|
78
82
|
"creditStatement.titleDocument": "Relevé de remboursement",
|
|
@@ -103,8 +107,8 @@
|
|
|
103
107
|
"error.generic": "Une erreur est survenue",
|
|
104
108
|
"error.iban.invalid": "Cet IBAN semble incorrect. Veuillez le ressaisir.",
|
|
105
109
|
"error.invalidEmail": "E-mail non valide",
|
|
106
|
-
"error.invalidName": "Nom
|
|
107
|
-
"error.invalidVatNumber": "Numéro de TVA
|
|
110
|
+
"error.invalidName": "Nom invalide",
|
|
111
|
+
"error.invalidVatNumber": "Numéro de TVA invalide",
|
|
108
112
|
"error.network.500": "Erreur de serveur interne",
|
|
109
113
|
"error.network.503": "Service indisponible",
|
|
110
114
|
"error.requiredField": "Ce champ est requis",
|
|
@@ -360,13 +364,13 @@
|
|
|
360
364
|
"supportingDocuments.rejectionReason.BadDocumentQuality": "La qualité du document est très basse",
|
|
361
365
|
"supportingDocuments.rejectionReason.CompanyNameMismatch": "Le nom de l'entreprise dans le document soumis ne correspond pas à nos dossiers.",
|
|
362
366
|
"supportingDocuments.rejectionReason.DeclaredAmountMismatch": "Le montant déclaré dans le document soumis ne correspond pas à nos dossiers.",
|
|
363
|
-
"supportingDocuments.rejectionReason.ExpiredDocument": "
|
|
367
|
+
"supportingDocuments.rejectionReason.ExpiredDocument": "Le document est obsolète, veuillez fournir la dernière version disponible.",
|
|
364
368
|
"supportingDocuments.rejectionReason.FullDocumentRequired": "Document complet requis",
|
|
365
369
|
"supportingDocuments.rejectionReason.HandwrittenOrCertifiedElectronicSignatureRequired": "La signature n'est pas manuscrite ou certifiée électroniquement.",
|
|
366
370
|
"supportingDocuments.rejectionReason.IbanMismatch": "L'IBAN du bénéficiaire sur le document soumis ne correspond pas à la demande de transaction.",
|
|
367
371
|
"supportingDocuments.rejectionReason.InvalidAddress": "L'adresse dans le document soumis ne correspond pas à nos dossiers.",
|
|
368
372
|
"supportingDocuments.rejectionReason.InvalidDocument": "Le document n'est pas valide.",
|
|
369
|
-
"supportingDocuments.rejectionReason.InvalidOrMissingData": "Le
|
|
373
|
+
"supportingDocuments.rejectionReason.InvalidOrMissingData": "Le document soumis est invalide ou il manque une information.",
|
|
370
374
|
"supportingDocuments.rejectionReason.InvalidTransaction": "Les informations dans le document soumis ne correspondent pas à cette transaction spécifique.",
|
|
371
375
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderId": "Un document d'identité pour le fournisseur d'hébergement est requis.",
|
|
372
376
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderIdLetter": "L'identifiant du fournisseur d'hébergement et une preuve d'hébergement sont requis.",
|
package/src/locales/it.json
CHANGED
|
@@ -12,11 +12,12 @@
|
|
|
12
12
|
"accountStatement.column.totals": "Totali",
|
|
13
13
|
"accountStatement.column.type": "Tipo",
|
|
14
14
|
"accountStatement.contactSupport": "Contatta Swan",
|
|
15
|
-
"accountStatement.creditTransfer": "
|
|
15
|
+
"accountStatement.creditTransfer": "Trasferimento di credito",
|
|
16
16
|
"accountStatement.date": "Dal {openingDate} al {closingDate}",
|
|
17
17
|
"accountStatement.directDebit": "Addebito diretto",
|
|
18
|
-
"accountStatement.fees": "
|
|
18
|
+
"accountStatement.fees": "Commissione",
|
|
19
19
|
"accountStatement.iban": "IBAN",
|
|
20
|
+
"accountStatement.internationalCreditTransfer": "Bonifico internazionale",
|
|
20
21
|
"accountStatement.openingBalance": "Saldo iniziale",
|
|
21
22
|
"accountStatement.page": "Pagina",
|
|
22
23
|
"accountStatement.partnership": "In collaborazione con",
|
|
@@ -70,9 +71,12 @@
|
|
|
70
71
|
"copyButton.copiedTooltip": "Copiato negli appunti",
|
|
71
72
|
"copyButton.copyTooltip": "Clicca per copiare",
|
|
72
73
|
"creditStatement.additionalDetails": "Il rendiconto dal <bold>{openingDate}</bold> al <bold>{closingDate}</bold> include tutte le commissioni e i pagamenti ricevuti fino al {closingDate}. Il prossimo addebito automatico verrà effettuato a partire dal {repaymentDate}.\n\nIn caso di mancato addebito bancario per insufficienza di fondi, potremmo ripresentare l’addebito entro <bold>3 o 4 giorni</bold> dal rifiuto comunicato dalla tua banca.",
|
|
74
|
+
"creditStatement.card": "Carta",
|
|
73
75
|
"creditStatement.column.credit": "Credito",
|
|
74
76
|
"creditStatement.column.debit": "Addebito",
|
|
75
|
-
"creditStatement.
|
|
77
|
+
"creditStatement.creditTransfer": "Trasferimento di credito",
|
|
78
|
+
"creditStatement.date": "Da <span>{openingDate}</span> a <span>{closingDate}</span>",
|
|
79
|
+
"creditStatement.directDebit": "Addebito diretto",
|
|
76
80
|
"creditStatement.issueDate": "Data di emissione {issueDate}",
|
|
77
81
|
"creditStatement.siret": "SIRET",
|
|
78
82
|
"creditStatement.titleDocument": "Riepilogo dei rimborsi",
|
|
@@ -102,7 +106,7 @@
|
|
|
102
106
|
"datePicker.year": "Anno",
|
|
103
107
|
"error.generic": "Si è verificato un errore",
|
|
104
108
|
"error.iban.invalid": "L'IBAN non è corretto. Provi a inserirlo di nuovo.",
|
|
105
|
-
"error.invalidEmail": "
|
|
109
|
+
"error.invalidEmail": "Indirizzo email non valido",
|
|
106
110
|
"error.invalidName": "Nome non valido",
|
|
107
111
|
"error.invalidVatNumber": "Numero di partita IVA non valido",
|
|
108
112
|
"error.network.500": "Errore interno del server",
|
|
@@ -200,15 +204,15 @@
|
|
|
200
204
|
"rejection.InvalidSirenNumberRejection": "Numero SIREN non valido",
|
|
201
205
|
"rejection.LegalRepresentativeAccountMembershipCannotBeDisabledRejection": "Impossibile disattivare l'adesione al conto del rappresentante legale",
|
|
202
206
|
"rejection.LegalRepresentativeAccountMembershipCannotBeSuspendedRejection": "Impossibile sospendere l'adesione al conto del rappresentante legale",
|
|
203
|
-
"rejection.MaximumDailvInvitationsReachedRelection": "
|
|
207
|
+
"rejection.MaximumDailvInvitationsReachedRelection": "Ha raggiunto il numero massimo di inviti giornalieri per l'adesione al conto.",
|
|
204
208
|
"rejection.MaximumDailyExportsReachedRejection": "È stato raggiunto il numero massimo di esportazioni giornaliere",
|
|
205
209
|
"rejection.MaximumSimultaneousExportsRejection": "È stato raggiunto il numero massimo di esportazioni simultanee",
|
|
206
|
-
"rejection.MerchantCardPaymentDeclinedRejection": "Il pagamento con carta presso il
|
|
207
|
-
"rejection.MerchantPaymentMethodNotActiveRejection": "Il metodo di pagamento del
|
|
210
|
+
"rejection.MerchantCardPaymentDeclinedRejection": "Il pagamento con carta presso il esercente è stato rifiutato",
|
|
211
|
+
"rejection.MerchantPaymentMethodNotActiveRejection": "Il metodo di pagamento del esercente non è attivo",
|
|
208
212
|
"rejection.MerchantPaymentMethodSepaDirectDebitInvalidRejection": "Il pagamento tramite addebito diretto SEPA non è valido",
|
|
209
|
-
"rejection.MerchantPaymentMethodWrongStatusRejection": "Lo stato del metodo di pagamento del
|
|
210
|
-
"rejection.MerchantProfileNotValidRejection": "Il profilo del
|
|
211
|
-
"rejection.MerchantProfileWrongStatusRejection": "Stato del profilo del
|
|
213
|
+
"rejection.MerchantPaymentMethodWrongStatusRejection": "Lo stato del metodo di pagamento del esercente non è valido",
|
|
214
|
+
"rejection.MerchantProfileNotValidRejection": "Il profilo del esercente non è valido",
|
|
215
|
+
"rejection.MerchantProfileWrongStatusRejection": "Stato del profilo del esercente inaspettato",
|
|
212
216
|
"rejection.MissingMandatoryFieldRejection": "Mancano alcuni campi obbligatori",
|
|
213
217
|
"rejection.MissingPhoneNumberRestrictionRejection": "Il numero di telefono manca",
|
|
214
218
|
"rejection.NotAllowedUserStatusRejection": "Lo stato dell'utente non consente questa operazione.",
|
|
@@ -360,13 +364,13 @@
|
|
|
360
364
|
"supportingDocuments.rejectionReason.BadDocumentQuality": "La qualità del documento è davvero bassa",
|
|
361
365
|
"supportingDocuments.rejectionReason.CompanyNameMismatch": "Il nome dell'azienda nel documento inviato non corrisponde a quello presente nei nostri registri.",
|
|
362
366
|
"supportingDocuments.rejectionReason.DeclaredAmountMismatch": "L'importo indicato nel documento inviato non corrisponde a quello presente nei nostri registri.",
|
|
363
|
-
"supportingDocuments.rejectionReason.ExpiredDocument": "Il documento
|
|
367
|
+
"supportingDocuments.rejectionReason.ExpiredDocument": "Il documento è obsoleto, si prega di fornire l'ultima versione disponibile.",
|
|
364
368
|
"supportingDocuments.rejectionReason.FullDocumentRequired": "Documento completo richiesto",
|
|
365
369
|
"supportingDocuments.rejectionReason.HandwrittenOrCertifiedElectronicSignatureRequired": "La firma non è scritta a mano né certificata elettronicamente.",
|
|
366
370
|
"supportingDocuments.rejectionReason.IbanMismatch": "Il IBAN del beneficiario nel documento inviato non corrisponde alla richiesta di transazione.",
|
|
367
371
|
"supportingDocuments.rejectionReason.InvalidAddress": "L'indirizzo nel documento inviato non corrisponde ai nostri registri.",
|
|
368
372
|
"supportingDocuments.rejectionReason.InvalidDocument": "Il documento non è valido.",
|
|
369
|
-
"supportingDocuments.rejectionReason.InvalidOrMissingData": "Il
|
|
373
|
+
"supportingDocuments.rejectionReason.InvalidOrMissingData": "Il documento inviato non è valido oppure mancano alcune informazioni.",
|
|
370
374
|
"supportingDocuments.rejectionReason.InvalidTransaction": "Le informazioni nel documento inviato non corrispondono a questa transazione specifica.",
|
|
371
375
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderId": "È necessario un documento di identità per il fornitore di alloggi.",
|
|
372
376
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderIdLetter": "È necessario l'ID del fornitore di alloggi e la prova di alloggio.",
|
package/src/locales/nl.json
CHANGED
|
@@ -12,11 +12,12 @@
|
|
|
12
12
|
"accountStatement.column.totals": "Totalen",
|
|
13
13
|
"accountStatement.column.type": "Type",
|
|
14
14
|
"accountStatement.contactSupport": "Neem contact op met Swan",
|
|
15
|
-
"accountStatement.creditTransfer": "
|
|
15
|
+
"accountStatement.creditTransfer": "Creditoverboeking",
|
|
16
16
|
"accountStatement.date": "Van {openingDate} tot {closingDate}",
|
|
17
17
|
"accountStatement.directDebit": "Automatische incasso",
|
|
18
18
|
"accountStatement.fees": "Kosten",
|
|
19
19
|
"accountStatement.iban": "IBAN",
|
|
20
|
+
"accountStatement.internationalCreditTransfer": "Internationale overschrijving",
|
|
20
21
|
"accountStatement.openingBalance": "Beginsaldo",
|
|
21
22
|
"accountStatement.page": "Pagina",
|
|
22
23
|
"accountStatement.partnership": "In samenwerking met",
|
|
@@ -70,9 +71,12 @@
|
|
|
70
71
|
"copyButton.copiedTooltip": "Gekopieerd naar klembord",
|
|
71
72
|
"copyButton.copyTooltip": "Klik om te kopiëren",
|
|
72
73
|
"creditStatement.additionalDetails": "De afrekening van bold>{openingDate}</bold> tot <bold>{closingDate}</bold> bevat alle kosten en betalingen die we tot {closingDate} hebben ontvangen. De volgende automatische afschrijving gebeurt vanaf {repaymentDate}.\n\n\nAls een automatische incasso wordt geweigerd omdat er niet genoeg geld op je rekening staat, kunnen we deze incasso minstens <bold>3 tot 4 dagen</bold> na de weigering door je bank opnieuw proberen.",
|
|
74
|
+
"creditStatement.card": "Kaart",
|
|
73
75
|
"creditStatement.column.credit": "Credit",
|
|
74
76
|
"creditStatement.column.debit": "Debet",
|
|
75
|
-
"creditStatement.
|
|
77
|
+
"creditStatement.creditTransfer": "Overschrijving",
|
|
78
|
+
"creditStatement.date": "Van <span>{openingDate}</span> tot <span>{closingDate}</span>",
|
|
79
|
+
"creditStatement.directDebit": "Automatische incasso",
|
|
76
80
|
"creditStatement.issueDate": "Uitgiftedatum: {issueDate}",
|
|
77
81
|
"creditStatement.siret": "SIRET",
|
|
78
82
|
"creditStatement.titleDocument": "Terugbetalingsoverzicht",
|
|
@@ -102,9 +106,9 @@
|
|
|
102
106
|
"datePicker.year": "Jaar",
|
|
103
107
|
"error.generic": "Er is een fout opgetreden",
|
|
104
108
|
"error.iban.invalid": "Dit IBAN nummer lijkt niet juist. Probeer het nog eens.",
|
|
105
|
-
"error.invalidEmail": "
|
|
109
|
+
"error.invalidEmail": "Ongeldig e-mailadres",
|
|
106
110
|
"error.invalidName": "Ongeldige naam",
|
|
107
|
-
"error.invalidVatNumber": "
|
|
111
|
+
"error.invalidVatNumber": "Ongeldig btw-nummer",
|
|
108
112
|
"error.network.500": "Interne Server Fout",
|
|
109
113
|
"error.network.503": "Dienst niet beschikbaar",
|
|
110
114
|
"error.requiredField": "Dit veld is verplicht",
|
|
@@ -360,13 +364,13 @@
|
|
|
360
364
|
"supportingDocuments.rejectionReason.BadDocumentQuality": "De kwaliteit van het document is erg slecht",
|
|
361
365
|
"supportingDocuments.rejectionReason.CompanyNameMismatch": "De bedrijfsnaam in het ingediende document komt niet overeen met onze gegevens.",
|
|
362
366
|
"supportingDocuments.rejectionReason.DeclaredAmountMismatch": "Het opgegeven bedrag in het ingediende document komt niet overeen met onze gegevens.",
|
|
363
|
-
"supportingDocuments.rejectionReason.ExpiredDocument": "
|
|
367
|
+
"supportingDocuments.rejectionReason.ExpiredDocument": "Het document is te oud, kun je de nieuwste versie geven?",
|
|
364
368
|
"supportingDocuments.rejectionReason.FullDocumentRequired": "Volledig document vereist",
|
|
365
369
|
"supportingDocuments.rejectionReason.HandwrittenOrCertifiedElectronicSignatureRequired": "De handtekening is niet handgeschreven of elektronisch gecertificeerd.",
|
|
366
370
|
"supportingDocuments.rejectionReason.IbanMismatch": "Het IBAN van de begunstigde op het ingediende document komt niet overeen met het transactieverzoek.",
|
|
367
371
|
"supportingDocuments.rejectionReason.InvalidAddress": "Het adres in het ingediende document komt niet overeen met onze gegevens.",
|
|
368
372
|
"supportingDocuments.rejectionReason.InvalidDocument": "Het document is niet geldig.",
|
|
369
|
-
"supportingDocuments.rejectionReason.InvalidOrMissingData": "
|
|
373
|
+
"supportingDocuments.rejectionReason.InvalidOrMissingData": "Het ingediende document is ongeldig, of er ontbreken enkele gegevens.",
|
|
370
374
|
"supportingDocuments.rejectionReason.InvalidTransaction": "De informatie in het ingediende document komt niet overeen met deze specifieke transactie.",
|
|
371
375
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderId": "Een identiteitsdocument voor de accommodatieaanbieder is vereist.",
|
|
372
376
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderIdLetter": "Het ID van de accommodatieaanbieder en bewijs van accommodatie zijn vereist.",
|
package/src/locales/pt.json
CHANGED
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
"accountStatement.creditTransfer": "Transferência de crédito",
|
|
16
16
|
"accountStatement.date": "De {openingDate} até {closingDate}",
|
|
17
17
|
"accountStatement.directDebit": "Débito direto",
|
|
18
|
-
"accountStatement.fees": "
|
|
18
|
+
"accountStatement.fees": "Taxa",
|
|
19
19
|
"accountStatement.iban": "IBAN",
|
|
20
|
+
"accountStatement.internationalCreditTransfer": "Transferência internacional de crédito",
|
|
20
21
|
"accountStatement.openingBalance": "Saldo inicial",
|
|
21
22
|
"accountStatement.page": "Página",
|
|
22
23
|
"accountStatement.partnership": "Em parceria com",
|
|
@@ -70,9 +71,12 @@
|
|
|
70
71
|
"copyButton.copiedTooltip": "Copiado para a área de transferência",
|
|
71
72
|
"copyButton.copyTooltip": "Clique para copiar",
|
|
72
73
|
"creditStatement.additionalDetails": "O extrato de <bold>{openingDate}</bold> a <bold>{closingDate}</bold> inclui todas as taxas e pagamentos recebidos até {closingDate}. O seu próximo débito automático ocorrerá a partir de {repaymentDate}.\n\nNo caso de um débito bancário rejeitado devido a fundos insuficientes, poderemos representar esse débito pelo menos <bold>3 a 4 dias</bold> após a rejeição notificada pelo seu banco.",
|
|
74
|
+
"creditStatement.card": "Cartão",
|
|
73
75
|
"creditStatement.column.credit": "Crédito",
|
|
74
76
|
"creditStatement.column.debit": "Débito",
|
|
75
|
-
"creditStatement.
|
|
77
|
+
"creditStatement.creditTransfer": "Transferência de Crédito",
|
|
78
|
+
"creditStatement.date": "De<span>{openingDate}</span> para<span>{closingDate}</span>",
|
|
79
|
+
"creditStatement.directDebit": "Débito Direto",
|
|
76
80
|
"creditStatement.issueDate": "Data de emissão {issueDate}",
|
|
77
81
|
"creditStatement.siret": "SIRET",
|
|
78
82
|
"creditStatement.titleDocument": "Declaração de amortização",
|
|
@@ -102,7 +106,7 @@
|
|
|
102
106
|
"datePicker.year": "Ano",
|
|
103
107
|
"error.generic": "Ocorreu um erro",
|
|
104
108
|
"error.iban.invalid": "Este IBAN não parece correto. Tente inserir novamente.",
|
|
105
|
-
"error.invalidEmail": "
|
|
109
|
+
"error.invalidEmail": "E-mail inválido",
|
|
106
110
|
"error.invalidName": "Nome inválido",
|
|
107
111
|
"error.invalidVatNumber": "Número de IVA inválido",
|
|
108
112
|
"error.network.500": "Erro interno do servidor",
|
|
@@ -360,13 +364,13 @@
|
|
|
360
364
|
"supportingDocuments.rejectionReason.BadDocumentQuality": "A qualidade do documento é demasiado baixa",
|
|
361
365
|
"supportingDocuments.rejectionReason.CompanyNameMismatch": "O nome da empresa no documento apresentado não corresponde aos nossos registos.",
|
|
362
366
|
"supportingDocuments.rejectionReason.DeclaredAmountMismatch": "O valor declarado no documento apresentado não corresponde aos nossos registos.",
|
|
363
|
-
"supportingDocuments.rejectionReason.ExpiredDocument": "O
|
|
367
|
+
"supportingDocuments.rejectionReason.ExpiredDocument": "O documento está desatualizado. Forneça a versão mais recente disponível.",
|
|
364
368
|
"supportingDocuments.rejectionReason.FullDocumentRequired": "Documento completo obrigatório",
|
|
365
369
|
"supportingDocuments.rejectionReason.HandwrittenOrCertifiedElectronicSignatureRequired": "A assinatura não é manuscrita ou eletronicamente certificada.",
|
|
366
370
|
"supportingDocuments.rejectionReason.IbanMismatch": "O IBAN do beneficiário no documento enviado não corresponde à solicitação de transação.",
|
|
367
371
|
"supportingDocuments.rejectionReason.InvalidAddress": "O endereço no documento apresentado não corresponde aos nossos registos.",
|
|
368
372
|
"supportingDocuments.rejectionReason.InvalidDocument": "O documento não é válido.",
|
|
369
|
-
"supportingDocuments.rejectionReason.InvalidOrMissingData": "O
|
|
373
|
+
"supportingDocuments.rejectionReason.InvalidOrMissingData": "O documento enviado é inválido ou contém informações em falta.",
|
|
370
374
|
"supportingDocuments.rejectionReason.InvalidTransaction": "A informação no documento apresentado não corresponde a esta transação específica.",
|
|
371
375
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderId": "É necessário um documento de identidade para o provedor de acomodação.",
|
|
372
376
|
"supportingDocuments.rejectionReason.MissingAccommodationProviderIdLetter": "É necessário o documento de identificação do fornecedor do alojamento e o comprovativo de alojamento.",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, test } from "vitest";
|
|
2
|
-
import { getCompanyTaxNumberHelp, getCompanyTaxNumberPlaceholder, getIndividualTaxNumberHelp, getIndividualTaxNumberPlaceholder, getTaxNumberTooltip, isValidEmail, sanitizeDecimal, validateArrayRequired, validateBooleanRequired, validateBooleanTypeRequired, validateCompanyTaxNumber, validateDate, validateIndividualTaxNumber, validateName, validateNullableRequired, validateRequired, } from "../validation";
|
|
2
|
+
import { getCompanyTaxNumberHelp, getCompanyTaxNumberPlaceholder, getIndividualTaxNumberHelp, getIndividualTaxNumberPlaceholder, getTaxNumberTooltip, isValidEmail, isValidUsaTaxNumber, sanitizeDecimal, validateArrayRequired, validateBooleanRequired, validateBooleanTypeRequired, validateCompanyTaxNumber, validateDate, validateIndividualTaxNumber, validateName, validateNullableRequired, validateRequired, } from "../validation";
|
|
3
3
|
describe("isValidEmail", () => {
|
|
4
4
|
test("validates correct email addresses", () => {
|
|
5
5
|
expect(isValidEmail("test@example.com")).toBe(true);
|
|
@@ -281,6 +281,31 @@ describe("validateCompanyTaxNumber", () => {
|
|
|
281
281
|
});
|
|
282
282
|
});
|
|
283
283
|
});
|
|
284
|
+
describe("isValidUsaTaxNumber", () => {
|
|
285
|
+
test("accepts valid SSN format", () => {
|
|
286
|
+
expect(isValidUsaTaxNumber("123456789")).toBe(true);
|
|
287
|
+
expect(isValidUsaTaxNumber("123-45-6789")).toBe(true);
|
|
288
|
+
expect(isValidUsaTaxNumber("123 45 6789")).toBe(true);
|
|
289
|
+
});
|
|
290
|
+
test("accepts valid ITIN format (starts with 9, middle in 50-65, 70-88, 90-92, 94-99)", () => {
|
|
291
|
+
expect(isValidUsaTaxNumber("951501234")).toBe(true);
|
|
292
|
+
expect(isValidUsaTaxNumber("952-70-3456")).toBe(true);
|
|
293
|
+
});
|
|
294
|
+
test("strips non-digits before validating", () => {
|
|
295
|
+
expect(isValidUsaTaxNumber("123-45-6789")).toBe(true);
|
|
296
|
+
expect(isValidUsaTaxNumber(" 123 45 6789 ")).toBe(true);
|
|
297
|
+
});
|
|
298
|
+
test("rejects invalid length", () => {
|
|
299
|
+
expect(isValidUsaTaxNumber("12345678")).toBe(false);
|
|
300
|
+
expect(isValidUsaTaxNumber("1234567890")).toBe(false);
|
|
301
|
+
expect(isValidUsaTaxNumber("")).toBe(false);
|
|
302
|
+
});
|
|
303
|
+
test("rejects invalid SSN patterns (000, 666, 9xx area)", () => {
|
|
304
|
+
expect(isValidUsaTaxNumber("000456789")).toBe(false);
|
|
305
|
+
expect(isValidUsaTaxNumber("666456789")).toBe(false);
|
|
306
|
+
expect(isValidUsaTaxNumber("900456789")).toBe(false);
|
|
307
|
+
});
|
|
308
|
+
});
|
|
284
309
|
describe("Tax number helper functions", () => {
|
|
285
310
|
describe("getIndividualTaxNumberPlaceholder", () => {
|
|
286
311
|
test("returns country-specific placeholders", () => {
|
|
@@ -14,6 +14,8 @@ export declare const validateEmail: Validator<string>;
|
|
|
14
14
|
export declare const validateName: Validator<string>;
|
|
15
15
|
export declare const validateIndividualTaxNumber: (country: IndividualCountryCCA3) => Validator<string | undefined>;
|
|
16
16
|
export declare const validateCompanyTaxNumber: (country: CompanyCountryCCA3) => Validator<string | undefined>;
|
|
17
|
+
export declare const isValidUsaTaxNumber: (maybeTaxId: string) => boolean;
|
|
18
|
+
export declare const validateUsaTaxNumber: Validator<string | undefined>;
|
|
17
19
|
export { printFormat as printIbanFormat } from "iban";
|
|
18
20
|
export declare const validateIban: (iban: string) => string | undefined;
|
|
19
21
|
export declare const validateDate: (value: ExtractedDate | undefined) => string | undefined;
|
package/src/utils/validation.js
CHANGED
|
@@ -186,6 +186,26 @@ export const validateCompanyTaxNumber = (country) => value => {
|
|
|
186
186
|
return t("common.form.invalidTaxIdentificationNumber");
|
|
187
187
|
}
|
|
188
188
|
};
|
|
189
|
+
// Validates U.S. Tax IDs (SSN or ITIN)
|
|
190
|
+
export const isValidUsaTaxNumber = (maybeTaxId) => {
|
|
191
|
+
const cleanId = maybeTaxId.replace(/\D/g, "");
|
|
192
|
+
if (cleanId.length !== 9) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
// SSN: No 000/666/900+ starts, no 00 middle, no 0000 end
|
|
196
|
+
const ssnPattern = /^(?!000|666|9\d{2})\d{3}(?!00)\d{2}(?!0000)\d{4}$/;
|
|
197
|
+
// ITIN: Starts with 9, middle digits generally between 50-65, 70-88, 90-92, 94-99
|
|
198
|
+
const itinPattern = /^9\d{2}(5\d|6[0-5]|7\d|8[0-8]|9[0-2]|9[4-9])\d{4}$/;
|
|
199
|
+
return ssnPattern.test(cleanId) || itinPattern.test(cleanId);
|
|
200
|
+
};
|
|
201
|
+
export const validateUsaTaxNumber = value => {
|
|
202
|
+
if (value == null || !value) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (!isValidUsaTaxNumber(value)) {
|
|
206
|
+
return t("common.form.invalidTaxIdentificationNumber");
|
|
207
|
+
}
|
|
208
|
+
};
|
|
189
209
|
export { printFormat as printIbanFormat } from "iban";
|
|
190
210
|
export const validateIban = (iban) => {
|
|
191
211
|
if (!isValidIban(iban)) {
|