64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import { categorize, roundEur } from "../lib/categorize";
|
|
import { resolveAssignedAndEffective, type SalaryShiftSettings } from "../lib/month";
|
|
import type { NormalizedTransaction } from "./types";
|
|
|
|
export type FintsStatementTransaction = {
|
|
valueDate: Date;
|
|
entryDate: Date;
|
|
amount: number;
|
|
transactionType: string;
|
|
bankReference: string;
|
|
bookingText?: string;
|
|
purpose?: string;
|
|
remoteName?: string;
|
|
customerReference?: string;
|
|
};
|
|
|
|
export function formatFinTsDate(date: Date): string {
|
|
const y = date.getFullYear();
|
|
const m = String(date.getMonth() + 1).padStart(2, "0");
|
|
const d = String(date.getDate()).padStart(2, "0");
|
|
return `${y}-${m}-${d}`;
|
|
}
|
|
|
|
export function mapFinTsTransaction(
|
|
tx: FintsStatementTransaction,
|
|
ownNames: string[],
|
|
salaryShift: SalaryShiftSettings,
|
|
): Omit<NormalizedTransaction, "externalRef"> & {
|
|
categoryName: string;
|
|
assignedMonth?: string;
|
|
effectiveMonth?: string;
|
|
externalRef?: string;
|
|
} {
|
|
const amount = roundEur(tx.amount);
|
|
const rawText = [tx.purpose, tx.bookingText, tx.transactionType].filter(Boolean).join(" ");
|
|
const counterparty = tx.remoteName || undefined;
|
|
const description = counterparty ?? (rawText.slice(0, 80) || "Umsatz");
|
|
const vorgang = tx.transactionType || tx.bookingText;
|
|
const bookingDate = formatFinTsDate(tx.entryDate);
|
|
const valueDate = formatFinTsDate(tx.valueDate);
|
|
const categoryName = categorize(rawText, amount, vorgang ?? "", ownNames);
|
|
const { assignedMonth, effectiveMonth } = resolveAssignedAndEffective(
|
|
bookingDate,
|
|
amount,
|
|
categoryName,
|
|
salaryShift,
|
|
);
|
|
|
|
return {
|
|
bookingDate,
|
|
valueDate,
|
|
description,
|
|
counterparty,
|
|
amount,
|
|
vorgang,
|
|
isPending: false,
|
|
rawText: rawText || undefined,
|
|
externalRef: tx.bankReference || tx.customerReference || undefined,
|
|
categoryName,
|
|
assignedMonth,
|
|
effectiveMonth,
|
|
};
|
|
}
|