Powered by
movonte
Usage Manual · v2.1 · July 2026

Every hour,
accounted for.

WorkLedger is a Jira Cloud app for logging work and reporting on it at scale. Jira worklogs remain the canonical record — the app adds a fast, filterable reporting layer (timesheet board, totals, CSV export) plus per-worklog metadata Jira doesn't have natively: a billable flag and free-form tags. Expected-hours tracking, logging reminders, and monthly period locks keep timesheets complete and closeable.

Audience
Users · Admins
Surface
Jira Cloud
Platform
Atlassian Forge
Publisher
movonte

All names, sites, projects, and figures in this manual are fictional (e.g. acme.atlassian.net, project PROJ, user Alex Rivera).

Section01
01

The app's surfaces

WorkLedger shows up in four places inside Jira. Everything else in this manual hangs off one of these.

A
jira sidebar → apps
Workledger (ledger) — reports dashboard
The reporting home: timesheet board, totals, CSV export. Visible to anyone with dashboard access (see §5).
B
issue → ··· menu
Log work (ledger)
Compact modal for logging time on the issue. Available to anyone who can edit the issue.
C
issue → activity area
Work logs (ledger)
Same form plus the issue's worklog history and a per-issue timesheet board. Anyone who can view the issue.
D
jira admin section
Workledger Admin
Diagnostics page for site/Jira admins and dashboard admins (see §6).
Section02
02

Logging work

Open an issue and use Log work (ledger) — a compact modal — or the Work logs (ledger) activity panel, which offers the same form plus the issue's worklog history and a per-issue timesheet board.

issue → ··· → log work (ledger)
WorkLedger Log work modal
Fig. 02–1The Log work form: Started, Duration, Comment, Billable, and Tags.

Fields

FieldWhat it does
Started Date and time the work began.
Duration Accepts 1h 30m, 2h, 45m, or a bare number, which is read as minutes (90 = 1h 30m).
Comment Free text — "What did you work on?".
Billable Checkbox. WorkLedger metadata stored on the worklog; drives the Billable / Non-billable totals and filters in the dashboard. billable
Tags Comma-separated labels, e.g. client-a, review. Searchable from the dashboard's Attribute value filter.

Buttons

  • Save worklog — creates (or updates, when editing) the entry in Jira.
  • Delete — removes the entry from Jira.
  • Reset / Cancel edit — clears the form.

The Issue worklogs list underneath shows every entry on the issue — your own entries have an Edit button.

issue → activity → work logs (ledger)
Work logs activity panel with per-issue timesheet board
Fig. 02–2The Work logs (ledger) activity panel: the same form plus the issue's worklog history, grouped by person on a per-issue timesheet board.
i
Everything lands in Jira
Everything you save lands in Jira itself — it appears in Jira's native work log, time tracking, and any other tool that reads worklogs. WorkLedger's metadata (billable, tags) travels with the worklog as a worklog property.
!
Locked months block edits
If the month your entry starts in is locked (§4.2), the form disables Save and Delete and shows a banner like “June 2026 is locked.” Moving an entry into or out of a locked month is blocked the same way.
Section03
03

The reports dashboard

Apps → Workledger (ledger). The page has up to three tabs: Report, Indexing & sync, and Permissions — the last two appear only for people with config access (see §5).

apps → workledger (ledger) → report
WorkLedger reports dashboard
Fig. 03–1The Report tab: filters at the top, four summary cards, and the timesheet board grouped by person.

3.1 Filters

FilterHow it behaves
From / To The reporting window, matched against each worklog's started date. Defaults to the last 365 days.
User Type a display name and pick from the suggestions. Multiple users can be selected; leave empty for all users. The picker also finds people who logged work and were later deactivated. Visible only to viewers with See all worklogs — everyone else is always clamped to their own entries.
Project Type a project name or key and pick from the list. Multiple projects can be selected; leave empty for all projects.
Advanced JQL Jira's native JQL editor with autocomplete. Press Enter to run, Shift+Enter for a new line. See details below.
Billable All entries, Billable only, or Non-billable only.
Group by Person (default), Project, or Tag — the dimension the timesheet board's top-level rows (and pagination) group on. See §3.3.
Attribute value Comma-separated tokens, e.g. client-a, manual. An entry matches when any token appears in its tags or other metadata fields. Matching is case-insensitive and ignores spaces/hyphens/underscores, so client a also finds client-a.

Click Apply filters to run the report.

Advanced JQL in detail

project = PROJ AND type = Bug
assignee = currentUser() ORDER BY updated DESC
labels = client-a AND status changed during (startOfMonth(), now())
  • The JQL is combined (ANDed) with the date window and the other filters — with one exception: it replaces the Project filter (the one dimension they share) while set. A banner reminds you of this.
  • The query runs with your Jira permissions, so it can only ever match issues you can browse.
  • Very broad queries are capped at the first 500 matching issues; the report tells you when that truncation happened.
report → filters → advanced jql
Advanced JQL editor with autocomplete
Fig. 03–2The Advanced JQL editor: Jira's native autocomplete as you type, Enter to search, Shift+Enter for a new line.

3.2 Summary metrics

Four cards summarize everything matching the filters — not just the visible page: Total hours, Billable hours, Non-billable hours, and Entries (worklog count).

3.3 Timesheet board

The board groups worklogs by the Group by dimension — one top-level row per person (default), project, or tag — with time columns that adapt to your date window: days for short windows, then weeks, then months for long ones.

People / worklogTotalMarAprMay
Alex Rivera — 4 issues · 328 worklogs204h 30m90h71h43h 30m
Sam Patel — 3 issues · 288 worklogs201h 30m64h76h61h 30m
Visible total406h154h147h105h
Monthly columns for a long date window. Click a person's row to expand their issues.
  • Click a top-level row to expand its issues; each issue row shows the issue key, its summary, and the time per column.
  • Worklogs you're allowed to change show an Edit button when expanded — edits open the same form as the issue surfaces.
  • Group by Project answers “hours per client this month”: one row per project (with the project's name when known), expandable to its issues.
  • Group by Tag groups by each entry's tags. An entry with several tags appears under each of them, so tag totals can add up to more than the filtered total (the caption reminds you); untagged time is collected under (no tag). Tag grouping loads at most 5,000 worklogs per page.
  • Heavy reports paginate by the grouping dimension (Previous page / Next page). The board caption tells you how many people / projects / tags and worklogs the current page shows. The summary cards always reflect the full filtered total — if the page shows fewer entries than the Entries card, there are more pages (or more detail rows than the display cap) to page through.

Expected vs. logged

When an admin has configured expected hours (§4.1) and the board is grouped by person, each person's Total column reads logged / expected (e.g. 33h / 40h) and turns red when they logged less than expected.

People / worklogLogged / expectedMonTueWed
Alex Rivera — 2 issues · 14 worklogs18h / 24h8h6h4h
Sam Patel — 3 issues · 19 worklogs24h / 24h8h8h8h
Visible total · 1 behind42h / 48h16h14h12h
A mid-week view with daily columns. Alex's total is red — behind the expected hours for the workdays that have already passed.

Expected time = Mon–Fri workdays in the From/To window (counting only days up to today) × that person's hours per day, so a mid-week view only expects the days that have already happened. An N behind pill counts how many people on the page are under their expected hours, and a Sort by missing time toggle reorders the page so the largest gaps come first.

i
When expected figures appear
Expected figures show only when the report isn't narrowed by the Project, Advanced JQL, Billable, or Attribute filters — a person's expected hours aren't scoped to a project or metadata slice, so the comparison would be misleading there. Date and User filters keep them visible.

Edited after lock

An issue row (or its top-level row) can carry a small ⚠ edited after lock pill: one or more of its worklogs sit in a locked month (§4.2) but changed after the lock was set — meaning the change came through a surface the lock can't guard, such as Jira's native work log. Hover the pill for the count. The same information is in the CSV's editedAfterLock column.

3.4 Logging time from the board

Anyone who can open the dashboard can record time without leaving it. When the board is grouped by person and showing day columns (narrow the From/To window to about two weeks or less to switch columns to days), each day cell shows a small on hover and is clickable:

  • Clicking a person's day cell opens a floating window listing everything that person logged that day, grouped so you can see each issue.
  • Clicking a cell on an expanded issue row opens the same window scoped to that one issue and day — even when the cell is currently empty, so you can log fresh time against that issue for that day.

In the window you can…

  • Review the day's worklogs (duration, issue, start time, comment, billable / tags).
  • Add a new worklog: set duration (1h 30m or bare minutes), start time (pre-filled to the chosen day), comment, billable flag, and tags, then Add worklog. There is no issue picker — the entry attaches to the issue of the cell you opened, or, from a person cell with several issues that day, to the issue you pick from the Log to: chips.
  • Edit or Delete your own entries via the Edit button on each row.
i
A few rules
New time is always logged as you, exactly like the issue surfaces — you can view other people's day windows (subject to See all worklogs) but the add / edit form only appears on your own rows. Worklogs in a locked month (§4.2) can't be added, changed, or deleted; the window disables the form and says so. After you save, the board and window refresh in place, so new totals show immediately.

3.5 Logging reminders

Built on expected hours (§4.1), reminders nudge people to keep their time up to date. They are on by default and can be switched off entirely (§4.1).

  • Your weekly nudge — whenever your logged time for the running week (Monday through today) is below what's expected of you, a dismissible banner appears on the dashboard and on the issue surfaces: “You've logged 12h of 40h expected this week.” It disappears the moment you catch up (including time pre-logged for later in the week), and closing it with the × keeps it hidden for the rest of that week. People excluded from tracking (a 0 h/day override) never see it.
  • “Who's behind last week” — viewers with See all worklogs (§5) get an extra card at the top of the Report tab listing everyone who finished the previous week under their expected hours, largest gap first (e.g. Alex Rivera — 26h of 40h logged · −14h). It shows nothing when everyone is caught up.
i
Read-only, stays inside Jira
The week is computed in your browser's local time, and these figures are read-only — no email or external message is sent, which keeps the app within Atlassian's Runs on Atlassian eligibility. A future opt-in Slack / Teams webhook is the only channel that could push outside Jira, and it is deliberately out of scope for now.

3.6 CSV export

Export CSV downloads the currently loaded result set as workledger-report-<from>-to-<to>.csv with the columns:

project, issue, worklogId, userAccountId, userName, startedAt,
timeSpentHours, billable, accountKey, categoryKey, origin,
approvalState, editedAfterLock, comment
i
Apply filters first
The export matches what the report shows — including your permission clamp.
Section04config access
04

Settings & sync

The dashboard reads from WorkLedger's synchronized index, not live from Jira on every query — that's what keeps large reports fast. This tab holds the app's settings and shows and controls that synchronization.

4.1 Expected hours

The reference point for the board's logged / expected comparison (§3.3):

  • Default hours per workday — applies to everyone without an override. Ships as 8; fractions like 7.5 work.
  • Per-user overrides — search for a person and set their own hours per day, e.g. 4 for a part-timer. Setting an override to 0 excludes that person from expected-hours tracking entirely (bots, service accounts, contractors paid per deliverable) — their row shows plain logged time with no expected figure and they are never flagged as behind.
  • Show logging reminders — a checkbox (on by default) that controls the weekly nudge and the “Who's behind last week” digest (§3.5). Uncheck it to switch off both everywhere, while keeping the board's logged / expected comparison.

Workdays are Monday–Friday; holidays and individual schedules beyond the hours-per-day number aren't modeled. Click Save expected hours to apply — the board and reminders reflect the change immediately.

4.2 Period locks (close a month)

When a month's timesheets have been billed or paid out, lock it: pick the month in the Period locks card and click Lock month. From that moment WorkLedger blocks adding, changing, and deleting any worklog whose started date falls in that month — on every app surface, for everyone, including admins. Attempts are refused with a banner like “June 2026 is locked.” Moving an entry into or out of a locked month counts as changing it and is blocked too. Unlock restores normal behavior at any time; locking only affects edits, never reporting — locked months stay fully visible in the dashboard.

!
Honest limitation
A lock guards WorkLedger's own surfaces only. Jira's native work log dialog, the REST API, and other apps can still change worklogs in a locked month. WorkLedger doesn't try to revert such edits; instead the daily sync picks them up and the report marks the affected entries with an ⚠ edited after lock pill (§3.3) and the editedAfterLock CSV column, so out-of-band changes are visible rather than silently accepted.
apps → workledger (ledger) → settings & sync
Settings & sync tab: Expected hours, Period locks, Background indexing, and Projection sync health
Fig. 04–1The Settings & sync tab: Expected hours and Period locks settings above the Background indexing and Projection sync health cards.

4.3 How data stays in sync

  • Instantly — creating, updating, or deleting a worklog anywhere in Jira triggers an event the app applies within seconds.
  • On install — the app immediately starts a self-continuing background import of the site's entire worklog history. You can use the dashboard while it runs; a banner shows progress ("Importing your worklog history in the background — 12,400 worklogs so far…") and results fill in as they arrive.
  • Daily — a scheduled reconciliation repairs anything the events missed and removes index entries whose worklogs no longer exist in Jira.
apps → workledger (ledger) → settings & sync
Background indexing and projection sync health cards
Fig. 04–2The sync status cards: the Background indexing card with scope, state, and counters — plus Run sync now — and the Projection sync health card with cursor positions.

4.4 Run sync now

The Run sync now button forces a full re-import: it re-reads every worklog on the site from the beginning of its history and removes entries that no longer exist in Jira. Unchanged entries are skipped cheaply, so re-running it is safe at any time.

Use it when…

  • You just installed the app and don't want to wait for the background import to finish on its own schedule.
  • A report looks incomplete — e.g. JQL finds the issues but the entries are missing. This rebuilds the index from scratch.
  • Your site's data was restored or copied over — for example a sandbox refreshed from production every week. A data copy replaces Jira's content without emitting events, which leaves stale entries from the previous copy in the index; totals then look inflated (roughly the sum of every copy ever made). One click purges the stale generations and re-imports the current data. Even without the click, the daily reconciliation cleans this up over the following days.
i
Errors surface right away
The button runs one chunk immediately (so errors surface right away) and continues in the background — reopen the tab to watch progress.

4.5 Status cards

  • Background indexing — state (idle / running / completed), the scope being indexed, issues scanned, and worklogs synced. This also tracks the targeted catch-up that runs automatically when you filter by projects or JQL: the app proactively fetches that scope from Jira in the background without rewriting the visible report.
  • Projection sync health — count of sync failures with the latest error message, and the positions of the sync cursors. Occasional transient failures are retried automatically; a steadily growing count is worth reporting to your admin.
Section05config access
05

Permissions tab

Three independent grant lists, each accepting four subject types — User, Group, Project role (e.g. PROJ • Developers), or Jira permission (anyone holding a given Jira permission).

Grant listWhat it unlocks
Dashboard access Who can open the reports page at all. Site admins and Jira admins always keep access.
Config access Who can use the Indexing & sync and Permissions tabs and save changes there.
See all worklogs Who can see everyone's entries. Everyone else still opens the dashboard but is clamped to their own worklogs in the board, totals, and CSV export.

Jira global permissions backing the defaults

Two Jira global permissions back the defaults — manageable from Jira's own permission screens, both granted to jira-administrators initially:

  • Workledger dashboard access
  • Workledger dashboard admin
!
Project browse permissions always apply
Independent of all grants above, every viewer's report is intersected with their Jira project browse permissions — worklogs from projects a person cannot browse never appear for them, regardless of WorkLedger settings.
apps → workledger (ledger) → permissions
Permissions tab with the three grant lists
Fig. 05–1The Permissions tab: three independent grant lists — Dashboard access, Config access, and See all worklogs — each with its own Add by subject picker.
permissions → dashboard access → add by user
Adding a user grant: search by display name, click the suggestion to add
Fig. 05–2Adding a grant by user: pick User in Add by, search a display name, and click the suggestion. Remove deletes a rule; remember to Save permission rules.
Section06admins
06

Workledger Admin page

A diagnostics page for admins: Jira admin section → Workledger Admin.

  • Current operator / Grant model / Resolved permission keys — shows which permission sources apply to you and how they resolved.
  • User permission check — enter a display name or paste an account ID (e.g. 5b10a2844c20165700ede21g) and Check access to see whether that person can open the dashboard or the admin page, and why.
  • UI refresh toggle — switch between the legacy and refreshed visual styles for the app's surfaces, or fall back to the environment default.
jira admin → workledger admin
Workledger Admin permission checker
Fig. 06–1The user permission check: enter a display name or account ID to see whether that person can open the dashboard or admin page — and why.
Section07
07

Troubleshooting

"My JQL finds issues, but the report shows no entries."
The JQL only selects issues; entries appear when those issues have worklogs whose started date falls inside the From/To window. Widen the dates first. If you're sure the worklogs exist in Jira, run Indexing & sync → Run sync now to rebuild the index.
"Totals are larger than what's actually in Jira."
Typical on sandboxes refreshed from production: stale entries from the previous data copy are still in the index — see §4.2; one Run sync now purges them.
"A person is missing from the User filter."
The picker searches live Jira users and past worklog authors, so deactivated people appear once they've logged work. If someone brand-new is missing, they likely have no worklog yet in the selected window.
"I only see my own entries."
You don't have See all worklogs (§5). Ask a dashboard admin to add you.
"The board shows fewer entries than the Entries card."
The detail view is paged and capped; the cards always count the full filtered set. Page through, narrow the filters, or use Export CSV for the full list.
"Billable hours are 0 but we log billable work."
The billable flag comes from WorkLedger's own checkbox (§2), not from any other field. Entries logged through other tools count as non-billable until edited and marked billable in a WorkLedger form.
"I can't save or delete a worklog — it says the month is locked."
An admin closed that month for billing / payroll (§4.2). If the entry really needs correcting, ask someone with config access to unlock the month, make the change, and lock it again.
"An entry shows ⚠ edited after lock."
The worklog sits in a locked month but was changed after the lock was set — through Jira's native work log or another app, which WorkLedger can't block (§4.2). The flag is informational; the entry's current values are what Jira holds, so if the change is legitimate no action is needed.
"Expected hours are wrong or missing."
In order of likelihood: a Project, Advanced JQL, Billable, or Attribute filter is active (expected figures are hidden on narrowed reports by design — clear those; Date and User filters are fine); the board is grouped by Project or Tag (expected hours only apply to person rows); the person has a 0-hours override (§4.1) that excludes them on purpose; or the number counts Mon–Fri days up to today only and ignores holidays / vacation. Someone who logged nothing in the window has no row at all and can't be flagged as behind yet.
"I don't see the weekly logging reminder."
The nudge only appears when you're actually below your expected hours for the current week, and stays hidden once you catch up. Other reasons: an admin turned Show logging reminders off (§4.1), you have a 0-hours override, or you dismissed it earlier this week. The "Who's behind last week" digest additionally requires the See all worklogs grant (§5).