diff --git a/account_statement_import_camt/models/account_statement_import_camt_parser.py b/account_statement_import_camt/models/account_statement_import_camt_parser.py
index 9d3ab9e682..a2baf39251 100644
--- a/account_statement_import_camt/models/account_statement_import_camt_parser.py
+++ b/account_statement_import_camt/models/account_statement_import_camt_parser.py
@@ -50,7 +50,7 @@ def add_value_from_node(self, ns, node, xpath_str, obj, attr_name, join_str=None
elif join_str is None:
attr_value = found_node[0].text
else:
- attr_value = join_str.join([x.text for x in found_node])
+ attr_value = join_str.join([x.text for x in found_node if x.text])
obj[attr_name] = attr_value
break
@@ -289,6 +289,7 @@ def parse_entry(self, ns, node):
"./ns:NtryDtls/ns:RmtInf/ns:Strd/ns:CdtrRefInf/ns:Ref",
"./ns:NtryDtls/ns:Btch/ns:PmtInfId",
"./ns:NtryDtls/ns:TxDtls/ns:Refs/ns:AcctSvcrRef",
+ "./ns:AcctSvcrRef",
],
transaction,
"ref",
@@ -337,12 +338,21 @@ def parse_entry(self, ns, node):
details_nodes = node.xpath("./ns:NtryDtls/ns:TxDtls", namespaces={"ns": ns})
if len(details_nodes) == 0:
+ self.add_value_from_node(
+ ns, node, "./ns:AddtlNtryInf", transaction, "payment_ref"
+ )
self.generate_narration(transaction)
yield transaction
return
transaction_base = transaction
for node in details_nodes:
transaction = transaction_base.copy()
+ transaction["narration"] = transaction_base["narration"].copy()
+ detail_amount = self.parse_amount(ns, node)
+ if detail_amount != 0.0:
+ transaction["amount"] = detail_amount
+ elif len(details_nodes) == 1 and node.tag.endswith("TxDtls"):
+ transaction["amount"] = amount
self.parse_transaction_details(ns, node, transaction)
self.generate_narration(transaction)
yield transaction
@@ -450,7 +460,7 @@ def parse(self, data):
root = None
if root is None:
raise ValueError("Not a valid xml file, or not an xml file at all.")
- ns = root.tag[1 : root.tag.index("}")]
+ ns = root.tag[1 : root.tag.index("}")] if "}" in root.tag else ""
self.check_version(ns, root)
statements = []
currency = None
diff --git a/account_statement_import_camt/tests/samples/golden-camt053-txdtls.pydata b/account_statement_import_camt/tests/samples/golden-camt053-txdtls.pydata
index ed46eb9227..e14f53a8c2 100644
--- a/account_statement_import_camt/tests/samples/golden-camt053-txdtls.pydata
+++ b/account_statement_import_camt/tests/samples/golden-camt053-txdtls.pydata
@@ -41,4 +41,20 @@
'partner_name': 'Banque Cantonale Vaudoise',
'payment_ref': '/',
'ref': '302388292000022222222222222',
- 'transaction_type': 'PMNT-RCDT-VCOM'}]}])
+ 'transaction_type': 'PMNT-RCDT-VCOM'},
+ {'account_number': 'CH4444000000123456789',
+ 'amount': 50.0,
+ 'date': '2017-03-22',
+ 'narration': 'Partner Name (RltdPties/Nm): Single Detail Debtor\n'
+ 'Partner Account Number (RltdPties/Acct): CH4444000000123456789\n'
+ 'Transaction Date (BookgDt): 2017-03-22\n'
+ 'Reference: ENTRY-FALLBACK-REF\n'
+ 'Communication: \n'
+ 'Transaction Type (BkTxCd): \n'
+ 'Additional Entry Information (AddtlNtryInf): ENTRY INFO SHOULD STAY IN NARRATION ONLY\n'
+ 'Unstructured Reference (RmtInf/Ustrd): REM-ONE\n'
+ 'Postal Address (PstlAdr): Address line 1',
+ 'partner_name': 'Single Detail Debtor',
+ 'payment_ref': 'REM-ONE',
+ 'ref': 'ENTRY-FALLBACK-REF',
+ 'transaction_type': ''}]}])
diff --git a/account_statement_import_camt/tests/samples/test-camt053-txdtls b/account_statement_import_camt/tests/samples/test-camt053-txdtls
index cf7c38f2bd..5101d7b849 100644
--- a/account_statement_import_camt/tests/samples/test-camt053-txdtls
+++ b/account_statement_import_camt/tests/samples/test-camt053-txdtls
@@ -209,6 +209,37 @@
CRÉDIT GROUPÉ BVR TRAITEMENT DU 22.03.2017 NUMÉRO CLIENT 01-70884-3 PAQUET ID: 123456CHCAFEBABE
+
+ 50.00
+ CRDT
+
+ 2017-03-22
+
+ ENTRY-FALLBACK-REF
+
+
+
+
+ Single Detail Debtor
+
+
+ Address line 1
+
+
+
+
+ CH4444000000123456789
+
+
+
+
+
+ REM-ONE
+
+
+
+ ENTRY INFO SHOULD STAY IN NARRATION ONLY
+