On this page

People & Budget

In short

Two views answer two questions that come up in every project, every week: who is involved, and how much money is left. In People you keep everyone who matters, with role, organization, contact details and influence. In Budget you set what the project may cost, split that amount into buckets, and compare planned amounts against actual ones.

Both views are part of the project context. The project agent reads them. Who owns a task, which bucket is already overspent, who needs to be consulted before a decision: the AI can only take that into account if it is recorded here.

When you need this

  • You want to know who to inform when a date moves.
  • An invoice arrives and you want to see whether the matching bucket still has room.
  • The client asks about the cost position and you do not want to open three spreadsheets first.
  • A variation order is on the table and you want to see its effect before you commit.
  • You are preparing a status meeting and need a list of participants with roles.
  • You want the project agent to address drafts to the right people.

The People view

Open it through the People tab in the left sidebar. The view shows one card per person. At the top you find the search field, the Filter & Sort button, the Export button, and the Person button for adding someone.

The People view shows one card per participant with organization, roles and influence.
The People view shows one card per participant with organization, roles and influence.

What TensorPM stores about a person

The form has two blocks. Under Basic Information:

  • Name * and Organization *. Both are required. The organization matters more than it looks: it separates your own company from the design office, the client, and the subcontractors.
  • Email. Without an address TensorPM can neither address a message nor link the person to a TensorPM account.
  • Phone. The placeholder reads +49 123 456789. The number unlocks the phone and messenger entries in the context menu.
  • Profile Picture.

Under Roles and Influence:

  • Role Groups *. A fixed list, so that filtering works.
  • Custom Roles. Free text, one entry per line, confirmed with Enter. This is where project-specific titles belong, for example "Site manager structural works" or "Health and safety coordinator".
  • Influence Level *. High, Medium or Low.
  • Labels. Free keywords, also confirmed with Enter. Labels are the most flexible field and the most useful one, because you can filter by them.

Every person also carries two entries TensorPM maintains itself: when the record was last changed and by whom. Both appear in the CSV export.

Role groups, custom roles and influence

The list under Role Groups * is deliberately short: Executive, Manager, Team Member, External, Supplier, Customer, Sponsor, Client, Other. A person can belong to several groups.

The role group is the coarse drawer, the custom role is the precise title. An electrical designer gets the role group External and the custom role "Electrical designer". That way you can filter all externals at once and still read the exact function.

Influence Level * does not describe hierarchy, it describes effect on the project. The clerk in the building authority who signs a permit has high influence, even though no org chart puts him above you. The project agent uses this rating when it suggests who to involve in a change.

Profile picture

Under Profile Picture you upload an image and crop it. The Remove Avatar button clears it. Pictures of external people are stored as a file next to the project database on your device. If the person is linked to a TensorPM account, the picture is additionally stored with that account so it shows up on your other devices too.

Without a picture the card shows initials. That is not a defect, it is perfectly sufficient for most projects.

Responsibility: action items and work packages

People is a directory, not an assignment. Who does what is decided in three other places:

  1. In Action Items through the Assigned to column. One item can have several assignees, mixing people and local coding agents.
  2. In a work package through the Responsible (internal) field. That is the person in your own organization who answers for the package.
  3. In a work package through the Executing company field. Here too you pick an entry from People, usually the contact at the executing firm.

All three pickers read from the same list of people. Whoever is missing there appears in no picker. That is the most common reason an assignment "does not work".

Communication tools in the context menu

Right-clicking a person card opens a menu with Edit, Send Email, Invite to Workspace and Delete. You can unlock four messengers under Settings -> General -> Communication Tools:

Toggle New menu entry Requirement on the person
Microsoft Teams Teams Chat and Teams Call email address
Slack Slack DM email address
WhatsApp WhatsApp phone number
Signal Signal phone number

If a phone number is stored, Phone Call appears as well. These entries open the respective service outside TensorPM. TensorPM does not sign in to Teams or Slack and reads nothing there.

Spotting and inviting TensorPM users

If a person's email address belongs to a TensorPM account, the card shows a badge. For accounts already linked it reads TensorPM User, together with the plan (Trial, Pro, Business or Seat) and the workspace role. If the person is registered but not yet in your workspace, a badge points out that you can invite them. The Invite to Workspace entry sends the invitation to the stored address.

This only works in a cloud workspace. See Workspaces and Cloud sync.

Search, filter, sort, export

The search field at the top filters the cards immediately. Filter & Sort opens a panel with:

  • Sort By: Name, Organization, Role, Influence
  • Role: multiple selection across the role groups
  • Influence Level: High, Medium, Low
  • Labels: multiple selection across all labels used in the project
  • Clear All

Export produces a CSV file with the columns Name, Organization, Email, Phone, Role Groups, Custom Roles, Influence, Labels, Last Modified and Last Modified By. It exports exactly what is currently visible. Filter to External first and you get a subcontractor list rather than the whole directory.

How people arise from incoming signals

You do not have to type every participant by hand. People appear in four ways:

  1. At project start, from documents. If you create a project from existing paperwork, TensorPM reads names, organizations, roles and addresses out of the contract, the minutes or the distribution list and proposes people from them. If a role group is missing it uses Team Member, if influence is missing it uses Medium. You can correct both afterwards.
  2. From incoming signals through the Distiller. When an email arrives from an unknown sender, the Distiller can offer a new person as a proposal card. The card carries the name as its headline and details such as organization or role as small chips below. You decide with Approve or Skip. Nothing is stored without you.
  3. In chat. You can ask the project agent to add or update a person.
  4. By hand, through the Person button.

Because route two runs through the Distiller, the same rules apply as for any other context change. The details are in Connectors & approvals.

Why this is worth maintaining even if nobody else uses the app

This is the most common objection: why maintain people if I am the only one working in TensorPM? Four reasons:

  • The project agent addresses correctly. An email draft needs an address and a salutation. Both come from People.
  • Incoming mail gets placed. If TensorPM knows the sender, it can read the message in the light of their role and organization instead of treating it as anonymous text.
  • Analysis and Guidance become concrete. "Clarify the approval" is a weak recommendation. "Clarify the approval with the building authority, the contact is on file" is a usable one.
  • It is your handover. If you drop out or the project lead changes, a maintained list of people with roles and influence is the first thing anyone needs. It exports as CSV and can be passed on.

The effort is modest. For a mid-sized construction project, client, project control, architect, the three or four key designers and one contact per trade are enough to start. Everything else grows in by itself through incoming signals.

What the People view cannot do

TensorPM does not run availability or capacity planning per person. There is no field for weekly hours, no holiday calendar, no utilization curve. Who has how much time when is not a property of the person in TensorPM.

You plan capacity on the work side instead: every action item has Planned Effort and Actual Effort in hours, and every work package rolls those up into Effort (plan) and Effort (actual). Through the assignment you can see how many hours sit with one person. Rough availability, for example "on site Tuesdays and Thursdays only", belongs on the person as a label or in the project context under Context -> Resources.

The Budget view

Open it through the Budget tab in the left sidebar. The view title reads Budget & Material, because the view has two tabs: Budget and Material. This article covers Budget only. Everything about Material, suppliers and procurement status is in Materials & procurement.

The Budget & Material view with the budget overview and bucket cards.
The Budget & Material view with the budget overview and bucket cards.

Setting the project budget

The project budget is a single number on the project, not on a bucket. You set or change it under Context -> Resources in the budget field. The project creation wizard asks for it as well.

If no project budget is set, the overview shows Project Budget: followed by Not set. Buckets and expenses still work, but you get no statement about whether you are within the frame. Set the number early, even if it is still rough.

Creating budget buckets

A budget bucket is a cost group. The New Bucket button opens the form with Bucket Name and Description, and Save stores it.

Sensible buckets in construction are trades or cost groups: Structural works, Fit-out, Building services, Ancillary costs, Contingency. In an IT project rather External services, Licenses, Hardware, Contingency.

Keep the number small. Five to ten buckets can be held in your head, forty cannot. For finer structure use the action items and expenses inside a bucket.

Every bucket card carries Edit Bucket and Delete Bucket at the top right. A deletion has to be confirmed with Confirm Delete.

Assigning action items to a bucket

An action item can carry cost. In Action Items there are the Planned Budget and Actual Budget columns for this. To make those amounts show up in a bucket, assign the item to the bucket.

  1. On the bucket card, click Assign.
  2. Assign Action Items to "<bucket name>" opens with two columns: Available (<count>) on the left, To Assign (<count>) on the right.
  3. Search in the field at the top, click items on the left to move them to the right.
  4. Confirm with Assign Selected (<count>).

The Action Items area of the bucket card then shows one line per item with Plan: and Actual:. Unassign Action Item from this Bucket releases the link again without deleting the item.

Recording simple expenses

Not every expense has an action item. A crane rental, a fee, a material invoice: that is what Direct Expenses are for. The Add button on the bucket card opens New Expense Item with:

  • Expense Name, placeholder e.g., Office Supplies
  • Description, optional
  • Date
  • Planned: and Actual: as two separate amounts
  • Attached Files

Save Expense stores it. You change an existing entry through Edit Expense and remove it through Delete Expense.

The trick is in the two amounts. An expense you expect but have not paid yet goes in under Planned: with Actual: left at zero. When the invoice arrives you enter the real amount under Actual:. That way you always see the difference between what you expect and what has already gone out.

Attaching receipts to an expense

Every expense can carry files. In the Attached Files area you have two routes:

  • Upload takes a file from your disk into the project folder.
  • Search existing files searches the files already in the project, for example an invoice that arrived by email.

The second route is the important one. When an invoice arrives as an email attachment and lands in the project through a connector, you do not have to upload it again: you search for it and attach it to the expense. The entry then shows how many files are attached. Remove file releases a link again.

That puts the receipt where the number is. It is not bookkeeping, but it answers the question "where does this amount come from?" without a hunt through the mailbox.

Planned against actual

The comparison runs through every level and works the same way everywhere.

Level Plan Actual
Action item Planned Budget Actual Budget
Direct expense Planned: Actual:
Bucket sum of all planned amounts in the bucket sum of all actual amounts in the bucket
Project sum of all buckets under Planned: sum of all buckets under Spent:

Important: a bucket total is always a calculation, never an input field. You cannot give a bucket a cap. What a bucket should cost follows from the planned amounts of the items and expenses inside it. If you want to represent a reserve, create a dedicated bucket with a planned expense in it.

The same logic exists for time in parallel: Planned Effort and Actual Effort in hours per action item. Those values do not feed the budget view; they feed the Effort (plan) and Effort (actual) columns of the work packages.

Reading the budget overview

At the very top sits the Budget Overview card with four fields:

  • Project Budget: the number from Context -> Resources
  • Planned: the sum of all planned amounts across all buckets. It changes color as soon as it exceeds the project budget.
  • Spent: the sum of all actual amounts across all buckets. It turns red as soon as it exceeds the project budget.
  • A badge with the remaining position.

The badge has three states, evaluated in this order:

  1. OVERSPENT, when more has already been spent than budgeted. The overrun is shown next to it.
  2. OVERPLANNED, when nothing has been overspent yet but too much has already been planned.
  3. AVAILABLE, when planning room is left. The remainder is shown next to it.

Important: These three badges appear in English in the German interface as well. That is a known leftover in the program, not a problem with your settings.

OVERPLANNED is the genuinely useful signal. It appears before money has moved, at a point where you can still act.

The ring on every bucket card

Every bucket card shows a ring. It compares actual against plan inside that bucket and has three segments: Used, Available and, when actual exceeds plan, Overspend. Below the ring you find Available: or Overspend: with the amount.

Summary and Details switch between the compact and a more detailed rendering. The detailed one also shows how many expenses feed the number.

Filter and sort

The Filter & Sort button opens the Filter & Sort Budget panel. You can filter by:

  • Filter by Bucket Names: type a name and press Enter to add it as a chip
  • Expense Name
  • Date Range with Start date and End date, based on the expense date
  • Planned Budget Range and Actual Budget Range, each with Min and Max
  • Has Action Items and Has Expenses, each Yes, No or Any

You can sort by Bucket Name, Planned Total, Actual Total, Item Count, Expense Name, Expense Date, Planned Budget and Actual Budget. Clear All resets everything.

Filters and sorting are stored per project. When a view looks empty on the next visit, a filter is almost always still active.

The budget trend over time

The budget view shows a position, not a trend. For the trend go to Context -> Info, to the Project Insights card, and open the Budget tab there. The chart shows:

  • Daily Actual as bars
  • Total Actual as a rising line
  • Project Budget as a horizontal reference line

30 days, 90 days and All time switch the range. The interesting moment is when the Total Actual line approaches the Project Budget line while months of the schedule are still open.

The values come from a daily roll-forward. A project that has been in TensorPM for two days has correspondingly little to show. Without action items carrying budget figures you see the No Budget Data notice.

Currency and exchange rates

TensorPM distinguishes two currencies.

The display currency decides which currency amounts appear in on screen. It applies per project and lives under Settings -> General -> Currency -> Display Currency. Available are EUR, USD, GBP, JPY, CHF, CAD and AUD. The Show Currency Symbols toggle switches between the code and the symbol.

The storage currency is the currency TensorPM calculates and stores in internally. It applies to the whole application, knows only EUR and USD, and sits behind the Advanced Currency Settings button.

Important: Changing the Storage Currency converts all existing data. The app warns that this converts everything already recorded. Create a backup first under Settings -> General -> Database Backup -> Create Backup.

The Update Exchange Rates Automatically toggle is off by default. Turn it on and TensorPM fetches daily central-bank reference rates when needed, through the free Frankfurter service. No account and no key are required, only currency codes are sent, and the rates are then cached locally for 24 hours. The Refresh Exchange Rates button forces a fetch, but it only works while the toggle is on.

Without rate fetching TensorPM keeps working with built-in conversion factors. Amounts stay visible, just not converted at today's rate. For invoices and settlement the rate used by your accounting applies anyway, not the one in TensorPM.

A worked example from a construction project

The starting position

A four-storey office building, refurbishment of an existing structure. Under Context -> Resources the project budget is set to EUR 2,400,000. Display currency and storage currency are both EUR.

The four buckets

Bucket Planned Actual
Structural works 1,200,000 1,004,300
Fit-out 700,000 210,000
Building services 350,000 96,000
Ancillary costs 90,000 141,500
Total 2,340,000 1,451,800

Something is already visible here: Ancillary costs is at EUR 141,500 against a plan of EUR 90,000. That bucket's card therefore reads Overspend: EUR 51,500, and its ring shows a red Overspend segment.

The Structural works bucket in detail

The bucket holds three action items and two direct expenses.

Entry Type Plan Actual
Pour the base slab action item 180,000 186,500
Build basement walls action item 240,000 240,000
Slabs, ground to third floor action item 620,000 415,000
Site setup expense 138,000 138,000
Crane rental May to July expense 22,000 24,800
Bucket total 1,200,000 1,004,300

The "Slabs, ground to third floor" line is not finished: EUR 620,000 planned, EUR 415,000 invoiced so far. For the whole bucket the card reads Available: EUR 195,700. That is not a saving, it is simply the part that has not been invoiced yet.

The crane rental sits at EUR 24,800 against a plan of EUR 22,000, because it was rented a week longer. The rental company's invoice hangs on that expense; it came into the project through the email connector and was attached with Search existing files.

What the budget overview makes of it

  • Project Budget: EUR 2,400,000
  • Planned: EUR 2,340,000, the sum of the four buckets
  • Spent: EUR 1,451,800
  • Badge: AVAILABLE with EUR 60,000

The EUR 60,000 are the difference between the project budget and the sum of the planned amounts. So it is not what is left in the bank, it is what you may still commit without breaking the frame.

A variation order arrives

The structural contractor files a variation: the ground under the base slab has to be replaced over 400 square metres, claim EUR 85,000. You create a direct expense in the Structural works bucket:

  • Expense Name: Variation V-014 ground replacement
  • Date: the date of the variation letter
  • Planned: 85,000, Actual: 0
  • Attached Files: the variation letter as a PDF

The arithmetic changes immediately:

Value Before After
Structural works, planned 1,200,000 1,285,000
Planned: total 2,340,000 2,425,000
Badge AVAILABLE 60,000 OVERPLANNED +25,000

The badge jumps to OVERPLANNED although not a single euro has moved. That is exactly the point: you see the overrun before the commitment, not after the invoice.

Two weeks later the variation is negotiated down to EUR 71,000 and awarded. You change Planned: to 71,000. Total planning then stands at EUR 2,411,000, still EUR 11,000 above the frame. When the invoice arrives later you enter it under Actual:, and the actual of Structural works rises to EUR 1,075,300.

What this example shows

  • Every number in the overview is a sum of lines you can trace individually.
  • No bucket has a cap of its own. The cap is the project budget.
  • One overspent bucket does not automatically put the project in deficit, as long as other buckets have room. Conversely the project can be at risk even though every single bucket looks fine.
  • Planned amounts are the early warning system, actual amounts are the documentation.

What TensorPM is not

TensorPM is not accounting software. There are no accounts, no journal entries, no VAT, no chart of accounts, no year-end close and no audit-proof receipt archive. The expenses in a bucket are project control figures, not bookings.

TensorPM also does not replace cost accounting in your ERP. Cost centres, cost objects, order settlement, payment runs, dunning, fixed-asset accounting and accruals stay where they belong. What sits in TensorPM is the project's view of its cost, at the precision that steering requires.

In practice that means:

  • The truth about paid amounts lives in accounting. Where TensorPM differs, accounting is right.
  • Enter net amounts in TensorPM, unless your project has deliberately agreed otherwise. TensorPM does not separate tax.
  • Do not expect an automatic reconciliation with the ERP. Where a link to an upstream system exists, it runs over the usual routes, see Connectors & approvals and Agent integrations.
  • Use the precision that fits the decision. Whether a line costs EUR 24,800 or EUR 24,812.47 changes no project decision.

That is not a limitation, it is a division of labour. Accounting tells you what happened. TensorPM tells you what follows from it for the rest of the project.

Step by step: the first setup

  1. Open Context -> Resources and enter the project budget. A rough figure is fine.
  2. Open People and create the five to ten most important participants. Mind email and organization. You know it worked when a card appears for each person.
  3. Open Settings -> General -> Communication Tools and enable the messengers you actually use. Then right-click a person card and check that the entries appear.
  4. Open Budget and create your cost groups through New Bucket. Five to ten are enough.
  5. Use Assign to attach the action items that carry cost.
  6. Use Add to record the expenses that have no action item, and attach the receipts.
  7. Check the Budget Overview card. If it shows a badge and a plausible total, the setup is done.

After that a short weekly round is enough: enter new invoices as actual, new claims as planned, check the badge.

What happens behind the scenes

All amounts are stored in the storage currency and only converted into the display currency when they are shown. That is why changing the display currency changes nothing about the data, while changing the storage currency changes everything.

Bucket totals are stored nowhere. TensorPM recalculates them on every open from the assigned action items and the expenses in the bucket. That is why a total is never stale, and why there is no field into which you could type a total directly.

The planned and actual amounts of an action item are kept separately from the item itself. Delete the item and its amounts go with it. Merely remove it from a bucket and both item and amounts survive, they just stop counting in that bucket.

People and budget data belong to the project and are synchronized in a cloud workspace, end-to-end encrypted along the way. Profile pictures of external people stay as files on the device. See Encryption.

Frequently asked questions

Can I give a bucket its own limit? No. A bucket has no cap of its own. Its plan is the sum of the planned amounts inside it. If you want to represent a limit, create a planned expense of that size and book the real cost against it.

Why does the overview say OVERSPENT instead of a translated word? These three badges are hard-coded in English in the program. They mean: spent more than budgeted, planned more than budgeted, room still available.

Can one action item sit in two buckets? Assign every item to exactly one bucket. A double assignment would count the same amount twice in the overall total.

I cannot find the Currency group in the settings. The group only appears while a project is open, because the display currency applies per project.

Can the project agent create buckets and expenses itself? Yes, it can create, rename and delete buckets and record expenses. What it did is visible afterwards under Trail -> Changes.

Are expenses created automatically from invoices? No. Incoming invoices land as a signal and as a file in the project, and the Distiller can propose a change from them. The amount is never booked unasked.

What is the difference between Budget and Material? Budget manages money in buckets. Material manages line items with supplier and procurement status. See Materials & procurement.

Can I import people from a file? There is an export, but no CSV import. The fastest route to many people is project creation from documents, or the chat.

What happens to a person who leaves the project? Do not delete them while they still appear in assignments or in the history. Give them a label such as "left the project" instead, and filter on it.

When something does not work

A participant does not appear in the Assigned to picker. The picker only knows people who exist in People. Create the person and reopen the item.

Teams Chat or WhatsApp are missing from the context menu. Two causes. Either the toggle under Settings -> General -> Communication Tools is off, or the person has no email address respectively no phone number. Teams and Slack need the address, WhatsApp and Signal need the number.

Invite to Workspace does nothing. The entry needs a cloud workspace and an email address on the person. In a local workspace there is nobody to invite.

The list is empty although people exist. A filter is active. Open Filter & Sort and choose Clear All. Check the search field too.

The budget overview shows Not set. No project budget is stored. Enter it under Context -> Resources.

A bucket shows no total although action items are assigned. The items have no Planned Budget and no Actual Budget. The assignment alone carries no number. Add the amounts in Action Items.

The amounts look wrong after a settings change. First check whether only the Display Currency was switched. Then the numbers are correct, just shown in a different currency. If the Storage Currency was switched, all data was converted. Only a backup brings that back, see Settings & backups.

Refresh Exchange Rates is greyed out. The button only works once Update Exchange Rates Automatically is on. The app says so in a hint.

The rate fetch fails. TensorPM reports that exchange rates could not be refreshed and that the existing ones were kept. No data is lost. Check the internet connection and try again later.

The Budget tab under Project Insights shows nothing. There are no action items with budget figures, or the project is too young for a trend. The notice reads No Budget Data.

Next steps