---
title: How do placement rules decide which billings a condition applies to?
description: How placement rules and criteria decide when a billing qualifies for a scheme, gets confirmed for payment, or receives an automatic adjustment.
---

[Skip to content](https://konquest.io/en-gb/knowledge-base/how-do-placement-rules-decide-which-billings-a-condition-applies-to#main-content)

English - United Kingdom

Show submenu for translations

![konquest\_knowledge\_base](https://konquest.io/hs-fs/hubfs/konquest_knowledge_base.png?width=640&height=100&name=konquest_knowledge_base.png)

Open main navigation

Close main navigation

- English - United Kingdom
  
  Show submenu for translations
- [Contact us](mailto:support@konquest.io)

[Contact us](mailto:support@konquest.io)

 How can we help you?

- There are no suggestions because the search field is empty.

1. [Konquest](https://konquest.io/en-gb/knowledge-base?hsLang=en-gb)
2. [Placements](https://konquest.io/en-gb/knowledge-base/placements?hsLang=en-gb)
3. [Placement Rules](https://konquest.io/en-gb/knowledge-base/placements?hsLang=en-gb#placement-rules)

# How do placement rules decide which billings a condition applies to?

## Rules let you build conditions — like "only on permanent placements" or "only for billings in the first 30 days" — that control whether a billing qualifies for a scheme, qualifies for payment, or gets an automatic adjustment such as a burden. A rule is made up of one or more criteria, combined either by matching ALL of them or ANY of them, and it's checked both against the placement as a whole and against each individual billing within it. Getting ALL/ANY right, and understanding a couple of criterion-specific quirks below, is usually what makes a rule behave as expected.

**Overview**

Rules are managed under **Placements \> Settings**, in the Rules section. They're defined once, at placement level, and are account-wide — not tied to an individual scheme. For example, a rule called "Confirmed" might match placements that are either Approved or Completed, while a rule called "Employee" might match placements that are Contract terms and have a custom field showing a specific contractor type.

Once a rule exists, you select it within a scheme for one of a few different purposes:

- **Accumulation rules** — whether a billing qualifies to accumulate towards the scheme at all.
- **Confirmation rules** — whether a billing qualifies for payment (separate from whether it accumulates).
- **Modifier rulesets** — whether a billing gets an automatic adjustment applied, such as a burden or a line-item filter.

The rule itself works the same way regardless of where it's used — the same "Confirmed" rule could be selected as an accumulation rule on one scheme and reused as part of a modifier ruleset on another. Each criterion within a rule checks something specific — whether a placement is approved, whether its terms are permanent or contract, whether a billing falls before a certain date, and so on.

Rules are checked twice:

- **Against the whole placement.** If the rule matches at this level, it applies to the placement and to every billing within it.
- **Against each individual billing**, for any rule that didn't already match at placement level. Only that specific billing is affected — not the whole placement.

This two-level check is what allows a rule to be as broad as "any permanent placement" or as narrow as "only billings dated after 1 April on this placement."

**Criteria available**

| Criterion | Checks | Applies at |
| --- | --- | --- |
| Approval | Whether the placement is approved | Placement |
| Completed | Whether the placement is marked completed | Placement |
| Terms type | Contract terms or permanent terms | Placement |
| Company name | The placement's company name — equals, contains, starts with, or ends with a value you set (not case-sensitive, spaces trimmed) | Placement |
| Custom field | A custom field value — exact match, case-sensitive | Placement or billing |
| Minimum/maximum margin | The margin on a billing, as a percentage | Billing |
| Value before date | Whether a billing falls before a date you set | Billing |
| Days from start date | Whether a billing falls within a number of days of the placement's start date | Billing |

Each criterion can also be **inverted** — set to match when the condition *isn't* true (for example, "not approved" instead of "approved"). This is what makes ranges possible, covered below.

**Matching ALL of a rule's criteria vs. ANY of them**

Every rule has a **Type** setting — All or Any — which decides how its criteria are combined. All is the default.

- **All**: every criterion in the rule has to be satisfied.
- **Any**: at least one criterion has to be satisfied.

This choice matters more than it looks, especially once a rule mixes a placement-level criterion (like Approval) with a billing-level one (like Minimum margin):

- Under **Any**, if the placement-level criterion is satisfied on its own, the rule applies to the *entire* placement — every billing included — regardless of whether the billing-level criterion matches. In other words, a satisfied placement-level criterion under Any overrides the billing-level check entirely.
- Under **All**, if the placement-level criterion isn't satisfied, the rule doesn't apply at all — not even to individual billings that would otherwise match the billing-level criterion.

If a rule only contains billing-level criteria (no placement-level ones), it can only ever apply per-billing — it will never apply to a placement as a whole, no matter which combination type is set.

**Building a range by pairing a criterion with its inverted opposite**

A single "minimum" or "before" criterion is open-ended — it matches everything above (or before) the value you set. To build a bounded range, add the same criterion twice, ticking **Inverted** on the second one, and set the rule's Type to **All**.

*Example: a margin band from 20% up to (but not including) 30%*

1. Under **Add Criteria**, select Minimum Margin, enter 20%, and click Add Criteria.
2. Add Minimum Margin again, enter 30%, tick **Inverted**, and click Add Criteria — this gives you the upper bound.
3. Set the rule's Type to **All**.

The result matches margins of 20% and above, but strictly below 30%. A margin of exactly 20% is included; a margin of exactly 30% is not.

*Example: billings dated from 1 January up to (but not including) 1 April*

1. Add a Value Before Date criterion for 1 January, ticked **Inverted** (this gives you "not before," i.e. on or after).
2. Add a Value Before Date criterion for 1 April, left un-inverted.
3. Set the rule's Type to **All**.

**A common mistake: setting a range rule to Any instead of All**

If you build a range this way but leave (or switch) the Type to **Any**, the rule stops behaving as a range and matches almost everything instead — because every value is either above your lower bound or below your upper bound, so at least one of the two criteria is always satisfied. If a rule that's meant to isolate a specific band or window seems to be matching billings it shouldn't, this is the first thing to check: **Placements \> Settings \> Rules**, open the rule, and confirm the Type is set to All.

**Minimum/maximum margin: is it before or after burdens?**

This one catches people out often enough to call out on its own. Margin is calculated **after** pay and after any hourly-rate burden have already been applied, but **before** any burden that's driven by another rule (a percentage-based burden, for example). In practice:

- If a burden is a flat hourly rate, margin criteria will already reflect it.
- If a burden is applied by a rule elsewhere in your scheme (a percentage-based burden), a margin criterion won't yet reflect that burden's effect — it's evaluated on the figures as they stood before that burden was added.

**Margin criteria never match permanent placements.** A Minimum Margin criterion simply won't match anything on a permanent placement — there's no margin to evaluate. The trap is the inverted form: tick **Inverted** on a margin criterion (to use it as an upper bound, as in the range example above) and it's treated as satisfied for every billing on a permanent placement, because there's nothing to fail against. If a rule using an inverted margin criterion is firing unexpectedly across permanent placements, this is why — the rule may need an added Terms Type criterion to exclude permanent placements explicitly.

**Other criteria worth knowing**

- **Company name** ignores case and leading/trailing spaces, and supports partial matches (contains, starts with, ends with) as well as an exact match.
- **Custom field** is checked exactly and is case-sensitive, unlike company name. It can be set at placement level, billing level, or both — if you need it to catch changes on individual billings (rather than only the placement's own field), make sure it's added as a billing-level criterion.
- **Days from start date** counts from the placement's start date up to (but not including) the day count you set — so "within 30 days of start" covers days 0–29, not day 30 itself. Inverted, it matches both before the placement started and everything from day 30 onward.
- **Value before date** only ever applies at billing level — it has no placement-level equivalent, so it will never make a rule apply to a whole placement.

**Need help?**

If a rule isn't applying the way you expect, get in touch with your Konquest support contact with the rule name (from **Placements \> Settings \> Rules**) and an example placement or billing that's behaving unexpectedly — we can check the rule's criteria and Type setting against what you're trying to achieve.

- [Integrations](https://konquest.io/en-gb/knowledge-base/integrations?hsLang=en-gb#main-content)

    - [MCP](https://konquest.io/en-gb/knowledge-base/integrations?hsLang=en-gb#mcp)
- [Consultants](https://konquest.io/en-gb/knowledge-base/consultants?hsLang=en-gb)
- [Managers](https://konquest.io/en-gb/knowledge-base/managers?hsLang=en-gb)
- [Statements](https://konquest.io/en-gb/knowledge-base/statements?hsLang=en-gb#main-content)

    - [Updates](https://konquest.io/en-gb/knowledge-base/statements?hsLang=en-gb#updates)
- [Placements](https://konquest.io/en-gb/knowledge-base/placements?hsLang=en-gb#main-content)

    - [Placement Rules](https://konquest.io/en-gb/knowledge-base/placements?hsLang=en-gb#placement-rules)
    - [Import](https://konquest.io/en-gb/knowledge-base/placements?hsLang=en-gb#import)
- [Teams](https://konquest.io/en-gb/knowledge-base/teams?hsLang=en-gb#main-content)

    - [Team Enrolments](https://konquest.io/en-gb/knowledge-base/teams?hsLang=en-gb#team-enrolments)
- [Users](https://konquest.io/en-gb/knowledge-base/users?hsLang=en-gb)

[mailto:support@konquest.io](mailto:support@konquest.io) <https://www.linkedin.com/company/konquest>

Copyright © 2026, Konquest