# Output Format ## timesheet_data.json (written by preprocess.py) Machine-readable intermediate file with all fetched and computed data. ```json { "period": { "start": "2026-06-16", "end": "2026-06-20", "label": "last week", "working_days": ["2026-06-16", "2026-06-17", "2026-06-18", "2026-06-19", "2026-06-20"], "working_day_count": 5 }, "summary": { "total_employees": 3, "total_expected_hours": 120, "total_reported_hours": 96.5, "overall_completion_pct": 80.4, "employees_fully_complete": 1, "employees_with_gaps": 2 }, "employees": [ { "name": "Jan Kowalski", "account_id": "557058:aaaa...", "expected_hours": 40, "reported_hours": 32.5, "missing_hours": 7.5, "completion_pct": 81.3 } ] } ``` Field notes: - `employees` is sorted by `missing_hours` descending — the employee furthest behind appears first. - `completion_pct` = `reported_hours / expected_hours × 100`. Can exceed 100 if overtime was logged. - `missing_hours` = `max(0, expected_hours - reported_hours)`. - Working days exclude weekends and Polish public holidays fetched from date.nager.at. ## timesheet_report.md (written by postprocess.py) Manager-readable markdown report containing: - Period details (dates, working day count) - Summary block: expected total, reported total, overall completion % - Employee table ranked by missing hours (most behind first) - Completion badges: ✓ complete, ⚠ below 75%, ⚠⚠ below 50%