ynab-csv-nordea-cli
Version:
Convert Nordea CSV files to YNAB compatible CSV files
100 lines (83 loc) • 2.72 kB
JavaScript
const moment = require('moment');
moment().format();
var exports = module.exports = {};
function getPayee(text) {
var textArr = text.replace(/Den \d{2}\.\d{2}/, '').split(/\s{2,}/);
var firstPart = textArr[0];
// Mobile pay transaction
if(/MobilePay/.test(firstPart)) {
var to = firstPart.split(': ');
return to.length == 2 ? "Mobilepay : " + to[1] : ("Mobilepay" + (firstPart.includes("Edankort") ? " : Butik" : ""));
}
// Dankort buy
if(/^Dankort-nota/.test(firstPart)) {
var payee = firstPart.replace("Dankort-nota ", "");
return payee;
}
// Visa buy
if(/^Visa køb/.test(firstPart)) {
var amount = textArr[1];
var payee = textArr[2] + " " + textArr[3];
return payee;
}
// Visa kontant hævning
if(/^Visa udbetaling/.test(firstPart)) {
return "Transfer : cash";
}
// Transfer from other Nordea client
if(/^Fra/.test(firstPart)) {
return "you";
}
// Gebyrer renter og andet
if(/gebyr|afkast|Tilbageført|renter/i.test(firstPart) || /^Pris/i.test(firstPart)) {
return "Nordea";
}
// Betalingsservice
if(/^Bs betaling/.test(firstPart)) {
var account = firstPart.replace("Bs betaling ", "").replace("From ", "");
return "Transfer : " + account;
}
// Penge retur
if(/^Visa modpostering/.test(firstPart)) {
var payee = textArr[2];
return payee;
}
// Transfer to other account
if(textArr.length === 1 || /^Bgs/.test(firstPart)) {
var account = firstPart.replace("Bgs ", "").replace("From ", "");
return "Transfer : " + account;
}
if(/løn/i.test(firstPart)) {
return "Employer";
}
return "";
}
function getDate(date, text) {
var newDate = date;
// See if we can find a more exact date
if(/Den \d{2}\.\d{2}(.?)+/.test(text)) {
var dateData = text.match(/Den (\d{2})\.(\d{2})/);
var day = dateData[1];
var month = dateData[2];
newDate = day + "-" + month + "-" + date.substring(date.length-4);
}
return moment(newDate, ["DD-MM-YYYY"], 'da').format('YYYY/MM/DD')
}
exports.nordea = ({ Date, Text, Amount }) => {
let date = getDate(Date, Text);
let payee = getPayee(Text).trim();
let category = "";
let memo = "";
let amount = Amount.replace(',', '.');
let isOutflow = /-\d+/.test(amount);
let outflow = isOutflow ? amount.replace('-', '') : '';
let inflow = !isOutflow ? amount : '';
return {
Date: date,
Payee: payee,
Category: category,
Memo: memo,
Outflow: outflow,
Inflow: inflow
};
}