support importing camt.052 bank statement file
This commit is contained in:
@@ -9,11 +9,20 @@ const (
|
||||
CAMT_INDICATOR_DEBIT camtCreditDebitIndicator = "DBIT"
|
||||
)
|
||||
|
||||
type camt052File struct {
|
||||
XMLName xml.Name `xml:"Document"`
|
||||
BankToCustomerAccountReport *camtBankToCustomerAccountReport `xml:"BkToCstmrAcctRpt"`
|
||||
}
|
||||
|
||||
type camt053File struct {
|
||||
XMLName xml.Name `xml:"Document"`
|
||||
BankToCustomerStatement *camtBankToCustomerStatement `xml:"BkToCstmrStmt"`
|
||||
}
|
||||
|
||||
type camtBankToCustomerAccountReport struct {
|
||||
Statements []*camtStatement `xml:"Rpt"`
|
||||
}
|
||||
|
||||
type camtBankToCustomerStatement struct {
|
||||
Statements []*camtStatement `xml:"Stmt"`
|
||||
}
|
||||
|
||||
@@ -10,11 +10,30 @@ import (
|
||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||
)
|
||||
|
||||
// camt052FileReader defines the structure of camt.052 file reader
|
||||
type camt052FileReader struct {
|
||||
xmlDecoder *xml.Decoder
|
||||
}
|
||||
|
||||
// camt053FileReader defines the structure of camt.053 file reader
|
||||
type camt053FileReader struct {
|
||||
xmlDecoder *xml.Decoder
|
||||
}
|
||||
|
||||
// read returns the imported camt.052 data
|
||||
// Reference: https://www.iso20022.org/message-set/1196/download
|
||||
func (r *camt052FileReader) read(ctx core.Context) (*camt052File, error) {
|
||||
file := &camt052File{}
|
||||
|
||||
err := r.xmlDecoder.Decode(&file)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return file, nil
|
||||
}
|
||||
|
||||
// read returns the imported camt.053 data
|
||||
// Reference: https://www.iso20022.org/message-set/1196/download
|
||||
func (r *camt053FileReader) read(ctx core.Context) (*camt053File, error) {
|
||||
@@ -29,6 +48,19 @@ func (r *camt053FileReader) read(ctx core.Context) (*camt053File, error) {
|
||||
return file, nil
|
||||
}
|
||||
|
||||
func createNewCamt052FileReader(data []byte) (*camt052FileReader, error) {
|
||||
if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // <?xml
|
||||
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
||||
xmlDecoder.CharsetReader = charset.NewReaderLabel
|
||||
|
||||
return &camt052FileReader{
|
||||
xmlDecoder: xmlDecoder,
|
||||
}, nil
|
||||
}
|
||||
|
||||
return nil, errs.ErrInvalidXmlFile
|
||||
}
|
||||
|
||||
func createNewCamt053FileReader(data []byte) (*camt053FileReader, error) {
|
||||
if len(data) > 5 && data[0] == 0x3C && data[1] == 0x3F && data[2] == 0x78 && data[3] == 0x6D && data[4] == 0x6C { // <?xml
|
||||
xmlDecoder := xml.NewDecoder(bytes.NewReader(data))
|
||||
|
||||
@@ -303,12 +303,12 @@ func (t *camtStatementTransactionDataRowIterator) parseTransaction(ctx core.Cont
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func createNewCamtStatementTransactionDataTable(file *camt053File) (*camtStatementTransactionDataTable, error) {
|
||||
if file == nil || file.BankToCustomerStatement == nil || len(file.BankToCustomerStatement.Statements) == 0 {
|
||||
func createNewCamtStatementTransactionDataTable(camtStatements []*camtStatement) (*camtStatementTransactionDataTable, error) {
|
||||
if len(camtStatements) == 0 {
|
||||
return nil, errs.ErrNotFoundTransactionDataInFile
|
||||
}
|
||||
|
||||
return &camtStatementTransactionDataTable{
|
||||
allStatements: file.BankToCustomerStatement.Statements,
|
||||
allStatements: camtStatements,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
|
||||
"github.com/mayswind/ezbookkeeping/pkg/converters/converter"
|
||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||
"github.com/mayswind/ezbookkeeping/pkg/models"
|
||||
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
||||
)
|
||||
@@ -15,15 +16,49 @@ var camtTransactionTypeNameMapping = map[models.TransactionType]string{
|
||||
models.TRANSACTION_TYPE_TRANSFER: utils.IntToString(int(models.TRANSACTION_TYPE_TRANSFER)),
|
||||
}
|
||||
|
||||
// camt052TransactionDataImporter defines the structure of camt.052 file importer for transaction data
|
||||
type camt052TransactionDataImporter struct {
|
||||
}
|
||||
|
||||
// camt053TransactionDataImporter defines the structure of camt.053 file importer for transaction data
|
||||
type camt053TransactionDataImporter struct {
|
||||
}
|
||||
|
||||
// Initialize a camt.053 transaction data importer singleton instance
|
||||
// Initialize camt.052 and camt.053 transaction data importer singleton instances
|
||||
var (
|
||||
Camt052TransactionDataImporter = &camt052TransactionDataImporter{}
|
||||
Camt053TransactionDataImporter = &camt053TransactionDataImporter{}
|
||||
)
|
||||
|
||||
// ParseImportedData returns the imported data by parsing the camt.052 file transaction data
|
||||
func (c *camt052TransactionDataImporter) ParseImportedData(ctx core.Context, user *models.User, data []byte, defaultTimezone *time.Location, additionalOptions converter.TransactionDataImporterOptions, accountMap map[string]*models.Account, expenseCategoryMap map[string]map[string]*models.TransactionCategory, incomeCategoryMap map[string]map[string]*models.TransactionCategory, transferCategoryMap map[string]map[string]*models.TransactionCategory, tagMap map[string]*models.TransactionTag) (models.ImportedTransactionSlice, []*models.Account, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionTag, error) {
|
||||
camt052DataReader, err := createNewCamt052FileReader(data)
|
||||
|
||||
if err != nil {
|
||||
return nil, nil, nil, nil, nil, nil, err
|
||||
}
|
||||
|
||||
camt052Data, err := camt052DataReader.read(ctx)
|
||||
|
||||
if err != nil {
|
||||
return nil, nil, nil, nil, nil, nil, err
|
||||
}
|
||||
|
||||
if camt052Data.BankToCustomerAccountReport == nil || camt052Data.BankToCustomerAccountReport.Statements == nil {
|
||||
return nil, nil, nil, nil, nil, nil, errs.ErrNotFoundTransactionDataInFile
|
||||
}
|
||||
|
||||
transactionDataTable, err := createNewCamtStatementTransactionDataTable(camt052Data.BankToCustomerAccountReport.Statements)
|
||||
|
||||
if err != nil {
|
||||
return nil, nil, nil, nil, nil, nil, err
|
||||
}
|
||||
|
||||
dataTableImporter := converter.CreateNewSimpleImporterWithTypeNameMapping(camtTransactionTypeNameMapping)
|
||||
|
||||
return dataTableImporter.ParseImportedData(ctx, user, transactionDataTable, defaultTimezone, additionalOptions, accountMap, expenseCategoryMap, incomeCategoryMap, transferCategoryMap, tagMap)
|
||||
}
|
||||
|
||||
// ParseImportedData returns the imported data by parsing the camt.053 file transaction data
|
||||
func (c *camt053TransactionDataImporter) ParseImportedData(ctx core.Context, user *models.User, data []byte, defaultTimezone *time.Location, additionalOptions converter.TransactionDataImporterOptions, accountMap map[string]*models.Account, expenseCategoryMap map[string]map[string]*models.TransactionCategory, incomeCategoryMap map[string]map[string]*models.TransactionCategory, transferCategoryMap map[string]map[string]*models.TransactionCategory, tagMap map[string]*models.TransactionTag) (models.ImportedTransactionSlice, []*models.Account, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionCategory, []*models.TransactionTag, error) {
|
||||
camt053DataReader, err := createNewCamt053FileReader(data)
|
||||
@@ -38,7 +73,11 @@ func (c *camt053TransactionDataImporter) ParseImportedData(ctx core.Context, use
|
||||
return nil, nil, nil, nil, nil, nil, err
|
||||
}
|
||||
|
||||
transactionDataTable, err := createNewCamtStatementTransactionDataTable(camt053Data)
|
||||
if camt053Data.BankToCustomerStatement == nil || camt053Data.BankToCustomerStatement.Statements == nil {
|
||||
return nil, nil, nil, nil, nil, nil, errs.ErrNotFoundTransactionDataInFile
|
||||
}
|
||||
|
||||
transactionDataTable, err := createNewCamtStatementTransactionDataTable(camt053Data.BankToCustomerStatement.Statements)
|
||||
|
||||
if err != nil {
|
||||
return nil, nil, nil, nil, nil, nil, err
|
||||
|
||||
@@ -13,6 +13,109 @@ import (
|
||||
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
||||
)
|
||||
|
||||
func TestCamt052TransactionDataFileParseImportedData_MinimumValidData(t *testing.T) {
|
||||
importer := Camt052TransactionDataImporter
|
||||
context := core.NewNullContext()
|
||||
|
||||
user := &models.User{
|
||||
Uid: 1234567890,
|
||||
DefaultCurrency: "CNY",
|
||||
}
|
||||
|
||||
allNewTransactions, allNewAccounts, allNewSubExpenseCategories, allNewSubIncomeCategories, allNewSubTransferCategories, allNewTags, err := importer.ParseImportedData(context, user, []byte(
|
||||
`<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02">
|
||||
<BkToCstmrAcctRpt>
|
||||
<Rpt>
|
||||
<Acct>
|
||||
<Id>
|
||||
<IBAN>123</IBAN>
|
||||
</Id>
|
||||
<Ccy>CNY</Ccy>
|
||||
</Acct>
|
||||
<Ntry>
|
||||
<BookgDt>
|
||||
<DtTm>2024-09-01T01:23:45+08:00</DtTm>
|
||||
</BookgDt>
|
||||
<CdtDbtInd>CRDT</CdtDbtInd>
|
||||
<Amt Ccy="CNY">123.45</Amt>
|
||||
</Ntry>
|
||||
<Ntry>
|
||||
<BookgDt>
|
||||
<DtTm>2024-09-01T12:34:56+08:00</DtTm>
|
||||
</BookgDt>
|
||||
<CdtDbtInd>DBIT</CdtDbtInd>
|
||||
<Amt Ccy="CNY">0.12</Amt>
|
||||
</Ntry>
|
||||
</Rpt>
|
||||
<Rpt>
|
||||
<Acct>
|
||||
<Id>
|
||||
<Othr>
|
||||
<Id>456</Id>
|
||||
</Othr>
|
||||
</Id>
|
||||
<Ccy>USD</Ccy>
|
||||
</Acct>
|
||||
<Ntry>
|
||||
<BookgDt>
|
||||
<DtTm>2024-09-01T23:59:59+08:00</DtTm>
|
||||
</BookgDt>
|
||||
<CdtDbtInd>CRDT</CdtDbtInd>
|
||||
<Amt Ccy="USD">1.23</Amt>
|
||||
</Ntry>
|
||||
</Rpt>
|
||||
</BkToCstmrAcctRpt>
|
||||
</Document>`), time.UTC, converter.DefaultImporterOptions, nil, nil, nil, nil, nil)
|
||||
|
||||
assert.Nil(t, err)
|
||||
|
||||
assert.Equal(t, 3, len(allNewTransactions))
|
||||
assert.Equal(t, 2, len(allNewAccounts))
|
||||
assert.Equal(t, 1, len(allNewSubExpenseCategories))
|
||||
assert.Equal(t, 1, len(allNewSubIncomeCategories))
|
||||
assert.Equal(t, 0, len(allNewSubTransferCategories))
|
||||
assert.Equal(t, 0, len(allNewTags))
|
||||
|
||||
assert.Equal(t, int64(1234567890), allNewTransactions[0].Uid)
|
||||
assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[0].Type)
|
||||
assert.Equal(t, int64(1725125025), utils.GetUnixTimeFromTransactionTime(allNewTransactions[0].TransactionTime))
|
||||
assert.Equal(t, int64(12345), allNewTransactions[0].Amount)
|
||||
assert.Equal(t, "123", allNewTransactions[0].OriginalSourceAccountName)
|
||||
assert.Equal(t, "CNY", allNewTransactions[0].OriginalSourceAccountCurrency)
|
||||
assert.Equal(t, "", allNewTransactions[0].OriginalCategoryName)
|
||||
|
||||
assert.Equal(t, int64(1234567890), allNewTransactions[1].Uid)
|
||||
assert.Equal(t, models.TRANSACTION_DB_TYPE_EXPENSE, allNewTransactions[1].Type)
|
||||
assert.Equal(t, int64(1725165296), utils.GetUnixTimeFromTransactionTime(allNewTransactions[1].TransactionTime))
|
||||
assert.Equal(t, int64(12), allNewTransactions[1].Amount)
|
||||
assert.Equal(t, "123", allNewTransactions[1].OriginalSourceAccountName)
|
||||
assert.Equal(t, "CNY", allNewTransactions[1].OriginalSourceAccountCurrency)
|
||||
assert.Equal(t, "", allNewTransactions[1].OriginalCategoryName)
|
||||
|
||||
assert.Equal(t, int64(1234567890), allNewTransactions[2].Uid)
|
||||
assert.Equal(t, models.TRANSACTION_DB_TYPE_INCOME, allNewTransactions[2].Type)
|
||||
assert.Equal(t, int64(1725206399), utils.GetUnixTimeFromTransactionTime(allNewTransactions[2].TransactionTime))
|
||||
assert.Equal(t, int64(123), allNewTransactions[2].Amount)
|
||||
assert.Equal(t, "456", allNewTransactions[2].OriginalSourceAccountName)
|
||||
assert.Equal(t, "USD", allNewTransactions[2].OriginalSourceAccountCurrency)
|
||||
assert.Equal(t, "", allNewTransactions[2].OriginalCategoryName)
|
||||
|
||||
assert.Equal(t, int64(1234567890), allNewAccounts[0].Uid)
|
||||
assert.Equal(t, "123", allNewAccounts[0].Name)
|
||||
assert.Equal(t, "CNY", allNewAccounts[0].Currency)
|
||||
|
||||
assert.Equal(t, int64(1234567890), allNewAccounts[1].Uid)
|
||||
assert.Equal(t, "456", allNewAccounts[1].Name)
|
||||
assert.Equal(t, "USD", allNewAccounts[1].Currency)
|
||||
|
||||
assert.Equal(t, int64(1234567890), allNewSubExpenseCategories[0].Uid)
|
||||
assert.Equal(t, "", allNewSubExpenseCategories[0].Name)
|
||||
|
||||
assert.Equal(t, int64(1234567890), allNewSubIncomeCategories[0].Uid)
|
||||
assert.Equal(t, "", allNewSubIncomeCategories[0].Name)
|
||||
}
|
||||
|
||||
func TestCamt053TransactionDataFileParseImportedData_MinimumValidData(t *testing.T) {
|
||||
importer := Camt053TransactionDataImporter
|
||||
context := core.NewNullContext()
|
||||
|
||||
@@ -52,6 +52,8 @@ func GetTransactionDataImporter(fileType string) (converter.TransactionDataImpor
|
||||
return qif.QifDayMonthYearTransactionDataImporter, nil
|
||||
} else if fileType == "iif" {
|
||||
return iif.IifTransactionDataFileImporter, nil
|
||||
} else if fileType == "camt052" {
|
||||
return camt.Camt052TransactionDataImporter, nil
|
||||
} else if fileType == "camt053" {
|
||||
return camt.Camt053TransactionDataImporter, nil
|
||||
} else if fileType == "mt940" {
|
||||
|
||||
@@ -229,6 +229,11 @@ export const SUPPORTED_IMPORT_FILE_CATEGORY_AND_TYPES: ImportFileCategoryAndType
|
||||
{
|
||||
categoryName: 'General Bank Statement Format',
|
||||
fileTypes: [
|
||||
{
|
||||
type: 'camt052',
|
||||
name: 'Camt.052 Bank to Customer Statement File',
|
||||
extensions: '.xml'
|
||||
},
|
||||
{
|
||||
type: 'camt053',
|
||||
name: 'Camt.053 Bank to Customer Statement File',
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Monat-Tag-Jahr-Format",
|
||||
"Day-month-year format": "Tag-Monat-Jahr-Format",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF)-Datei",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Month-day-year format",
|
||||
"Day-month-year format": "Day-month-year format",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) File",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Formato mes-día-año",
|
||||
"Day-month-year format": "Formato día-mes-año",
|
||||
"Intuit Interchange Format (IIF) File": "Archivo IIF (Intuit Interchange Format)",
|
||||
"Camt.052 Bank to Customer Statement File": "Extracto Camt.052 (Extracto de cuenta del cliente)",
|
||||
"Camt.053 Bank to Customer Statement File": "Extracto Camt.053 (Extracto de cuenta del cliente)",
|
||||
"MT940 Consumer Statement Message File": "Extracto MT940 (Extracto de cuenta del cliente)",
|
||||
"Delimiter-separated Values (DSV) File": "Archivo DSV (valores separados por delimirtadores)",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Format mois-jour-année",
|
||||
"Day-month-year format": "Format jour-mois-année",
|
||||
"Intuit Interchange Format (IIF) File": "Fichier Intuit Interchange Format (IIF)",
|
||||
"Camt.052 Bank to Customer Statement File": "Fichier de relevé bancaire Camt.052",
|
||||
"Camt.053 Bank to Customer Statement File": "Fichier de relevé bancaire Camt.053",
|
||||
"MT940 Consumer Statement Message File": "Fichier de message de relevé consommateur MT940",
|
||||
"Delimiter-separated Values (DSV) File": "Fichier de valeurs séparées par délimiteur (DSV)",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Formato mese-giorno-anno",
|
||||
"Day-month-year format": "Formato giorno-mese-anno",
|
||||
"Intuit Interchange Format (IIF) File": "File Intuit Interchange Format (IIF)",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||
"Delimiter-separated Values (DSV) File": "File valori separati da delimitatore (DSV)",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "月-日-年 形式",
|
||||
"Day-month-year format": "日-月-年 形式",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) ファイル",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) ファイル",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "ತಿಂಗಳು-ದಿನ-ವರ್ಷ ರೂಪ",
|
||||
"Day-month-year format": "ದಿನ-ತಿಂಗಳು-ವರ್ಷ ರೂಪ",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) ಫೈಲ್",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 ಬ್ಯಾಂಕ್ ಸ್ಟೇಟ್ಮೆಂಟ್ ಫೈಲ್",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 ಬ್ಯಾಂಕ್ ಸ್ಟೇಟ್ಮೆಂಟ್ ಫೈಲ್",
|
||||
"MT940 Consumer Statement Message File": "MT940 ಗ್ರಾಹಕ ಸ್ಟೇಟ್ಮೆಂಟ್ ಫೈಲ್",
|
||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) ಫೈಲ್",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "월-일-연 형식",
|
||||
"Day-month-year format": "일-월-연 형식",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) 파일",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 은행 고객 명세서 파일",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 은행 고객 명세서 파일",
|
||||
"MT940 Consumer Statement Message File": "MT940 소비자 명세서 메시지 파일",
|
||||
"Delimiter-separated Values (DSV) File": "구분 기호로 구분된 값 (DSV) 파일",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Maand-dag-jaar-formaat",
|
||||
"Day-month-year format": "Dag-maand-jaar-formaat",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF)-bestand",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank-naar-klant afschriftbestand",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank-naar-klant afschriftbestand",
|
||||
"MT940 Consumer Statement Message File": "MT940 Rekeningafschriftbestand",
|
||||
"Delimiter-separated Values (DSV) File": "Delimiter-gescheiden waarden (DSV)-bestand",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Formato mês-dia-ano",
|
||||
"Day-month-year format": "Formato dia-mês-ano",
|
||||
"Intuit Interchange Format (IIF) File": "Arquivo Intuit Interchange Format (IIF)",
|
||||
"Camt.052 Bank to Customer Statement File": "Arquivo, de Extrato Bancário Camt.052",
|
||||
"Camt.053 Bank to Customer Statement File": "Arquivo, de Extrato Bancário Camt.053",
|
||||
"MT940 Consumer Statement Message File": "Arquivo de Mensagem de Extrato Consumidor MT940",
|
||||
"Delimiter-separated Values (DSV) File": "Arquivo de Valores Separados por Delimitador (DSV)",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Формат месяц-день-год",
|
||||
"Day-month-year format": "Формат день-месяц-год",
|
||||
"Intuit Interchange Format (IIF) File": "Файл Intuit Interchange Format (IIF)",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Format mesec-dan-leto",
|
||||
"Day-month-year format": "Format dan-mesec-leto",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) datoteka",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 bančni izpisek",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 bančni izpisek",
|
||||
"MT940 Consumer Statement Message File": "MT940 bančni izpisek",
|
||||
"Delimiter-separated Values (DSV) File": "Datoteka z vrednostmi ločenimi z ločilom (DSV)",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "மாதம்-நாள்-ஆண்டு வடிவம்",
|
||||
"Day-month-year format": "நாள்-மாதம்-ஆண்டு வடிவம்",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) கோப்பு",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 வங்கி அறிக்கை கோப்பு",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 வங்கி அறிக்கை கோப்பு",
|
||||
"MT940 Consumer Statement Message File": "MT940 வாடிக்கையாளர் அறிக்கை கோப்பு",
|
||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) கோப்பு",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "รูปแบบ เดือน-วัน-ปี",
|
||||
"Day-month-year format": "รูปแบบ วัน-เดือน-ปี",
|
||||
"Intuit Interchange Format (IIF) File": "ไฟล์ Intuit Interchange Format (IIF)",
|
||||
"Camt.052 Bank to Customer Statement File": "ไฟล์ Camt.052 รายงานธนาคารถึงลูกค้า",
|
||||
"Camt.053 Bank to Customer Statement File": "ไฟล์ Camt.053 รายงานธนาคารถึงลูกค้า",
|
||||
"MT940 Consumer Statement Message File": "ไฟล์ MT940 ข้อความรายการลูกค้า",
|
||||
"Delimiter-separated Values (DSV) File": "ไฟล์ DSV (ค่าแยกด้วยตัวคั่น)",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Ay-gün-yıl formatı",
|
||||
"Day-month-year format": "Gün-ay-yıl formatı",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) Dosyası",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 Banka Müşteri Ekstresi Dosyası",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Banka Müşteri Ekstresi Dosyası",
|
||||
"MT940 Consumer Statement Message File": "MT940 Müşteri Ekstre Mesajı Dosyası",
|
||||
"Delimiter-separated Values (DSV) File": "Ayırıcı ile Ayrılmış Değerler (DSV) Dosyası",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Формат місяць-день-рік",
|
||||
"Day-month-year format": "Формат день-місяць-рік",
|
||||
"Intuit Interchange Format (IIF) File": "Файл Intuit Interchange Format (IIF)",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||
"Delimiter-separated Values (DSV) File": "Файл із розділювачами значень (DSV)",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "Định dạng tháng-ngày-năm",
|
||||
"Day-month-year format": "Định dạng ngày-tháng-năm",
|
||||
"Intuit Interchange Format (IIF) File": "Tệp Intuit Interchange Format (IIF)",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 Bank to Customer Statement File",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 Bank to Customer Statement File",
|
||||
"MT940 Consumer Statement Message File": "MT940 Consumer Statement Message File",
|
||||
"Delimiter-separated Values (DSV) File": "Delimiter-separated Values (DSV) File",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "月-日-年 格式",
|
||||
"Day-month-year format": "日-月-年 格式",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) 文件",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 银行对账单文件",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 银行对账单文件",
|
||||
"MT940 Consumer Statement Message File": "MT940 客户对账消息文件",
|
||||
"Delimiter-separated Values (DSV) File": "分隔符分隔值 (DSV) 文件",
|
||||
|
||||
@@ -1981,6 +1981,7 @@
|
||||
"Month-day-year format": "月-日-年 格式",
|
||||
"Day-month-year format": "日-月-年 格式",
|
||||
"Intuit Interchange Format (IIF) File": "Intuit Interchange Format (IIF) 檔案",
|
||||
"Camt.052 Bank to Customer Statement File": "Camt.052 銀行對帳單檔案",
|
||||
"Camt.053 Bank to Customer Statement File": "Camt.053 銀行對帳單檔案",
|
||||
"MT940 Consumer Statement Message File": "MT940 客戶對帳訊息檔案",
|
||||
"Delimiter-separated Values (DSV) File": "分隔符分隔值 (DSV) 檔案",
|
||||
|
||||
Reference in New Issue
Block a user