diff --git a/docs/ARCHITEKTUR.md b/docs/ARCHITEKTUR.md
index a786be7..89cffde 100644
--- a/docs/ARCHITEKTUR.md
+++ b/docs/ARCHITEKTUR.md
@@ -28,7 +28,7 @@ flowchart TD
R_categories["categories.py
list_categories, create_category_rule"]
R_imports["imports.py
upload, scan_inbox, preview,
confirm, rollback"]
R_planning["planning.py
list_recurring, list_planned,
list_loans, recurring_suggestions"]
- R_scenarios["scenarios.py
create_scenario, add_modifier,
project_scenario"]
+ R_scenarios["scenarios.py
create_scenario, add_modifier,
add_scenario_recurring,
project_scenario"]
R_admin["admin.py
admin_page, admin_change_password,
apply_category_rules"]
end
@@ -47,10 +47,10 @@ flowchart TD
N_reserved["app/reserved.py
check_reserved_name"]
subgraph ENGINE["engine/ (rein, kein DB-Zugriff)"]
- E_loans["loans.py
loan_schedule, annuity_payment, add_months"]
+ E_loans["loans.py
loan_schedule, schedule_for,
annuity_payment, add_months"]
E_recurrence["recurrence.py
occurrences"]
E_projection["projection.py
project"]
- E_scenario["scenario.py
build_cashflows (PlainRecurring/
PlainPlanned/PlainModifier)"]
+ E_scenario["scenario.py
build_cashflows, modified_amount
(Stichtag on, gilt_am)
PlainRecurring/PlainPlanned/
PlainModifier"]
E_breakdown["breakdown.py
breakdown_rows, summarize,
category_rows, share"]
E_pie["pie.py
pie_slices"]
end
@@ -67,9 +67,9 @@ flowchart TD
end
subgraph MODELS["models/ + alembic/"]
- M_tables["tables.py
Account, Statement, Transaction,
RecurringItem, PlannedItem, Loan,
Scenario, ProjectionResult, ..."]
+ M_tables["tables.py
Account, Statement, Transaction,
RecurringItem, PlannedItem, Loan,
Scenario, ScenarioRecurringItem,
ProjectionResult, ..."]
M_views["views.py — create_views()
v_balance_history, v_balance_total,
v_monthly_by_category, v_projection"]
- M_alembic["alembic/versions
b2b1f5a18a74_initial_schema
1ef6a356f028_konto_anker"]
+ M_alembic["alembic/versions
b2b1f5a18a74_initial_schema
1ef6a356f028_konto_anker
e7f1a9c3b214_szenario_zeitraum"]
end
R_gui --> T_pages
@@ -326,9 +326,27 @@ Ausgaben sind einfache Dataclasses (`Installment`, `PlainRecurring`,
ist die einzige Brücke: `load_scenario_inputs(session, scenario)` ist die
gemeinsame Ladefunktion (`None` = System-Plan, ohne Szenario-Änderungen)
und lädt ORM-Objekte (`Loan`, `RecurringItem`,
-`PlannedItem`, `Scenario`, `ScenarioModifier`), baut daraus die Plain-Objekte
+`PlannedItem`, `Scenario`, `ScenarioModifier`, `ScenarioRecurringItem` — Letztere
+als `PlainRecurring` mit `id=None`), baut daraus die Plain-Objekte
und ruft `engine.scenario.build_cashflows` → `engine.projection.project`.
+**Szenario-Einträge mit Zeitraum (Ausbaustufe 14).** `ScenarioModifier.start_date`/
+`end_date` sind „Gültig ab/bis" (inklusiv, leer = unbegrenzt; bei Art `ende`
+zählt nur `end_date` als Enddatum). Neue Art `set` („Neuer Betrag", nur für
+Posten) ersetzt den Betrag. `engine.scenario.modified_amount(..., on=)` wertet
+die Einträge mit einem Stichtag je Fälligkeit aus — `build_cashflows` nimmt
+jedes Fälligkeitsdatum, `engine.breakdown.breakdown_rows` über
+`engine.recurrence.due_in_month` das Fälligkeitsdatum im Monat; `gilt_am`
+prüft den Zeitraum, mehrere treffende Einträge wirken in Anlage-Reihenfolge.
+`ScenarioRecurringItem` (Tabelle `scenario_recurring_items`, API
+`/api/scenarios/{id}/recurring`) sind wiederkehrende Zahlungen nur in einem
+Szenario: sie zählen unabhängig von `include_recurring` und werden von
+Posten-Einträgen nie getroffen (`PlainRecurring.id=None`).
+`ScenarioPlannedItem.category_id` ordnet Szenario-Einmalzahlungen einer
+Kategorie zu. Die Szenarien-Seite (`szenarien.html`) nutzt dafür
+`static/szenarien.js` (`window.FBSzenario`). Migration:
+`e7f1a9c3b214_szenario_zeitraum`.
+
**`v_projection` (Ausbaustufe 11) — System-Ist + Szenarien ab heute.**
`models/views.py::VIEWS["v_projection"]` liefert für den Grafana-Szenario-
Vergleich drei Teile in einer Tabelle: die Ist-Gesamtsaldo-Serie unter dem
diff --git a/finance/VERSION b/finance/VERSION
index 092a790..ff745ae 100644
--- a/finance/VERSION
+++ b/finance/VERSION
@@ -1 +1 @@
-0.13.1
+0.14.0
diff --git a/finance/app/templates/hilfe.html b/finance/app/templates/hilfe.html
index c7ecac3..6bec852 100644
--- a/finance/app/templates/hilfe.html
+++ b/finance/app/templates/hilfe.html
@@ -67,16 +67,26 @@