How budgets and cost are calculated
Teamhood calculates what work has cost from the hours people logged. Each hour is priced at the cost rate of the person who logged it, on the day of that hour.
No cost is saved anywhere. Every figure is calculated again when you look at it. A new or corrected rate therefore changes every figure at once, past hours included.
The Financials fields
Section titled “The Financials fields”In a new organization, every type has Cost, and a Project also has Budget. The two fields are in the Financials group, the last group when an organization starts. A group created later is placed after it, and any group can be moved.
- Budget is a number you type.
- Cost is what the logged hours cost so far.
Nobody can type a value into Cost, and a formula cannot use it. Cost cannot be deleted. A role with Manage fields & types can still change the types it applies to, in Settings → Fields.
Which rate prices an hour
Section titled “Which rate prices an hour”For a person, Teamhood uses the first rate it finds in this order:
- The person’s own rate.
- A rate of the person’s team. A team without a rate uses the rate of the nearest team above it.
- The organization default.
- No rate. The hours then cost nothing, and the Budget section reports them.
- A rate applies from its Effective from date until the next rate of the same person or team. A rate set From the start has no first day, so it also prices every hour logged before it was set.
- On a day before a person’s first own rate, the team rate applies, then the organization default.
- An own rate of 0 is still a rate: the person’s hours cost nothing, and their team rate does not apply. Remove the own rate to let the team rate price them.
- A person in several teams with different rates gets the highest rate. Comes from then shows Several teams with a warning.
- When those teams all set the same rate, Comes from shows Several teams (same rate) and no warning.
Cost comes from logged time
Section titled “Cost comes from logged time”- Every time log counts, on every tracked time field. An hour costs the same whether it is billable or not.
- A log is priced at the rate of the person who logged it, on the day of the log.
- A rate that starts in the middle of a month splits that month exactly. Hours before the date use the old rate, and hours from the date use the new one.
- A parent’s cost includes every item below it.
- Time logged on a category is part of no item’s cost.
- Planned hours, estimates and reserved hours add nothing. Cost covers only time that has been logged.
The Budget section
Section titled “The Budget section”An item’s Budget section shows the item’s Budget and its Cost, with the hours behind the cost.
- People lists everyone who logged hours on the item or below it, largest cost first. Each row shows the person’s cost, their hours, and where their rate comes from today.
- The section then lists the hours whose price may surprise you. These hours are already in Cost:
- hours priced at the organization rate, because their person has no rate of their own and no team rate;
- hours priced at a team rate. A team rate follows the person’s current teams, so the cost of these hours can change later;
- hours by people with no rate, which cost nothing.
A worked example
Section titled “A worked example”The organization default is 50 an hour. Ana is in no team and has her own rate of 80 from 1 March. Ben has no rate of his own, and his team, Structural, has a rate of 60. A project has a budget of 10,000.
- Ana logged 40 hours in February and 20 hours in March on a task. February is before her own rate, so it uses the default: 40 × 50 = 2,000. March uses her rate: 20 × 80 = 1,600. Her cost is 3,600.
- Ben logged 50 hours on a second task: 50 × 60 = 3,000.
- The project’s Cost is 3,600 + 3,000 = 6,600. Its Budget section shows Budget 10,000 and Cost 6,600. People lists Ana first, then Ben, with Structural as where his rate comes from.
If Structural’s rate is corrected to 70 From the start, Ben’s hours cost 3,500 and the project’s Cost becomes 7,100. Ana is listed under Needs attention, because the default priced her first hours before her own rate began.
Who can see money
Section titled “Who can see money”The Financial data permission covers cost rates and Budget. By default, only Administrator holds it.
- Without Financial data, Teamhood never sends a role the value of Budget.
- Such a role is not offered Budget in any field list: columns, filters, grouping, sorting, card fields or charts.
- Where a view already shows Budget, the role sees a dash. A board card leaves the field off.
- A filter on Budget is not applied for the role, and the filter’s chip says so.
- A formula that uses Budget, directly or through another formula, is withheld the same way.
- Changing a Budget needs Financial data set to Read & write.
Only a role that may read both financial data and time logs sees cost figures. These figures are:
- the values of the Cost field;
- the Budget section of an item;
- the Cost column of a timesheet export.
- the values of a formula that uses
RATE.
Everyone else sees a dash in the Cost field and in such a formula. A filter on either is not applied for them, and the filter’s chip says so. A shared view therefore shows them the rows that the filter would hide.
Anyone who can see cost can calculate a person’s rate. One person’s cost on an item, divided by their hours on it, is their rate. To keep pay private, give rates to teams rather than to people.
A share link never shows Cost. It shows Budget only when the person who created or last changed the link may read it. The public API and the MCP server return rates and time logs, but no cost figures.
Planned cost with a formula
Section titled “Planned cost with a formula”A formula field can price an item’s estimate with RATE, for example {Estimate (h)} * RATE(). Formula functions describes it.
- Planned cost is not Cost. It prices the whole estimate at today’s rates. Cost prices only the hours already logged, each at the rate on the day it was logged.
- It is never saved. It changes when a rate, an assignee or a team changes, like every cost figure.
When figures appear and change
Section titled “When figures appear and change”- The Budget section shows only where it has something to show. The item’s type must have the Budget field. The item must also have a budget or a cost above 0. In a new organization, that means Projects.
- On a type that Cost does not apply to, the section shows the budget alone. It has no Cost figure, People list or gaps there.
- A cost figure does not depend on the view. Cost covers the item and every item below it, whatever the view filters out.
- A time log changes the cost at once. Adding, editing or deleting a log changes the figures before the change is saved.
Items that Cost does not apply to
Section titled “Items that Cost does not apply to”An item whose type is outside the types Cost applies to has no Cost figure. Sorting and filters treat it as empty, and an export leaves its cell blank.
Its hours still count in the cost of the items above it. A total also passes through it:
- A group header and the total row add up the figures of the top items in the group. A parent’s figure already covers the items below it, so they are not counted again.
- When a top item has no figure, the total counts the items below it instead. It stops at the first item on each branch that has a figure. Items that the view filters out count too.
- A chart measure on Cost adds up the same items, in the category of the top item.
- A burnup or burndown Sum of Cost adds up the same items. They count as done when the top item is done.
Cost in charts and exports
Section titled “Cost in charts and exports”- Cost can be a chart measure, but not a category. A chart cannot use Cost for its categories or for Break down by. A scatter can place items by Cost, and a burnup or burndown can add it up. A view cannot group by it, and a board cannot use it for columns or swimlanes.
- A timesheet export can differ by cents. The Cost column prices and rounds each log on its own. The column’s header names the currency. The column’s total can differ by a few cents from the Budget section.
- The Cost column also prices time logged on categories.
The rates page
Section titled “The rates page”- A change on a day that already has an entry changes that entry. A row already at that amount on that day is left as it is.
- Needs attention lists people who have hours priced at the organization default, who belong to teams with different rates, who have hours but no rate, or who logged hours before their first rate.
- Needs attention reads logged hours only when you open it. The tab shows no count until you select it.
- Its checks on logged time need a role that may read time logs. Without that, the list uses planned hours only.
- Export writes one CSV line per rate entry of the listed rows. Import reads the same columns:
Kind,Name or email,Hourly rate (EUR)andEffective from. A blankEffective frommeans the rate applies from the start. - The amount column names your organization’s currency. An import shows a preview before anything is saved.
- Hours logged before a first rate are listed only in one case. The first logged hours used the organization default or no rate. A team rate or an own rate prices later hours.
- Hours that a team rate priced from the start are not listed.
- Deleted people and teams are not on the rates page. A deleted person’s own rate still prices the hours they logged.
- A team rate follows current team membership. Moving a person to another team, removing them from a team or deleting the team changes the rate of their past hours. Their past cost then changes.
- Deleting a person removes their team memberships too, so a deleted person with no rate of their own loses their team pricing.
- A rate of the person’s own never changes this way. To keep a person’s past cost fixed, give that person a rate of their own.
- Copy rate to members in a team’s menu gives every member such a rate. It repeats what the team’s rate priced them at, period by period, and adds nothing on or after a rate the person already has.
- Members of teams below the team get the copy too. A member whose rate comes from another team, or from several teams, is skipped and named.
- After the copy, a change to the team’s rate no longer reaches those members. One undo removes the whole copy.