Timesheets
DCAA-style time entry by project + contract — no separate timekeeping tool for cleared staffing.
Hand a cleared candidate a weekly timesheet they can fill out in the same app where they applied. Per-day, per-project, billable-or-not, with an audit trail that survives a government audit. No more cobbling Replicon or Unanet onto your ATS.
What you get
Built to solve the actual problems hiring teams hit every day.
Weekly grid by default
Monday-start weeks with per-day buckets. Click a day to focus the entry form on it.
Project + contract tagging
Tag every entry with a project code and contract number. Roll-up by either becomes trivial.
Billable / non-billable split
Total hours, billable hours, and the delta are all visible at a glance — what you bill the prime is one query away.
Submit → approve → reopen workflow
Owner submits; client/admin approves or rejects with a reason. Approved periods are locked from edits; reject reopens them.
DCAA employee certification at submit
A mandatory, timestamped "I certify" attestation is captured every time an employee submits — the exact statement text, who affirmed it, and when are stored on the period and surfaced read-only to approvers and auditors. The statement is a per-org configurable, DCAA-flavored default. Reopening a period clears it so a re-submit forces a fresh certification.
DCAA supervisor certification at approve
The approval leg of the same control: a manager can't silently flip a timesheet to approved — they must affirm a supervisory "I certify I reviewed this time" statement, and the exact wording, the approver, and the timestamp are stored on the period and shown read-only next to the employee's attestation. So an auditor sees both required DCAA certifications — employee and supervisor — on every timecard, not just who clicked approve. The statement is a per-org configurable default; rejecting or reopening the period clears it so a re-approval forces a fresh attestation.
Total-time-accounting completeness gate
Floor-check-ready: HR blocks a timesheet from being submitted until every scheduled workday in the period is accounted for. Empty periods, unaccounted workdays, and days short of or over the expected hours are flagged per-day live in the grid and rejected server-side at submit. Expected hours default to 8h/weekday and are overridable per period for part-time or exempt staff. A client/admin can force-submit an incomplete period with an explicit override that is written to the audit log.
Audit trail on every transition
certified_by/at, submitted_by/at, approved_by/at, rejected_by/at, rejection_reason — every state change is captured for DCAA.
DCAA correction trail
Every timesheet edit and deletion keeps the original hours, the change, who made it, and why. Corrections are in-place, never delete-and-re-add — nothing gets erased silently.
Team approvals rollup
A manager view at /timesheets/approvals aggregates every contractor: a "waiting on you" approval inbox, who hasn't submitted yet, billable hours by contract, a correction ledger, and a one-click CSV export for billing.
Labor distribution & uncompensated-OT report
See how each employee's recorded time splits across charge codes and contracts, with an uncompensated-overtime dilution factor for exempt staff (planning estimate, not a certified rate). For every period, the report groups recorded hours by authorized charge code (falling back to the project/contract snapshot when a code isn't set) and shows each code's share as a % of the employee's total recorded hours — the labor distribution indirect-rate accuracy depends on. It also compares total recorded hours to the standard workweek (expected daily hours × scheduled weekdays) and derives the uncompensated-overtime dilution factor (standard ÷ recorded, e.g. 40/50 = 0.80) that shows how much an exempt employee's effective per-hour cost is diluted when they log beyond the standard week. Org/period-range roll-up + CSV export. Read-only, computed entirely from hours you already record — no new data entry.
Automated DCAA floor-check readiness
A daily sweep detects employees who have fallen behind on daily / contemporaneous time entry — elapsed workdays with zero recorded hours in an open period — and nudges them automatically (in-app + email), plus fires a timesheet.delinquent webhook to your compliance channel. Managers get a "Behind on daily entry" panel listing exactly who is behind and which dates. Contemporaneous recording stops being an honor system and becomes an enforced, auditable one — HR flags it before an auditor does. Respects a configurable workweek (default Mon–Fri) and a grace window so today is never flagged, and dedupes so an employee is nudged once per day.
Company & federal holiday calendar
Mark your paid holidays once — one-click seeding fills in the 11 U.S. OPM federal holidays for any year (with observed-day shifting, e.g. a Saturday July 4th observed the preceding Friday) and you add company-specific days alongside. Every date on the calendar is treated exactly like a weekend by the total-time-accounting completeness gate and the daily floor-check monitor: it is never a required workday, so a zero-hours holiday no longer blocks a timesheet submit or nudges an employee to log time on Thanksgiving. Per-org and opt-in; re-seeding a year is idempotent, never duplicating a date.
How it works
Four steps from setup to value.
Owner starts the week
On /timesheets, click "Start this week". A draft period for Mon–Sun is created.
Add entries per day
Pick a date, enter hours, project, contract, task. Hours roll up by day and total automatically.
Submit for approval
When the week is done, click "Submit". Status flips to submitted; managers see it in their queue.
Manager approves or rejects
Client/admin reviews the entries and approves (locks) or rejects with a reason (reopens to draft).
Roll up the whole team
On /timesheets/approvals, approve submitted weeks from one inbox, see who owes a timesheet, and export billable hours by contract for invoicing.
FAQ
Quick answers to common questions.
Is this DCAA-compliant?
The audit-trail shape is — at both the period level (submit/approve/reject carry actor, timestamp, and reason) and the line-item labor charge: every entry edit and deletion is a first-class, in-place correction that records the prior value, the new value, who, when, and why into an append-only trail. No charged hour is ever silently destroyed by a delete-and-re-add. Whether your specific contract's DCAA auditor accepts it depends on your full process; we provide the data layer.
How do I approve everyone's hours at once?
The Timesheet approvals page rolls up the whole team: a "waiting on you" queue with inline Approve/Reject, a missing-submission tracker, billable hours grouped by contract (approved hours only, with a separate pending subtotal so the number is never overstated), and a CSV export of every entry. It's a reporting and workflow surface — not a certified billing system.
Can I tag entries with contract vehicles?
Free-text contract_number today; native FK to a contracts table is on the roadmap.
Is there an employee certification at submit?
Yes. Submitting a timesheet requires the employee to personally certify accuracy — the server refuses to advance an owner's period from draft to submitted without it. The exact statement text they affirmed, their identity, and the timestamp are stored on the period and shown read-only in the approvals view and the activity log. The statement defaults to a DCAA-appropriate wording and can be overridden per organization in settings without a code change. Reopening a period clears the certification so a re-submit forces a fresh one.
What stops someone submitting an incomplete week?
A total-time-accounting completeness gate. At submit the server loads the period's entries and refuses (HTTP 422) if any scheduled workday is unaccounted for, if a day is short of or over the expected hours, or if the period is empty — and the grid shows the same per-day findings and disables Submit before the round-trip. Expected hours default to 8h per weekday and are overridable per period for part-time or exempt staff, inheriting an org-level default new periods pick up automatically. A client/admin can force-submit an incomplete period with an explicit override, which is recorded as a distinct entry in the audit log.
Does it catch people who wait until the end of the week to enter time?
Yes — that's the daily-recording delinquency monitor. The submit-time completeness gate only fires once, at end of period, after the contemporaneous-recording discipline is already lost. A separate daily sweep watches every open assignment for elapsed workdays with zero recorded hours and nudges the employee the moment they fall behind (in-app + email), fires a timesheet.delinquent webhook to your compliance channel, and shows managers a "Behind on daily entry" panel on the approvals page with each person's specific missing dates. It honors a configurable workweek and a grace window (today is never flagged) and only nudges once per day. This is the control DCAA labor floor checks (MAAR 6) actually look for.
Can candidates edit submitted periods?
No. Once submitted, only a client/admin reopen can put the period back into draft. This is the DCAA-friendly path.
Do PTO and sick hours show up here?
Yes — approved leave auto-populates the weekly grid as non-billable LEAVE entries, so every hour of the week is accounted for without re-keying. Those entries are read-only on the timesheet (they're managed in Leave Management). We provide the complete weekly data layer; whether your auditor accepts it depends on your full process.
Does it stop pestering people on federal holidays?
Yes. Set up your holiday calendar once — one click seeds the 11 U.S. OPM federal holidays for a year (with observed-day shifting), and you add any company-specific days. Both the submit-time completeness gate and the daily delinquency monitor treat every holiday exactly like a weekend: it is never a required workday, so a paid holiday with zero hours no longer blocks submit, isn't listed as unaccounted, and never triggers a "behind on daily entry" nudge or a timesheet.delinquent webhook. It's per-org and opt-in, and re-seeding a year never duplicates a date. A scheduling aid, not a certification of any holiday entitlement.