29_timesheet-management #64

Merged
kfickel merged 9 commits from 29_timesheet-management into main 2026-04-02 18:17:37 +02:00

9 commits

Author SHA1 Message Date
d11a35c157
refactor(timesheet): use repeat() for separator lines and sort points before grouping
All checks were successful
Continuous Integration / Build Package (push) Successful in 25s
Continuous Integration / Lint, Check & Test (push) Successful in 41s
2026-04-02 17:07:36 +02:00
b51fb511ac
fix(timesheet): display zero hours as positive instead of negative zero 2026-04-02 17:07:06 +02:00
7bee32886f
feat(timesheet): sort months ascending so newest is at bottom 2026-04-02 17:06:28 +02:00
070a47e241
docs: add timesheet management documentation
Update README.md with:
- Repository configuration section for .streamd.toml
- Timesheet periods configuration example
- Description of timesheet report features

Update REQUIREMENTS.md with:
- R18a: Timesheet report configuration format
- R18b: Day type rules for expected/actual hours calculation
- R18c: Timesheet report warning types
- Updated R20 command description
2026-04-02 16:22:28 +02:00
ca43106486
feat(timesheet): add formatted report output to CLI
Replace CSV output with formatted table display showing:
- Monthly breakdown with expected/actual hours per day
- Day types (Regular, Sick Leave, Vacation, Holiday, Flex Day, etc.)
- Warning indicators for missing days and overlapping timecards
- Monthly summaries with total expected/actual hours
- Cumulative balance across all months
- Detailed warnings section at the end

Shows helpful message when no .streamd.toml configuration is found.
2026-04-02 16:22:27 +02:00
1a716f6d0e
feat(timesheet): add report generation logic
Implement the core report generation that:
- Loads .streamd.toml configuration
- Calculates expected hours based on periods and day types
- Calculates actual hours following day type rules:
  - Sick leave: max(expected, worked)
  - Vacation: expected + worked
  - Flex day: 0
  - Holiday: 0 expected
- Generates warnings for missing days, overlapping timecards,
  and work outside configured periods
- Calculates monthly and cumulative balances
- Sorts months in descending order
2026-04-02 16:22:26 +02:00
e0ba2cddf3
feat(timesheet): add overlap detection for timecards
Add find_overlapping_timecards function to detect overlapping time
ranges on the same day. This is used to generate warnings in the
timesheet report.
2026-04-02 16:22:25 +02:00
92ca364e55
feat(timesheet): add report data structures
Add DayReport, DayType, DayWarning, MonthReport, and TimesheetReport
structs for generating timesheet reports. These support:
- Day types (Regular, SickLeave, Vacation, Holiday, FlexDay, Weekend, Missing, OutsidePeriod)
- Warnings for missing days, overlapping timecards, and outside-period work
- Monthly and cumulative calculations
2026-04-02 16:22:24 +02:00
92c8e9712a
feat(timesheet): add configuration model with period validation
Add TimesheetConfig and Period structs for configuring timesheet
periods with expected working hours per week. Include RepositoryConfig
for loading .streamd.toml with timezone and timesheet configuration.

Validation ensures:
- No overlapping periods
- Valid date ranges (start <= end)

Also adds chrono-tz dependency for timezone support.
2026-04-02 16:22:21 +02:00