Biller Plus is deterministic: the same Jira worklogs, rates and settings always give the same numbers, and every number traces back to the worklogs that produced it (Project → Breakdown → click a row → worklogs).
Money and rounding
- All amounts are stored as whole cents (minor units) with a currency. No floating-point money.
- One worklog’s amount = hours × hourly rate, rounded to the nearest cent (half away from zero).
- Invoice lines are priced as total hours × rate, so each line multiplies out exactly.
Which rate applies (most specific wins)
- Project + person · 2. Project + role · 3. Client + person · 4. Client + role · 5. Person · 6. Role · 7. Default
Within a level, the rate with the latest effective date on or before the worklog date applies. A raise never changes old worklogs. A person’s role is also effective-dated. The applied rate, its level and any exchange rate are stored with each calculated worklog.
Currency
Each project has one currency. A rate in another currency is converted with the exchange rate effective on the worklog date (entered by a finance administrator). Historic conversions never change.
Which project a worklog belongs to
A worklog belongs to at most one financial project. If scopes overlap, the most specific scope wins: selected issues → Epic → JQL filter → Jira project; ties go to the project created first.
Billable time
A worklog is billable if someone marked it billable, otherwise it uses the project default (internal projects default to non-billable). Cost always applies; billable value applies only to billable time.
Formulas
| Number | Formula |
|---|---|
| Labour cost | Σ hours × effective cost rate |
| Billable value | Σ billable hours × effective billing rate |
| Total cost | Labour cost + expenses |
| Revenue (T&M) | Billable value + billable expenses |
| Revenue (fixed fee) | Contract value × % complete (max 100%) + billable expenses |
| Revenue (retainer) | Monthly fee for each month elapsed (part months by days) |
| Revenue (milestones) | Sum of completed milestones |
| Revenue (internal) | 0 |
| Profit | Revenue − total cost |
| Margin | Profit ÷ revenue (“—” when revenue is 0) |
| Value written off (fixed fee) | Billable value − recognized revenue |
| Budget consumed | Total cost ÷ current cost budget |
| Current budget | Original budget + approved changes |
% complete (one method per project)
- Hours (default): hours logged ÷ (hours logged + remaining estimates). With no estimates: hours logged ÷ hours budget. With neither: unknown (“—”), never zero.
- Issues: done issues ÷ all issues in scope. Story points: done points ÷ all points. Manual: entered.
Forecast cost (one method per project)
- Actual ÷ % complete (default). With the hours method this equals actual + remaining hours × blended rate.
- Remaining estimates: actual + remaining estimate × blended cost per hour so far.
- Weekly burn: actual + average weekly burn (last 4 weeks) × weeks until the end date.
- Manual: actual + expected remaining hours × blended rate, or a manual forecast cost. A forecast is never lower than the actual cost. Forecast total cost adds expenses to date.
Health
- Budget check: forecast ÷ budget ≤ 90% Healthy, ≤ 100% At Risk, above Over Budget.
- Margin check: ≥ 35% Healthy, ≥ 20% At Risk, below Over Budget.
- The worst check wins. Thresholds are configurable per project and in Settings.
Hidden rate mode
People without rate access see money only for groups of 3 or more people. Person and worklog rows show hours only. When one small group is hidden, the next smallest group is hidden too, so a hidden amount cannot be found by subtracting visible rows from the total.