@fuzzle/opencode-accountant 0.10.5 → 0.10.6
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/dist/index.js +37 -19
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -17408,16 +17408,22 @@ function parseCSVPreview(content, skipRows = 0, delimiter = ",") {
|
|
|
17408
17408
|
csvContent = lines.slice(skipRows).join(`
|
|
17409
17409
|
`);
|
|
17410
17410
|
}
|
|
17411
|
-
const
|
|
17412
|
-
|
|
17413
|
-
|
|
17414
|
-
|
|
17415
|
-
|
|
17416
|
-
|
|
17417
|
-
|
|
17418
|
-
|
|
17419
|
-
|
|
17420
|
-
|
|
17411
|
+
const origWarn = console.warn;
|
|
17412
|
+
console.warn = () => {};
|
|
17413
|
+
try {
|
|
17414
|
+
const result = import_papaparse.default.parse(csvContent, {
|
|
17415
|
+
header: true,
|
|
17416
|
+
preview: 1,
|
|
17417
|
+
skipEmptyLines: true,
|
|
17418
|
+
delimiter
|
|
17419
|
+
});
|
|
17420
|
+
return {
|
|
17421
|
+
fields: result.meta.fields,
|
|
17422
|
+
firstRow: result.data[0]
|
|
17423
|
+
};
|
|
17424
|
+
} finally {
|
|
17425
|
+
console.warn = origWarn;
|
|
17426
|
+
}
|
|
17421
17427
|
}
|
|
17422
17428
|
function extractLastRowField(content, skipRows, delimiter, fieldName) {
|
|
17423
17429
|
let csvContent = content;
|
|
@@ -17427,11 +17433,18 @@ function extractLastRowField(content, skipRows, delimiter, fieldName) {
|
|
|
17427
17433
|
csvContent = lines.slice(skipRows).join(`
|
|
17428
17434
|
`);
|
|
17429
17435
|
}
|
|
17430
|
-
const
|
|
17431
|
-
|
|
17432
|
-
|
|
17433
|
-
|
|
17434
|
-
|
|
17436
|
+
const origWarn = console.warn;
|
|
17437
|
+
console.warn = () => {};
|
|
17438
|
+
let result;
|
|
17439
|
+
try {
|
|
17440
|
+
result = import_papaparse.default.parse(csvContent, {
|
|
17441
|
+
header: true,
|
|
17442
|
+
skipEmptyLines: true,
|
|
17443
|
+
delimiter
|
|
17444
|
+
});
|
|
17445
|
+
} finally {
|
|
17446
|
+
console.warn = origWarn;
|
|
17447
|
+
}
|
|
17435
17448
|
if (result.data.length === 0)
|
|
17436
17449
|
return;
|
|
17437
17450
|
const lastRow = result.data[result.data.length - 1];
|
|
@@ -25006,11 +25019,16 @@ function escapeDescription(desc) {
|
|
|
25006
25019
|
function formatQuantity(qty) {
|
|
25007
25020
|
return qty.toFixed(6).replace(/\.?0+$/, "");
|
|
25008
25021
|
}
|
|
25022
|
+
function formatPrice(price) {
|
|
25023
|
+
const full = price.toFixed(6).replace(/0+$/, "");
|
|
25024
|
+
const [integer2, decimal = ""] = full.split(".");
|
|
25025
|
+
return `${integer2}.${decimal.padEnd(2, "0")}`;
|
|
25026
|
+
}
|
|
25009
25027
|
function generateBuyEntry(trade, logger) {
|
|
25010
25028
|
const date5 = formatDate(trade.date);
|
|
25011
25029
|
const description = escapeDescription(`Buy ${trade.symbol} - ${trade.name}`);
|
|
25012
25030
|
const qty = formatQuantity(trade.quantity);
|
|
25013
|
-
const price = trade.unitPrice
|
|
25031
|
+
const price = formatPrice(trade.unitPrice);
|
|
25014
25032
|
const totalCost = trade.quantity * trade.unitPrice;
|
|
25015
25033
|
const fees = trade.costs;
|
|
25016
25034
|
const cashOut = totalCost + fees;
|
|
@@ -25043,12 +25061,12 @@ function generateSellEntry(trade, consumed, logger) {
|
|
|
25043
25061
|
`;
|
|
25044
25062
|
entry += ` ; swissquote:order:${trade.orderNum} isin:${trade.isin}
|
|
25045
25063
|
`;
|
|
25046
|
-
const lotDetails = consumed.map((c) => `${c.lot.date}: ${formatQuantity(c.quantity)}@${c.lot.costBasis
|
|
25064
|
+
const lotDetails = consumed.map((c) => `${c.lot.date}: ${formatQuantity(c.quantity)}@${formatPrice(c.lot.costBasis)}`).join(", ");
|
|
25047
25065
|
entry += ` ; FIFO lots: ${lotDetails}
|
|
25048
25066
|
`;
|
|
25049
25067
|
for (const c of consumed) {
|
|
25050
25068
|
const lotQty = formatQuantity(c.quantity);
|
|
25051
|
-
const lotPrice = c.lot.costBasis
|
|
25069
|
+
const lotPrice = formatPrice(c.lot.costBasis);
|
|
25052
25070
|
entry += ` assets:investments:stocks:${trade.symbol} -${lotQty} @ ${lotPrice} ${trade.currency}
|
|
25053
25071
|
`;
|
|
25054
25072
|
}
|
|
@@ -25122,7 +25140,7 @@ function generateWorthlessEntry(action, removedLots, logger) {
|
|
|
25122
25140
|
`;
|
|
25123
25141
|
for (const lot of removedLots) {
|
|
25124
25142
|
const qty = formatQuantity(lot.quantity);
|
|
25125
|
-
const price = lot.costBasis
|
|
25143
|
+
const price = formatPrice(lot.costBasis);
|
|
25126
25144
|
entry += ` assets:investments:stocks:${action.symbol} -${qty} @ ${price} ${currency}
|
|
25127
25145
|
`;
|
|
25128
25146
|
}
|