Splitting a Cost Across Projects by Attribute

Flowtly Editorial Team17 minUpdated

One supplier invoice often has to be shared out across many projects — a security contract covering every building on a site, a cleaning invoice covering every tenant of one building. Entering those shares by hand is slow and drifts out of step whenever a tenant moves in or out.

Flowtly can calculate the shares for you from attributes: numeric properties you record once on your assets and projects. The invoice is then divided in proportion to those numbers, and the amounts always add up to the invoice total.

The two drivers

A split is driven by attribute values, not by anything stored on the invoice. Two levels are available.

  • An attribute on assets — recorded on buildings, plots or other properties. It decides how much of the cost each asset carries.
  • An attribute on projects — recorded on the projects you invoice (typically one project per tenant). It decides how the asset's portion is divided between the projects sitting on it.

An attribute belongs to one or the other. The same attribute name can exist twice, once for assets and once for projects, so check which one you are editing before you type a value. See Two attributes with the same name below.

Where the settings live

The attribute definitions are under Attributes. Each definition has a name, a type (use number) and a unit shown next to the value — m2 for areas, % for percentages.

The value on an asset is on the asset itself, under the Attributes tab of a building or plot in Assets.

The value on a project is on the project, under its own Attributes tab in Projects.

Recording a value is the whole configuration — there is no separate mapping screen. An asset or project with no value for the attribute simply does not take part in that split.

Applying a split to an invoice

Open the supplier invoice and expand Categorization. Above the list of positions you will find the buttons that fill the split for you:

  • Fill by <attribute> — a flat split across projects, in proportion to one project attribute.
  • Fill by cascade of <asset attribute> × <project attribute> — the two-stage split described below.
  • Fill by meter consumption — a split based on meter readings rather than attributes.
  • Settle energy — offered instead of the meter fill for electricity when your organisation settles electricity from the invoice. See Settling an Electricity Invoice Across Tenants.
  • Clear all — empties the split so you can start again.

These buttons work on the whole-invoice split. A line that has a project split of its own keeps it: the attribute and cascade fills share out only the net amount the lines leave, and Clear all leaves the lines' rows in place. See Splitting one invoice line across projects in Transaction Attachments.

An invoice covering several buildings

A utility or service invoice for a whole site often mixes two kinds of cost: costs that belong to one project, such as a fit-out for one tenant, and costs that are re-invoiced to every tenant. Split it in two steps.

  1. Give each fit-out line its project, on the line itself. A line shared between a few known projects gets a split of its own instead.
  2. Fill the rest by area. Press Fill by <attribute> with your area attribute, for example Fill by Powierzchnia, or a cascade fill. It shares out across the tenants only the remainder: the net amount the lines with a project of their own leave.

A line with a project of its own keeps its whole net amount, also when its own split has a struck row or falls short of the line's net amount, so none of its money is spread across the tenants a second time. For example, an invoice of 3,000.00 net with a 1,200.00 fit-out line coded to one tenant's project leaves 1,800.00 to split by area. The fit-out stays on that project, and the tenants' rows add up to exactly 1,800.00.

Fill by meter consumption asks for the utility type, the unit price and, optionally, a consumption period. Period from and Period to start empty. Leave both empty and the split uses the period the invoice itself states, as an e-invoice from KSeF does; if it states none, the document's accounting period; and failing that, the invoice month. To use a different period, set both dates: Fill stays unavailable while only one of them is set. The dates follow your organisation's date format. After the fill, the meter summary shows the period that was actually used, as Consumption period: 01.09.2026 - 30.09.2026.

Pressing a button proposes a set of positions with amounts. Nothing is saved until you save the invoice, so you can press a different button, or clear and retry, without consequence.

Lease gross area divided by occupied gross area

If your organisation uses the occupied gross area basis, each lease's share is its booked unit area plus its common-area share, divided by the total occupied gross area across the organisation. Both sides use bookings and area values effective on the same date. Vacant space and parking spaces are excluded; an active own-use booking is included. Duplicate reservations do not multiply a unit's area or common share.

For example, a lease with 70 m² of unit area and 6 m² of common share has a gross area of 76 m². With 8,597.32 m² occupied in total, its share displays as 0.88%. These are example values: changing bookings or effective areas changes the calculation. Selecting fewer invoice rows does not reduce the organisation-wide denominator.

The working beneath each row shows the numerator, denominator, date and named basis, also after reopening the invoice. The calculation uses the source values before rounding percentages for display or allocating money. A complete split across the occupied pool totals 100% and the invoice's net amount after rounding. Omitting or striking a project leaves its share unallocated.

Changing the organisation's basis does not recalculate saved invoices. Their working stays as saved, and frozen-month correction calculations retain the original basis. To update an open invoice, explicitly fill its split again. The older building gross area basis includes vacancy and is identified separately in saved working.

How the two-stage cascade works

The cascade answers "which building, then which tenant of that building".

  1. The asset's share is its attribute value divided by the sum of that attribute across every asset that carries it.
  2. The tenant's share within that asset is the project's attribute value divided by the sum of the same attribute across the projects booked on that asset.
  3. The final weight is the asset share multiplied by the tenant share, and the invoice's net amount is divided by those weights.

Two details worth knowing, because they explain results that otherwise look wrong:

  • Which tenants take part is decided by the invoice's receipt date. Only projects with an asset booking active on that date are included. A tenant who moved out before the invoice arrived is not in the split, and one who moved in afterwards is not either.
  • Amounts are rounded so the split is exact. The last grosze are handed to the largest fractions, so the positions always total the invoice's net amount rather than falling a grosz short.

A worked example

A site records Ochrona on its buildings as a percentage:

Building Ochrona
Budynek A 23.98 %
Budynek B 23.42 %
Budynek C 34.60 %
Taneczna 18A 5 %
Taneczna 18C 13 %

Those five values total 100, so each building's share is simply its own percentage. A security invoice run through the cascade gives Budynek C 34.60 % of the cost, which is then divided between the tenants of Budynek C in proportion to their Powierzchnia in m².

The values do not have to add up to 100. If they totalled 200, each building would still take its own value divided by 200 — the total only affects readability, not correctness.

Checking that a split is right

After pressing a cascade or fill button, check three things before saving.

  1. The projects listed are the ones you expect. A missing tenant almost always means either no attribute value on that project, or no booking active on the invoice's receipt date.
  2. The percentages look like the shares you know. Each position shows its weight as a percentage next to the amount. Hover over it to see how the weight was worked out. For a tenant charged through two or more buildings, the working lists one line per building, with the tenant's share of that building and the building's share.
  3. The total matches the invoice. The categorisation panel shows the sum of the project allocation; it should read 100 % and the invoice's net amount.

The working under each row

After Fill by <attribute>, each row the fill gave a share also shows its working on a line under it, so the percentage can be checked against your own table without hovering:

301 m² of 8 157 m² = 3.69% · Projects counted: 20 · As of 20.10.2026 · Source: booked units

  • The fraction — the project's own value of the attribute, the total across the projects counted, and the percentage that gives.
  • Projects counted — the rows whose value is above zero, which are the values in the total. A struck project is counted, because its value stays in the total.
  • As of — the date the values were read for.
  • Source — where the values came from: booked units when they are the areas of the units the project has booked, value set on the project when they were entered on the project.

When lines of the invoice already hold part of the net amount, the line also says Share of the net the lines leave: its percentage is of what the lines leave, while the row's own percentage is of the whole invoice, so the two differ.

A struck row and a row left at 0 show no line. After a cascade fill, the line shows only the date, because a cascade percentage is not one value over one total; its working per building stays in the hover.

The line describes the fill that made it. A new fill replaces it, and Redistribute to the rest removes the lines, because the amounts it gives no longer follow from them. The line is not stored with the split: once the invoice is reopened or the page reloaded, the rows show their amounts and percentages without it. Check the working before you leave the invoice.

Once saved, the same figures appear on each project under Project financials › Related costs, where every row shows both the full invoice amount and the share assigned to that project — the quickest way to confirm a project was charged what you intended.

Checking the working before an invoice arrives

The same arithmetic can be read without opening an invoice. Open a building in Assets, go to its Attributes tab and expand the attribute's row. Every row can be expanded, even for an attribute recorded only once.

For an attribute that drives a cascade, the row opens How <attribute> is split across tenants: one line for each tenant the attribute shares a cost across, in every building that carries it. Each line shows its inputs as well as its result:

  • Its area — the tenant's own value of the project attribute, for example 120.0000 m².
  • Share of the building — that value divided by the total across the tenants of its building, written out as 120.0000 / 300.0000 = 40.00%. Where no tenant of the building has a value, it reads split equally across <number> instead.
  • The building's share (<attribute>) — the building's value divided by the total across every building that carries the attribute, as 23.9800 % / 100.0000 % = 23.98%.
  • Effective percentage — the part of the invoice the tenant carries: the two shares multiplied, here 40.00 % × 23.98 % = 9.59 %.

Both denominators are on screen, so every figure can be checked by hand. Under the table, the attribute's total across all buildings is the denominator of each building's share. A tenant charged through two or more buildings gets one line per building and a total line with its overall effective percentage.

When a building that carries the attribute has no tenant for the period, its share is billed to nobody and the other shares grow to cover it. A note under the table then states the number every percentage is divided by, because without it the two shares no longer multiply to the effective percentage. If Taneczna 18A, at 5 %, had no tenant, the note would read 0.9500, and the tenant above would carry 40.00 % × 23.98 % ÷ 0.9500 = 10.10 %.

When more than one split rule uses the attribute, a Split rule list chooses which one the working follows. An attribute that drives no split says so in the row instead of showing a table. To see which attributes each split rule pairs, or to correct a rule's attributes, ask a connected AI assistant; see Connecting AI Tools.

The panel also shows a tenant that is booked on a building and still carries nothing, because the units it is booked on have no area recorded. Under the tenant's name it lists Booked units without area with the names of those units, also when only some of the tenant's units lack an area. A tenant left with no area at all shows a dash instead of an effective percentage; hover over it to read why. Record the area on those units to give the tenant its share.

Leaving a client out of a split

Not every project a fill proposes should carry part of the cost. A tenant whose service is billed under a separate contract, a unit the supplier never attended, a project included only because it happens to hold a value for the attribute — any of these may need to be taken out of the split by hand.

Use the remove control on that project's row. The row is struck from the split rather than erased: the project stays listed with an amount of zero and is marked as excluded. That record is the point. It is what tells the split that the project was left out deliberately, and pressing a fill or cascade button again leaves every struck project out instead of proposing it once more.

Two things follow from striking rather than erasing.

  • The other rows keep the amounts they already have. Striking a client never quietly raises what anyone else is charged. If the struck share should be carried by the remaining projects, type the amounts you want on their rows yourself. Pressing Fill by <attribute> again does not move it: a struck project keeps its place in the calculation at zero, so its share stays unassigned and the panel total shows the shortfall.
  • Clear all is a different action. It empties the whole-invoice split completely, including the record of which projects were struck, so the next fill proposes every eligible project again. When you want a project to stay out, use the control on its row, not Clear all.

When every project with a value is struck

If every project that holds a value for the attribute is struck, Fill by <attribute> has nobody left to charge. When the split still has a row that is not struck, such as the row for the supplier's default project, the fill refuses rather than setting the whole invoice to zero: it names the rows it would drop and changes nothing. Restore a struck project, record the attribute on another project, or strike or remove the named rows, then fill again.

When every row on the split is struck and none of them holds an amount, the fill proposes the other projects that hold a value for the attribute, and the struck projects stay at zero.

A row that holds an amount next to a struck row of the same project is refused in the same way, by every fill button, including on the supplier's default project. Restore or remove the struck row, or strike or remove the named row, then fill again.

When a split does not cover the whole amount

A saved split whose positions do not add up to the document's net amount is flagged on the document in the attachments list, under the label Incomplete split — no exclusions marked.

The flag is about an unexplained gap. A project you struck from the split is an explanation, so a split you deliberately left short that way is not flagged. The label appears where the amounts simply fall short of the net amount and nothing on the split accounts for the difference — the case where part of a supplier invoice has quietly ended up charged to nobody.

There are two ways to settle it, and which one is right depends on where the money should have gone.

  • The missing amount belongs to somebody. Add it to the projects that should carry it, or press a fill button to share the whole net amount out again.
  • The missing amount belongs to nobody you are charging. Strike the projects that should not carry any of it, as described above, so the gap is recorded as intended rather than left unexplained.

The check applies to every saved split, so a document filed some time ago can carry the label as readily as one entered today. That is a prompt to look at the split, not a sign that anything about the document has changed.

Common problems

Two attributes with the same name. Nothing stops two definitions sharing a name — one bound to assets and one to projects. Only one of them is the one your split uses. If a split ignores values you are sure you entered, open Attributes and confirm you edited the definition that belongs to the right level.

A tenant renting several units in one building. A project booked on more than one asset is counted once, under a single asset, rather than once per unit. Its share is not multiplied by the number of units it rents.

Tenants with no value for the attribute. If none of the projects booked on an asset have a value, that asset's portion is divided equally between them rather than being dropped. An equal split where you expected a proportional one is a sign the values are missing, not that the cost was lost.

Vacant space. Only assets and projects that carry a value take part, so unlet units are outside the calculation and the occupied ones absorb the whole cost between them. If you want vacancy to carry its own share, it needs to exist as a project with an attribute value like any other.

Example use cases

  • Sharing a site-wide invoice: Fill a security or cleaning invoice across tenants in proportion to an attribute such as area, so the shares add up to the invoice net amount.
  • Splitting by building, then tenant: Use the cascade fill to divide the cost between buildings first and then between the tenants of each building.
  • Leaving a tenant out: Strike a project from the split so it stays out when you press a fill button again.
  • Checking the working: Expand an attribute's row on a building to see how each tenant's percentage was calculated.
  • Answering a tenant's question about its share: Right after filling by area, read the line under the tenant's row, such as 301 m² of 8 157 m² = 3.69%, and compare its area and total with the tenant's own table.

Related tutorials

Related terms