fix: Revolut-Import wertet Gebühr, Status und Währung aus
Das Revolut-Preset kannte die Spalten Gebühr/Währung/Status laut Kommentar, der Parser hat sie aber nie gelesen. Folgen: Gebühren fehlten im Saldo, stornierte (REVERTED) und schwebende Zeilen wurden mitgebucht, und Zeilen fremder Währungs-Pockets landeten 1:1 im Konto – der Saldo lief dadurch zu hoch. - Gebührenspalte mindert den Betrag (immer als Kosten) - nur Zeilen mit Status COMPLETED (oder ohne Statusspalte) sind buchbar - Zeilen in anderer Währung als das Zielkonto werden nicht gebucht - Grund wird in der Prüfansicht als Badge angezeigt (storniert / Währung) - Gebühr/Währung/Status in der Spaltenzuordnung wählbar; Revolut-Preset ergänzt - Test mit echtem Revolut-Format (Gebühr, Storno, Fremdwährung), 80 grün Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -323,7 +323,13 @@
|
||||
"undoConfirm": "Alle Buchungen aus {{file}} wieder entfernen?",
|
||||
"undone": "rückgängig gemacht",
|
||||
"needFile": "Bitte zuerst eine CSV-Datei wählen.",
|
||||
"needFileAccount": "Bitte Konto und Datei wählen."
|
||||
"needFileAccount": "Bitte Konto und Datei wählen.",
|
||||
"colFee": "Gebühr",
|
||||
"colCurrency": "Währung",
|
||||
"colState": "Status",
|
||||
"extraColsHint": "Gebühr wird vom Betrag abgezogen. Zeilen mit Status ungleich COMPLETED (z. B. storniert) und Zeilen in einer anderen Währung als das Zielkonto werden nicht gebucht.",
|
||||
"skipState": "storniert",
|
||||
"skipCurrency": "andere Währung"
|
||||
},
|
||||
"password": {
|
||||
"show": "Passwort anzeigen",
|
||||
|
||||
@@ -323,7 +323,13 @@
|
||||
"undoConfirm": "Remove all transactions from {{file}}?",
|
||||
"undone": "undone",
|
||||
"needFile": "Please choose a CSV file first.",
|
||||
"needFileAccount": "Please choose an account and a file."
|
||||
"needFileAccount": "Please choose an account and a file.",
|
||||
"colFee": "Fee",
|
||||
"colCurrency": "Currency",
|
||||
"colState": "State",
|
||||
"extraColsHint": "The fee is deducted from the amount. Rows whose state is not COMPLETED (e.g. reverted) and rows in a currency other than the target account are not imported.",
|
||||
"skipState": "reverted",
|
||||
"skipCurrency": "other currency"
|
||||
},
|
||||
"password": {
|
||||
"show": "Show password",
|
||||
|
||||
@@ -248,6 +248,12 @@ export default function Import() {
|
||||
{r.payee || r.purpose || ""}
|
||||
{r.is_duplicate && <span className="badge" style={{ marginLeft: 6 }}>{t("import.duplicate")}</span>}
|
||||
{r.is_counterpart && <span className="badge" style={{ marginLeft: 6 }}>{t("import.counterpart")}</span>}
|
||||
{r.skip_reason === "state" && (
|
||||
<span className="badge" style={{ marginLeft: 6 }}>{r.state || t("import.skipState")}</span>
|
||||
)}
|
||||
{r.skip_reason === "currency" && (
|
||||
<span className="badge" style={{ marginLeft: 6 }}>{r.row_currency || t("import.skipCurrency")}</span>
|
||||
)}
|
||||
</span>
|
||||
),
|
||||
},
|
||||
@@ -484,14 +490,22 @@ export default function Import() {
|
||||
<summary className="muted small">{t("import.moreColumns")}</summary>
|
||||
<p className="muted small">{t("import.ibanHint")}</p>
|
||||
<div className="map-grid">
|
||||
<label>
|
||||
<span>{t("import.colIban")}</span>
|
||||
<select value={config.column_map.counterparty_iban ?? ""} onChange={(e) => setCol("counterparty_iban", e.target.value)}>
|
||||
<option value="">—</option>
|
||||
{colOptions.map((c) => <option key={c.i} value={c.i}>{c.label}</option>)}
|
||||
</select>
|
||||
</label>
|
||||
{[
|
||||
["counterparty_iban", t("import.colIban")],
|
||||
["fee", t("import.colFee")],
|
||||
["currency", t("import.colCurrency")],
|
||||
["state", t("import.colState")],
|
||||
].map(([field, label]) => (
|
||||
<label key={field}>
|
||||
<span>{label}</span>
|
||||
<select value={config.column_map[field] ?? ""} onChange={(e) => setCol(field, e.target.value)}>
|
||||
<option value="">—</option>
|
||||
{colOptions.map((c) => <option key={c.i} value={c.i}>{c.label}</option>)}
|
||||
</select>
|
||||
</label>
|
||||
))}
|
||||
</div>
|
||||
<p className="muted small">{t("import.extraColsHint")}</p>
|
||||
</details>
|
||||
|
||||
<div className="field-inline" style={{ marginTop: "var(--sp-3)" }}>
|
||||
|
||||
Reference in New Issue
Block a user