Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion PROJECTS.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 📋 Projekte - Payments System

**Status**: Production-ready
**Last Updated**: 2026-06-29
**Last Updated**: 2026-07-03

## 🔍 Recent Activity

Expand Down
2 changes: 1 addition & 1 deletion app/my_practice/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
VERSION = "v0.2.7"
VERSION = "v0.2.8"
2 changes: 1 addition & 1 deletion docker-compose.prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ services:
retries: 5

django:
image: ghcr.io/dholbach/my-practice:v0.2.7
image: ghcr.io/dholbach/my-practice:v0.2.8
container_name: my-practice-django
restart: unless-stopped
ports:
Expand Down
10 changes: 10 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

Major features and milestones in chronological order.

## 2026-07-03 — v0.2.8 patch release

- **Bug fix — capacity calculation**: Weighted capacity now correctly applies time off for periods spanning the 2023-08-01 capacity change (10h/week → 20h/week). Previously the `available_working_days` argument was silently ignored in that branch, causing time-off periods to have no effect on capacity for spanning periods; utilisation figures in quarter-trend and annual views were overstated.
- **Bug fix — quarterly tax revenue**: `tax_quarter_overview` and the dashboard tax widget now use the same paid-date rule as the year summary (`RevenueCalculator.build_paid_date_range_filter` — invoice-date fallback when `paid_date` is NULL). Previously invoices with no `paid_date` appeared in the year total but in no quarter. All four quarters now sum exactly to the year total; regression test added.
- **Centralisation**: Quarter boundaries (`DateRangeHelper.get_quarter_range` / `get_quarter_for_date`) replace three separate hand-rolled implementations across tax_views, dashboard_widgets, and practice_analysis.
- **Centralisation**: `_timeoff_dates_for_year()` module function in `practice_days.py` replaces three identical private methods across `PracticeDayCalculator`, `HomeOfficeDayCalculator`, and `WorkdayAuditCalculator`.
- **Centralisation**: Capacity monitoring widget now delegates month session-hours and revenue to `count_session_hours` / `RevenueCalculator.get_month_revenue`, ensuring paid-date consistency across all views.
- **Tests**: New `test_capacity_helpers.py`; expanded `test_date_helpers.py` (quarter helpers); `TaxQuarterOverviewConsistencyTest` in `test_views_tax.py`.
- **Docstring fix**: `DateRangeHelper.count_working_days` example corrected (had referenced a Saturday as a Friday).

## 2026-07-01 — v0.2.7 patch release

- **Dashboard redesign** (P-117): Replaced chart-heavy dashboard with an operational cockpit — stats strip (year revenue, profit, outstanding, time off), two-pane console (Heute agenda + Diese Woche focus on the left; Braucht Aktion queue on the right), quick-action buttons (+ Neue Rechnung / + Neue Klient:in).
Expand Down
1 change: 1 addition & 0 deletions docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ Complete feature list for the Therapy Practice Management System.
### Reports
- ✅ Tax Year Summary (Steuererklärung)
- ✅ Tax Year Summary: Home-Office-Pauschale (calendar-based non-practice weekdays minus holidays/time off), deduction row in Gewinn, improved link contrast
- ✅ Tax quarter overview: all four quarters now sum exactly to the year total — invoices with no `paid_date` fall into their `invoice_date` quarter (same fallback rule as the year summary)
- ✅ Revenue Report with filters
- ✅ Client detail reports
- ✅ Session reconciliation report
Expand Down
2 changes: 1 addition & 1 deletion prod.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import time
import urllib.request

VERSION = "v0.2.7" # updated each release — keeps prod.py and docker-compose.prod.yml in sync
VERSION = "v0.2.8" # updated each release — keeps prod.py and docker-compose.prod.yml in sync

COMPOSE_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "docker-compose.prod.yml")
COMPOSE = ["docker", "compose", "-f", COMPOSE_FILE]
Expand Down