Formula fields: default values, calculations, and conditions on offer fields
Last updated: October 15, 2026
A custom or default field on an offer can now get its value automatically — a fixed default, or a value calculated from other fields — instead of a recruiter typing it in every time. You can also make a field show or hide based on other fields, not just department and office.
Who can do this: Admin, Super Admin — the same permission that already governs managing offer fields. No new permission was introduced for this feature.
Where to find it: Settings → Custom fields → Offer fields, in the field drawer's Values section (and, for AI-assisted setup, the assistant panel in that same drawer).
Setting a field's value
Open an offer field (new or existing) and look for the Values section. It has two modes:
Regular — the field's normal choices (for a select field), plus an optional Set default: a fixed value that pre-fills the field.
Formula — the value is calculated from a formula you write, referencing other fields.
If you don't set anything in Regular mode, the field behaves exactly as it does today — blank until the user fills it in.
Under either mode, there's a Prevent edits checkbox. Leave it off to let the recruiter change the pre-filled value; turn it on to lock the field as read-only. Switching to Formula mode turns Prevent edits on automatically (since a calculated value isn't normally meant to be hand-edited), but you can still uncheck it afterward if you want a formula's result to stay editable.
Writing a formula
Reference another field by wrapping its name in curly braces: {Field name}. To reference a field on the offer's job or requisition, prefix it: {Job.Field name} or {Requisition.Field name}.
Operators: + - * / % (arithmetic), = <> > >= < <= (comparison — != also works as an alternate spelling of <>), and and / or (logical, case-insensitive).
Functions, grouped as they appear in the formula editor:
Math: round(value, decimals), ceiling(value), floor(value), abs(value), min(a, b), max(a, b)
Date: today(), date(year, month, day), parsedate(text, format), dateadd(date, number, unit), datediff(later, earlier, unit), now(), days_between(from, to), months_between(from, to), age_years(from, to), business_days(from, to), start_day(unit, date), end_day(unit, date), lastday(date), quarter(date), weekday(date), dayname(date), format_date(date, format), year(date), month(date), day(date)
Text: concat(a, b), len(text), upper(text), lower(text), trim(text), contains(needle, haystack), equaltext(a, b)
Logic: if(condition, then, else) — the else is optional — and(a, b), or(a, b), not(condition)
Empty values: isnull(value), ifnull(value, fallback), coalesce(a, b)
For example, a "Total compensation" offer field calculated as {Base salary} + {Bonus amount} — both fields on the same offer.
Setting a display condition
Under Display conditions, build the rule(s) that decide when a field shows. Office and Department live in the same list as any other offer field — add as many rows as you need, and they all combine with AND.
The operator you get depends on the watched field's type — a single-select field offers "is" / "is not," a multi-select field offers the "includes" operators, and so on.
A field hidden by its condition stores no value. If a recruiter already filled it in and a later change hides it, Kula clears what was stored.
Setting up a field with AI
Instead of configuring a formula or condition by hand, describe what you want in the assistant panel (Describe what you need) — for example, "Bonus is the annual salary times the bonus percentage." The assistant proposes a field (its type, formula or condition, and any new fields it needs to create along the way), and shows you the whole plan — including every field it's about to reuse or create — before anything is saved. Nothing is created until you click Add to offer form.
Good to know
Offer fields only, for now. Default values, formulas, display conditions, and the AI assistant are all scoped to Offer custom and default fields — Job and Requisition fields don't have this yet.
A field can't have both a default and a formula. Switching between Regular and Formula replaces whatever was set in the other mode.
Kula blocks saving a formula that doesn't make sense — a result type that doesn't match the field, a circular reference, arithmetic across two different currencies, or a reference that breaks the Requisition → Job → Offer hierarchy (an offer can read its job and requisition; a requisition can't read either).
You can't delete or change the type of a field another formula or condition depends on. Kula blocks it and shows you which fields would break.
If a referenced field is empty, the calculated field stays empty too — it resolves once every field it depends on has a value.
If someone manually edits a calculated value and an input it depends on later changes, Kula keeps their edit rather than silently recalculating over it. A "Reset to calculated value" action is available if they want the formula's answer back.
Need help?
If you have questions or need assistance, reach out to us at support@kula.ai or use the in-app chat.