fix: Final-Review A14 – Beispielbetrag ersetzt, Vorzeichen-Hinweis Neuer Betrag, Laufzeit max 1200, Mermaid

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-30 13:39:05 +02:00
co-authored by Claude Opus 5.5
parent eb68781a1d
commit d51287e8d8
5 changed files with 33 additions and 4 deletions
+1 -1
View File
@@ -179,7 +179,7 @@ sequenceDiagram
IM->>IM: _find_or_create_account(bank, iban)
IM->>DB: INSERT Statement(status="draft")
opt Saldo pruefbar (PDF immer; CSV nur VR: balance_checkable=True)
opt Saldo pruefbar (PDF immer, CSV nur VR: balance_checkable=True)
IM->>VA: balance_difference(parsed)
Note right of IM: Differenz != 0 -> Statement.status="error", Abbruch
end
+10 -1
View File
@@ -40,7 +40,16 @@
var form = select.closest('form');
var art = select.value;
var mitWert = Object.prototype.hasOwnProperty.call(WERT_LABEL, art);
sperren(feld(form, 'value'), !mitWert);
var wert = feld(form, 'value');
sperren(wert, !mitWert);
if (art === 'set') {
// Vorzeichenfalle: Ausgaben sind negativ (wie Fixposten-Beträge).
wert.placeholder = '-250,00';
wert.title = 'Neuer Betrag mit Vorzeichen (Ausgabe negativ)';
if (wert.value === '0') { wert.value = ''; }
} else {
wert.removeAttribute('placeholder');
}
beschriften(form, 'value-label', mitWert ? WERT_LABEL[art] : 'Wert');
sperren(feld(form, 'start_date'), art === 'ende');
beschriften(form, 'bis-label', art === 'ende' ? 'Endet am' : 'Gültig bis');
+2 -2
View File
@@ -221,7 +221,7 @@
<label>Name <input type="text" name="name" value="{{ l.name }}" required></label>
<label>Darlehenssumme <input type="text" name="principal" data-type="amount" value="{{ l.principal|eur }}" required></label>
<label>Zins p.a. (%) <input type="text" name="annual_rate_pct" data-type="amount" value="{{ l.annual_rate_pct|eur }}" required></label>
<label>Laufzeit (Monate) <input type="number" name="term_months" data-type="int" min="1" value="{{ l.term_months }}" required></label>
<label>Laufzeit (Monate) <input type="number" name="term_months" data-type="int" min="1" max="1200" value="{{ l.term_months }}" required></label>
<label>Auszahlungsdatum <input type="date" name="payout_date" value="{{ l.payout_date.isoformat() }}" required></label>
<label>Tilgungsart
<select name="repayment_type" data-type="str">
@@ -254,7 +254,7 @@
<label>Name <input type="text" name="name" required></label>
<label>Darlehenssumme <input type="text" name="principal" data-type="amount" placeholder="10000,00" required></label>
<label>Zins p.a. (%) <input type="text" name="annual_rate_pct" data-type="amount" placeholder="4,5" required></label>
<label>Laufzeit (Monate) <input type="number" name="term_months" data-type="int" min="1" required></label>
<label>Laufzeit (Monate) <input type="number" name="term_months" data-type="int" min="1" max="1200" required></label>
<label>Auszahlungsdatum <input type="date" name="payout_date" required></label>
<label>Tilgungsart
<select name="repayment_type" data-type="str">
+10
View File
@@ -75,6 +75,16 @@ test('Neuer Betrag: Ziel-Typ fest auf Posten, Kategorie gesperrt', { skip: !JSDO
assert.equal(typ.querySelector('option[value="category"]').disabled, false);
});
test('Neuer Betrag: Vorzeichen-Hinweis als Platzhalter und Tooltip', { skip: !JSDOM }, () => {
const { w, a } = load();
art(w, a, 'set');
assert.equal(f(a, 'value').placeholder, '-250,00');
assert.ok(f(a, 'value').title.includes('Vorzeichen'));
art(w, a, 'percent');
assert.equal(f(a, 'value').placeholder, '');
assert.equal(f(a, 'value').hasAttribute('title'), false);
});
test('Ende: Gültig ab und Wert gesperrt, Label Endet am', { skip: !JSDOM }, () => {
const { w, a } = load();
art(w, a, 'ende');
+10
View File
@@ -705,3 +705,13 @@ def test_szenario_eintraege_zeitraum_und_wiederkehrend(client, db):
assert f'hx-delete="/api/scenarios/{sc.id}/recurring/' in r
assert "Kat-Anzeige" in r and "Zahlung-E" in r
assert 'id="sri-row-' in r and 'id="sri-edit-' in r
def test_planung_laufzeit_felder_haben_max_1200(client, db):
client.post("/login", data={"username": "admin", "password": "geheim"})
db.add(Loan(name="MaxL", principal=Decimal("1000.00"),
annual_rate_pct=Decimal("4.50"), term_months=12,
payout_date=date(2026, 8, 1), repayment_type="annuity"))
db.commit()
r = client.get("/planung").text
assert r.count('max="1200"') >= 2