Create the job — wizard to dashboard in under a minute
From the client detail page, click New Job. A 3-step wizard collects template + period + team. On commit, the system auto-numbers, instantiates ~80 rows across 8 tables, materialises the folder structure, and (for audit templates) seeds 12 workpapers + 79 procedures.
The 3-step wizard
Step-by-step
From the client detail page
Open the client (M04). Click New Job in the action rail. The wizard launches with the client field pre-filled — you can't accidentally create a job for the wrong client.
Step 1 — pick the template
Dropdown shows the 12 active templates. Picking one expands a panel with the template description + deliverables + skills required + estimated total hours, so you can verify it's the right shape.
Step 2 — period & dates
Fiscal year (auto-derived from client's
fiscal_yearsetting + current calendar; override if needed). Planned start date, planned end date. As you type, the right panel shows a live JSON preview of the folder structure with tokens substituted in real time — you see exactly which folders will be created.Step 3 — allocate the team
Pickers for Partner, Manager, Senior, Staff. Capability-matrix integration: each picker only shows employees with matching skills. EQCR picker appears only if template
requires_eqcror client is listed.Commit
Click Create job. ~1.2 seconds later: redirected to
/jobs/{id}dashboard. The job number is rendered in the header (e.g.JOB2026/0042) — auto-issued viaNumberSequenceService.
What happens on commit (under the hood)
| # | Action | Tables touched |
|---|---|---|
| 1 | Issue job number from sequences | number_sequences (atomic counter) |
| 2 | Insert jobs row | jobs (1 row) |
| 3 | Insert team-member rows | job_team_members (1-5 rows) |
| 4 | Clone template tasks → job_tasks (parent re-link) | job_tasks (8-15 rows) |
| 5 | Clone checklist items → job_task_checklist_items | job_task_checklist_items (50-200 rows) |
| 6 | Walk folder JSON, write to disk under storage/jobs/{id}/ | filesystem · job_folders (10-30 rows) |
| 7 | Initial status_history row (status=not_started) | job_status_history (1 row) |
| 8 | If template.requires_workpapers — auto-seed 12 workpapers + 79 procedures | audit_workpapers (12), audit_workpaper_procedures (79) |
| 9 | If template = audit — initialise disclosure checklist (~120 items) + 24 FS notes | engagement_disclosure_checklist, fs_notes |
| 10 | If M20 auto-subscribe is on — subscribe client to recurring obligations | client_compliance_obligations + compliance_deadlines |
| 11 | Audit-log entry | audit_logs |
Total: between ~80 rows (TPL-VAT minimal) and ~430 rows (TPL-AA Annual Audit) — all in a single database transaction, all rolled back if any step fails.
Form fields reference
Filtered to is_active=1. Selection drives every downstream defaulting.
Inherited from where you launched the wizard. Cannot be changed in the wizard — start over from the right client.
Default: "{template.name} · FY {year}". Edit if your firm uses different conventions.
Drives every period reference downstream — TB import dates, materiality basis, FS comparatives.
When fieldwork begins. Drives capacity reports + deadline dashboard.
Deadline for issuance. Reports flag past-due jobs in red.
Carries professional liability. Capability matrix filters to partners only.
Day-to-day owner. Sees the job in their "My jobs" filter on the dashboard.
Multi-pick. Each gets a row in job_team_members with role.
Independent partner. Auto-required when template demands or client.is_listed=1. Cannot be the engagement partner.
Defaults to client's annual_audit_fee if set. Drives invoice auto-draft on completion.
Things only the team should see. Not exposed to client.
The job dashboard (after commit)
You're redirected to /jobs/{id}. The dashboard has 8 or 9 tabs (workpapers tab visible only when requires_workpapers=1):
| Tab | What it shows |
|---|---|
| Overview | Status banner · progress bar · financial summary · partner/manager block · description |
| Tasks | 5-phase grouped list, inline checklist ticking, drag-drop reorder, filter |
| Team | Add/remove members, change role, set scope |
| Files | Polymorphic attachments (per-job + per-task), upload, download, delete |
| Comments | Flat thread, internal flag, author-only edit/delete |
| Timeline | Status-history with colour badges |
| Activity | Audit-log filtered to this job |
| Workpapers | Visible only when template.requires_workpapers=1; opens M19 hub |
| Invoices | Linked invoices roll-up + billing timeline |
Engagement workflow strip — guided 8-phase navigator
Above the tabs sits the Engagement Workflow strip — a row of numbered chevron-pills mapping the job to 8 logical phases (Acceptance → Plan → Trial Balance → Fieldwork → Workpapers/AJEs → FS/Reporting → Review → Issue & Lock). The strip is purely a navigator; clicking any pill jumps to the relevant tab. Pills auto-update from existing data — no manual phase management.
Per ISA 210, the signed engagement letter is the FIRST artefact on every audit. The Acceptance phase tracks it explicitly: the phase only flips green when (a) the engagement letter is generated/finalised AND (b) the team is allocated AND (c) a manager or partner is on the team. Until the letter is on file, the phase's next-action button reads "Generate engagement letter" and lands on the Documents tab — not the Team tab.
Each pill computes its destination based on the topmost failing exit criterion, not a hard-coded tab. Examples: Acceptance with no letter → Documents; with letter but no team → Team; with team but no manager → Team + CTA "Assign a manager or partner". Review with 0 points raised → Tasks tab → #phase-review (avoids the hidden Review-Points tab). Issue & Lock routes to Overview when the phase is active (status-change form lives there), but to Documents when it's done (where signed deliverables live) — a click never feels like a no-op.
When a pill click resolves to the page the user is already viewing (no navigation possible), the pill flashes briefly with a gold ring + a small toast appears at the bottom reading "You are already on the {Phase} destination." The page also smooth-scrolls to the top so the strip is in view. No more silent clicks.
Hover any pill — even skipped ones — for an instant context card showing phase number, label, status badge, description, progress (X of Y · percent · mini bar) and a status hint. Skipped pills explain WHY they're skipped (e.g. "This engagement type does not require a trial balance").
The rich tooltip is rendered as a body-level overlay populated by JS on hover, not as an inline element. Reason: the pill row scrolls horizontally (overflow-x: auto) which clips any element trying to render above the row. The portal pattern bypasses that completely. The native HTML title="" attribute remains as the no-JS fallback, so even with scripts disabled hovering shows the phase description.
The hero card carries a "X of Y done" pill + colour-coded progress bar + sorted criteria list (failing first in amber, done at bottom in green) + smart CTA whose label changes based on the topmost blocker (e.g. "Generate engagement letter" → "Add team members" → "Assign a manager"). For Issue & Lock the CTA is a direct form-submit button, not a navigation link.
When the active phase targets a specific tab and the user is on that tab, the tab nav-link gets a gold left-edge accent + ★ marker. Visual confirmation: "you're on the right tab for the active phase".
Phases that don't apply to this engagement render as greyed-out, italic, non-clickable spans instead of links — clicking them would take the user to a tab that doesn't even exist for this job. The hover tooltip explains why.
When every applicable phase is done, the hero card is replaced with a green "Engagement complete" banner showing the trophy icon + a one-click Print summary button.
The hero card shows only for the currently active phase — that's by design. Other pills surface their info as a rich tooltip on hover. Showing 8 hero cards stacked would dilute the "what to do next" focus. One active phase, one hero card, one smart CTA.
Phase exit criteria met (e.g. all planning tasks ticked, TB imported).
Current phase. Hero card below the strip explains what to do + shows the next-action button.
Not yet reached. Click to navigate anyway.
Doesn't apply to this engagement (e.g. TB phase for a payroll job).
The hero card under the strip carries:
- Step N of 8 — phase number + name
- Description — what this phase is about
- Exit criteria checklist — bullet points showing what's done (green check) vs pending (grey circle)
- Next-action button — single-click jump to the right tab to make progress
The strip is collapsible (top-right toggle); collapsed state persists per-user via localStorage. F1 help available with article m07.workflow.
The chevron pills work as live training. A senior can hand a fresh staff member a job and say "follow the gold pill" — the strip surfaces the next-action so the staff doesn't have to guess which tab matters today. Materially shortens time-to-productivity for new hires.
Open any client → New Job → TPL-AA Annual Audit → next year's FY → standard team. Hit commit. In ~1 second you have a fully-populated dashboard with 12 workpapers, 8 tasks, 79 procedures, ~120 disclosure items, 24 FS notes, 7 status-tracked phase folders on disk. This is what 30 minutes of manual setup used to look like.
Don't pick a template that doesn't match the actual work. If you create an Annual Audit but the engagement is really a Compilation, you've materialised 230+ extra rows you don't need + 79 procedures you'll have to mark N/A. Cancel the job and create the right one — soft-delete leaves a forensic trail but is the right move.
Watch the live folder JSON preview in step 2 of the wizard before committing. If you see {CLIENT} still showing un-substituted, your client record is missing the client_code field — fix that first or your folders will have literal token text in their names. Click into client → save the code → restart the wizard.