> ## Documentation Index
> Fetch the complete documentation index at: https://docs.timetracker.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Report sources

> The eight report data sources in TimeTracker – time entries, expenses, invoices, projects, tasks, timesheets, time off and timecard – and what each one answers.

Every report reads exactly one data source. The source decides what one row means, which fields you can group and filter by, and which figures can be calculated.

## What is a data source?

A data source is a kind of record. Pick **Time entries** and one row is one logged entry. Pick **Invoices** and one row is one invoice.

You choose the source in the **Data** section of the builder. Everything downstream follows from it – the column catalog, the filter fields, the grouping options and the date field the period windows on.

<Warning>
  A report cannot join two sources. There is no way to put invoice balances on a time-entries report. If a question needs both, build two reports.
</Warning>

## Choosing the right source

| Your question                          | Source       |
| -------------------------------------- | ------------ |
| Where did our hours go?                | Time entries |
| What is still unbilled?                | Time entries |
| What did we spend on this project?     | Expenses     |
| Who owes us money, and for how long?   | Invoices     |
| Is this project over budget?           | **Projects** |
| Are we making margin on this client?   | **Projects** |
| Are tasks running past their estimate? | Tasks        |
| Who has not submitted their timesheet? | Timesheets   |
| How much leave is booked next month?   | Time off     |
| Who was late or absent?                | Timecard     |

<Warning>
  **Budget and estimate figures do not come from time entries.** A time entry knows how long someone worked, not what the project was budgeted. Budget, actual cost, tracked value and profit live on the **Projects** source. Estimate and remaining hours live on the **Tasks** source. Choosing time entries for a budget question gives you a report that cannot be built.
</Warning>

## The date basis

Most records carry more than one date. The **date basis** is the one the period windows on. Each source declares which dates are allowed and which is the default.

An invoice, for example, can be windowed on its **issue date** or its **due date** – and an aging report only makes sense on the due date.

## Shared fields

Two sets of fields appear on almost every source.

### Date buckets

Every source offers five date buckets you can group by:

| Bucket      | What it does                                         |
| ----------- | ---------------------------------------------------- |
| **Day**     | The calendar day in your workspace timezone          |
| **Week**    | The week starting on your workspace's week-start day |
| **Month**   | The calendar month, keyed as `YYYY-MM`               |
| **Quarter** | The calendar quarter, `Q1` to `Q4`                   |
| **Year**    | The calendar year                                    |

### Roster fields

Sources that have a person on the record also offer roster fields:

| Field               | What it is                                                                                                                                                                             |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Group**           | The person's primary group. Someone in several groups counts once, under their primary, so group rows always add up to the total. Filtering by group matches any group they belong to. |
| **Manager**         | The person's manager                                                                                                                                                                   |
| **Job title**       | The person's job title                                                                                                                                                                 |
| **Employment type** | Employee, contractor, and so on                                                                                                                                                        |

All four are gated on roster access, so a report can never become a side door onto roster data your role cannot already read. Only sources that can resolve a field offer it – **Group** is on time entries, expenses, tasks, timesheets, time off and timecard; **Manager** and **Employment type** are on time entries and timesheets.

***

## Time entries

**One row is one logged time entry.** The workhorse source and the default for a new report.

**Answers:** Where did the hours go? How much is billable? What is approved but not yet invoiced? How much revenue and margin did the work carry?

### Group and filter by

| Field                                                      | What it is                                           |
| ---------------------------------------------------------- | ---------------------------------------------------- |
| **Date**                                                   | Entry date, bucketed to the report's granularity     |
| **Day**, **Week**, **Month**, **Quarter**, **Year**        | The five explicit date buckets                       |
| **Day of week**                                            | Monday to Sunday, as a cycle                         |
| **Member**                                                 | Who logged the time                                  |
| **Project**                                                | The project the entry belongs to                     |
| **Task**                                                   | The task the entry belongs to                        |
| **Client**                                                 | The client that owns the entry's project             |
| **Billable**                                               | Whether the entry is marked billable                 |
| **Approval status**                                        | Unapproved, approved or locked                       |
| **Timesheet status**                                       | The submission state of the entry's timesheet period |
| **Invoice status**                                         | Invoiced or still uninvoiced                         |
| **Source**                                                 | How the time was captured – timer or manual          |
| **Group**, **Manager**, **Job title**, **Employment type** | Roster fields                                        |

### Figures

| Figure                | What it means                                                                     |
| --------------------- | --------------------------------------------------------------------------------- |
| **Reported time**     | Total tracked duration                                                            |
| **Billable time**     | Duration flagged billable                                                         |
| **Non-billable time** | Duration flagged non-billable                                                     |
| **Approved time**     | Duration that is approved or locked                                               |
| **Invoiced time**     | Duration already on an invoice line                                               |
| **Uninvoiced time**   | Billable, approved time with no invoice line                                      |
| **Timer time**        | Duration captured with the running timer                                          |
| **Manual time**       | Duration typed in after the fact                                                  |
| **Timer %**           | Timer time as a share of the total                                                |
| **Entries**           | Number of time entries                                                            |
| **Members**           | Distinct people who logged time                                                   |
| **Labor cost**        | Cost rate × duration – needs `time.viewCost`                                      |
| **Billing rate**      | The effective billing rate on the entry – needs `rate.viewBilling`                |
| **Revenue**           | Billing rate × duration – needs `rate.viewBilling`                                |
| **Profit**            | Billable value minus labor cost and expenses – needs both cost and billing access |
| **Profit margin**     | Profit as a share of revenue – needs both                                         |

**Date basis:** Entry date only.

**Who can report on it:** anyone with `report.view`. Rows cover the people your supervision scope reaches.

***

## Expenses

**One row is one expense.**

**Answers:** What are we spending, on which project, and how much of it is billable to the client?

### Group and filter by

| Field                                               | What it is                                       |
| --------------------------------------------------- | ------------------------------------------------ |
| **Day**, **Week**, **Month**, **Quarter**, **Year** | Date buckets                                     |
| **Member**                                          | Who incurred the expense                         |
| **Group**                                           | The claimant's primary group                     |
| **Category**                                        | The workspace expense category it is filed under |
| **Project**                                         | The project the expense belongs to               |
| **Client**                                          | The client it is attributed to                   |
| **Billable**                                        | Whether it is billable to the client             |
| **Date**                                            | The expense date                                 |
| **Approval status**                                 | Draft, submitted, approved, rejected, invoiced   |
| **Invoice status**                                  | Whether it has been attached to an invoice       |

### Figures

| Figure             | What it means                                                    |
| ------------------ | ---------------------------------------------------------------- |
| **Expense cost**   | The raw amount paid – your internal cost. Needs `time.viewCost`. |
| **Billable value** | What the client is billed: amount × (1 + markup)                 |
| **Expenses**       | Number of expenses                                               |

**Date basis:** **Expense date** (default), **Date recorded**, **Date submitted**.

**Who can report on it:** you need expense approval access (`expense.approve`). This is workspace-wide expense visibility, not the self-only submit right.

***

## Invoices

**One row is one invoice.**

**Answers:** Who owes us money? How much is overdue, and by how long? What have we billed this quarter?

### Group and filter by

| Field                                               | What it is                                                           |
| --------------------------------------------------- | -------------------------------------------------------------------- |
| **Day**, **Week**, **Month**, **Quarter**, **Year** | Date buckets                                                         |
| **Invoice**                                         | The invoice, by its number                                           |
| **Client**                                          | Who it is billed to                                                  |
| **Status**                                          | Draft, sent, viewed, partially paid, paid, overdue, void             |
| **Date**                                            | The issue date                                                       |
| **AR aging**                                        | The receivables bucket by due date: current, 1–30, 31–60, 61–90, 90+ |

### Figures

| Figure            | What it means                                                                        |
| ----------------- | ------------------------------------------------------------------------------------ |
| **Invoice total** | The grand total on the invoice                                                       |
| **Subtotal**      | Line items before discount and tax                                                   |
| **Discount**      | Total discount applied                                                               |
| **Tax**           | Total tax across all tax lines                                                       |
| **Paid**          | Payments received                                                                    |
| **Outstanding**   | Total minus paid, credit notes and write-offs. Void and draft invoices are excluded. |
| **Invoices**      | Number of invoices                                                                   |
| **Current**       | Outstanding, not yet past due                                                        |
| **1–30 days**     | Outstanding 1 to 30 days past due                                                    |
| **31–60 days**    | Outstanding 31 to 60 days past due                                                   |
| **61–90 days**    | Outstanding 61 to 90 days past due                                                   |
| **90+ days**      | Outstanding more than 90 days past due                                               |

**Date basis:** **Issue date** (default) or **Due date**. An aging report belongs on the due date.

**Who can report on it:** you need invoice access (`invoice.manage`) – the same gate that opens the Invoices page.

***

## Projects

**One row is one project.** This is the budget and profitability source.

**Answers:** Which projects are over budget? Which client is making us money? What have we invoiced against each project?

### Group and filter by

| Field                                               | What it is                                     |
| --------------------------------------------------- | ---------------------------------------------- |
| **Day**, **Week**, **Month**, **Quarter**, **Year** | Date buckets                                   |
| **Project**                                         | The project itself                             |
| **Client**                                          | The client it belongs to                       |
| **Status**                                          | The project's lifecycle state                  |
| **Health**                                          | The budget-health signal – green, amber or red |

### Figures

| Figure              | What it means                                                           |
| ------------------- | ----------------------------------------------------------------------- |
| **Budget**          | The project's budget amount                                             |
| **Actual cost**     | Tracked internal cost – needs `time.viewCost`                           |
| **Tracked value**   | Client-facing billable value of tracked time – needs `rate.viewBilling` |
| **Forecast margin** | Forecast margin on the project – needs `time.viewCost`                  |
| **Profit**          | Tracked value minus actual cost – needs both cost and billing access    |
| **Invoiced**        | Sum of invoices attributed to the project – needs `invoice.manage`      |
| **Projects**        | Number of projects                                                      |

**Date basis:** **Created** (default), **Start date**, **Due date**.

**Who can report on it:** anyone with `report.view`. Individual figures are still gated.

<Note>
  This is the only source that can answer a budget question. See [/budgets/profitability-and-margin](/budgets/profitability-and-margin).
</Note>

***

## Tasks

**One row is one task.**

**Answers:** Which tasks have blown their estimate? How much work is left? What is sitting in each section?

### Group and filter by

| Field                                               | What it is                                               |
| --------------------------------------------------- | -------------------------------------------------------- |
| **Day**, **Week**, **Month**, **Quarter**, **Year** | Date buckets                                             |
| **Task**                                            | The task itself                                          |
| **Assignee**                                        | Who it is assigned to. Unassigned tasks group together.  |
| **Group**                                           | The assignee's primary group                             |
| **Section**                                         | The board column the task sits in                        |
| **Status**                                          | Todo, in progress or completed, derived from the section |
| **Priority**                                        | None, low, medium, high or urgent                        |

### Figures

| Figure            | What it means                                     |
| ----------------- | ------------------------------------------------- |
| **Estimate (h)**  | Estimated hours on the task                       |
| **Tracked**       | Time logged against the task in the report period |
| **Remaining (h)** | Estimate minus tracked, never below zero          |
| **Tasks**         | Number of tasks                                   |

**Date basis:** **Created** (default), **Due date**, **Start date**.

**Who can report on it:** anyone with `report.view`.

<Note>
  Estimate and remaining hours live here, not on time entries. See [/concepts/budget-vs-estimate](/concepts/budget-vs-estimate).
</Note>

***

## Timesheets

**One row is one person for one period.** Periods a person never submitted are included as rows with the status `missing`, which is what makes this the chase-up report.

**Answers:** Who has not submitted? How much time is submitted but not yet approved? Which group is behind?

### Group and filter by

| Field                                               | What it is                                                                                       |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| **Day**, **Week**, **Month**, **Quarter**, **Year** | Date buckets                                                                                     |
| **Status**                                          | Submitted, approved, changes requested, withdrawn, plus **missing** for a period never submitted |
| **Member**                                          | The person the period belongs to                                                                 |
| **Period**                                          | The timesheet period – weekly, biweekly or monthly, per your workspace setting                   |
| **Group**, **Manager**, **Employment type**         | Roster fields                                                                                    |

### Figures

| Figure        | What it means                                                                                          |
| ------------- | ------------------------------------------------------------------------------------------------------ |
| **Submitted** | The period's total once it has been submitted. A missing period counts 0.                              |
| **Approved**  | The period's total once it has been approved. Anything still submitted, withdrawn or missing counts 0. |
| **Periods**   | Number of person-and-period cells, missing ones included                                               |

**Date basis:** **Period end** only. A period grid keeps every period that overlaps the window, so no other date field would change the result.

**Who can report on it:** anyone with `report.view`. Which people's periods you see is decided per row by your scope – a plain member sees their own.

***

## Time off

**One row is one leave request.**

**Answers:** How much leave is booked next quarter? Who is off, under which policy? How much is still pending approval?

### Group and filter by

| Field                                               | What it is                                              |
| --------------------------------------------------- | ------------------------------------------------------- |
| **Day**, **Week**, **Month**, **Quarter**, **Year** | Date buckets                                            |
| **Policy**                                          | The leave policy the request draws from                 |
| **Member**                                          | Whose leave it is                                       |
| **Group**                                           | The member's primary group                              |
| **Status**                                          | Pending, approved, rejected or withdrawn                |
| **Unit**                                            | Days or hours – which figure the request contributes to |

### Figures

| Figure       | What it means                                                     |
| ------------ | ----------------------------------------------------------------- |
| **Days**     | Leave amount for day-based requests. Hour-based requests count 0. |
| **Hours**    | Leave amount for hour-based requests. Day-based requests count 0. |
| **Requests** | Number of leave requests                                          |

**Date basis:** **Start date** (default) or **End date**.

**Who can report on it:** anyone with `report.view`. Seeing other people's leave needs `leave.viewOthers`; without it you see your own.

<Warning>
  Days and hours are never mixed into one number. A policy measured in days contributes only to **Days**, and a policy measured in hours contributes only to **Hours**. Group by **Unit** if you need both on one report.
</Warning>

***

## Timecard

**One row is one person on one day.** This compares what someone was scheduled to work against what they actually clocked.

**Answers:** Who was late? Who was absent? Who worked on a day off? Where are we over the schedule?

### Group and filter by

| Field                                               | What it is                                                                                                                 |
| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **Day**, **Week**, **Month**, **Quarter**, **Year** | Date buckets                                                                                                               |
| **Member**                                          | Whose day it is                                                                                                            |
| **Status**                                          | The day's resolved status: present, late, left early, absent, worked on day off, unscheduled, over scheduled or incomplete |
| **Group**                                           | The member's primary group                                                                                                 |

### Figures

| Figure                     | What it means                                               |
| -------------------------- | ----------------------------------------------------------- |
| **Scheduled**              | Expected time for the day                                   |
| **Worked**                 | Actual worked time, from closed sessions                    |
| **Late**                   | Time late past the scheduled start, beyond the grace period |
| **Left early**             | Time left before the scheduled end, beyond the grace period |
| **Over scheduled**         | Time worked beyond the expectation, beyond the grace period |
| **Days absent**            | Scheduled days with no work recorded                        |
| **Days worked on day off** | Days worked when not scheduled                              |
| **Days unscheduled**       | Worked days with no schedule assigned                       |
| **Days incomplete**        | Days with a session that was never clocked out              |
| **Days**                   | Number of person-days in the group                          |

**Date basis:** **Date** only.

**Who can report on it:** anyone with `report.view`. Which people's days you see depends on timecard management or approval access; without it you see your own.

<Note>
  The Timecard source needs the **Time Clock** app switched on. It is off by default. See [/time-clock/overview](/time-clock/overview).
</Note>

***

## Which figures belong to which source

This is the table that stops a report from being unbuildable.

| Family                                                                        | Lives on     | Not on       |
| ----------------------------------------------------------------------------- | ------------ | ------------ |
| Hours, billable split, timer vs manual                                        | Time entries | –            |
| Labor cost, revenue, profit, profit margin                                    | Time entries | –            |
| Estimate, remaining hours                                                     | **Tasks**    | Time entries |
| Budget, actual cost, tracked value, forecast margin, project profit, invoiced | **Projects** | Time entries |
| Expense cost, expense billable value                                          | Expenses     | Time entries |
| Invoice totals, payments, outstanding, AR aging                               | Invoices     | Time entries |
| Submitted and approved period totals                                          | Timesheets   | Time entries |
| Leave days and hours                                                          | Time off     | Time entries |
| Scheduled vs worked, lateness, absence                                        | Timecard     | Time entries |

If the builder tells you a figure *"is not available yet"*, you have asked a source for something it cannot work out. Switch source.

## Example

Northwind Studio runs three reports over the same month, from three different sources.

| Question                                 | Source       | Grouped by           | Answer                                |
| ---------------------------------------- | ------------ | -------------------- | ------------------------------------- |
| Where did July's hours go?               | Time entries | Project, then Client | Website Redesign 62h, Mobile App 88h  |
| Are we still inside the Bluebird budget? | **Projects** | Project              | \$40,000 budget, tracked value so far |
| What is Bluebird still to pay?           | Invoices     | Client               | Outstanding, split into aging buckets |

Three questions, three sources. None of them could be answered by another.

## Permissions

| Source       | Extra capability needed |
| ------------ | ----------------------- |
| Time entries | –                       |
| Expenses     | `expense.approve`       |
| Invoices     | `invoice.manage`        |
| Projects     | –                       |
| Tasks        | –                       |
| Timesheets   | –                       |
| Time off     | –                       |
| Timecard     | –                       |

Every source also needs `report.view`. A source with no extra gate still limits which rows you see, based on your supervision scope – see [/concepts/supervision-scope](/concepts/supervision-scope).

## Common questions

<AccordionGroup>
  <Accordion title="Can one report read two sources?">
    No. A report reads exactly one source, and there is no join. This is deliberate – a join would let a report pull another source's cost figures past that source's own permission check.
  </Accordion>

  <Accordion title="Why can I not see Expenses or Invoices in the source list?">
    You can select them, but running the report needs expense approval or invoice access. Without it the report is refused.
  </Accordion>

  <Accordion title="What happens to my columns if I switch source?">
    Anything the new source also has is kept. Everything else is dropped, and TimeTracker shows you the exact list before it does anything.
  </Accordion>

  <Accordion title="Why does my timesheet report have rows for people who submitted nothing?">
    That is the point. The Timesheets source builds a complete grid of every person against every period, so a missing submission is a visible row rather than an absent one.
  </Accordion>

  <Accordion title="Which date does the period actually filter on?">
    Whichever date basis the report uses. Each source declares its allowed dates and its default – expenses default to the expense date, invoices to the issue date, projects and tasks to created.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Problem                                      | Why                                                 | Fix                                                 |
| -------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- |
| **"can't be calculated on this report yet"** | The figure does not belong to this source           | Move the question to the source that owns it        |
| An expenses or invoices report is refused    | You lack the source capability                      | Ask an admin for expense approval or invoice access |
| A timecard report is empty                   | The Time Clock app may be off, or nobody clocked in | Check Settings → Apps                               |
| Leave hours show 0                           | Your policies are measured in days                  | Read the **Days** figure, or group by **Unit**      |

## Related guides

<CardGroup cols={2}>
  <Card title="Metrics reference" icon="list" href="/reports/metrics-reference">
    Every figure, its meaning and how it is worked out.
  </Card>

  <Card title="Build a report" icon="wrench" href="/reports/build-a-report">
    Turn a source into a finished report.
  </Card>

  <Card title="Report filters" icon="filter" href="/reports/report-filters">
    Narrow a source down to the rows you want.
  </Card>

  <Card title="Budget vs estimate" icon="scale-balanced" href="/concepts/budget-vs-estimate">
    Why budgets sit on projects and estimates on tasks.
  </Card>

  <Card title="Profitability and margin" icon="chart-line" href="/budgets/profitability-and-margin">
    How cost, revenue and margin are calculated.
  </Card>

  <Card title="Report permissions" icon="lock" href="/reports/report-permissions">
    Source gates, the cost firewall and scope.
  </Card>
</CardGroup>
