Skip to content

Starters Steps As Tickets Design

Ed Mozley edited this page Nov 12, 2026 · 2 revisions

Starters & leavers: steps as tickets - design

Status: proposal, nothing built. Issue: #316. Raised from discussion #298 (thanks @Shadowtech87). Builds on Starters & leavers (developer guide).

The need

Many service desks work from one place: the ticket queue. A Starters & leavers case raises tasks, so for those desks the starter work is somewhere else.

And every organisation splits the work differently. With Facilities and IT both on FreeITSM:

  • one organisation wants one Facilities ticket (make the security pass) and one IT ticket (set up the five accounts);
  • another splits IT across two teams, so it wants two IT tickets - one for the accounts, one for MFA.

So the split cannot be built in. The template decides it.

What exists today

  • A case is a task; each template step (jml_template_steps: title, description, team, analyst, days from the date, checklist, only if rule) becomes a subtask of it in StartersService::applyTemplate() (includes/starters/service.php). The case reads its progress back from those tasks.
  • Workflows can react to A starter, mover or leaver case is opened and marked done, and Create a ticket - but that ticket is not linked to the case: it does not list the steps, does not count towards the case's progress, and nothing closes it.
  • Tickets already have checklists (ticket_checklists, ticket_checklist_items) with completion, mandatory items and warn / block on closure.

The design

On the template

Two new columns on each step:

Column Values Meaning
Raise as Task (default) / Ticket Today's behaviour stays the default, so no existing template changes.
Ticket a short name, e.g. IT accounts, MFA, Security pass Ticket steps with the same name become one ticket. Blank = a ticket of its own. Offered as a pick-list of the names already used on the template, so nobody types the same group twice differently.

The team (and analyst) of a ticket is the one on its first step; the template editor warns if the steps of one ticket name different teams.

When a case is opened

In applyTemplate(), after the only if rules have picked the steps:

  1. Task steps - exactly as today.
  2. Ticket steps - grouped by their ticket name. For each group, one ticket:
    • Subject: the ticket name and the person - IT accounts: Jane Smith (starts 3 Nov 2026); the case's variables and form answers work as they do in step titles.
    • Body: each step's description, and the case's answers.
    • Team / analyst: from the first step. Department: the team's department, or the template's, so it lands in the right team's view (department visibility applies as for any ticket).
    • Company: the case's.
    • Due: the earliest due date of its steps (the case's date + the step's days).
    • Checklist: one item per step, so the team ticks them off on the ticket; a step's own checklist template is added beneath its item.
    • Requester: whoever asked for the case - the form's submitter - or nobody.
  3. Each ticket is recorded against the case in a new link table.

Data

ALTER TABLE jml_template_steps
    ADD raise_as    ENUM('task','ticket') NOT NULL DEFAULT 'task',
    ADD ticket_name VARCHAR(100) NULL;

CREATE TABLE jml_case_tickets (
    id          INT NOT NULL AUTO_INCREMENT,
    case_id     INT NOT NULL,
    ticket_id   INT NOT NULL,
    ticket_name VARCHAR(100) NULL,
    created_datetime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_jml_case_ticket (case_id, ticket_id),
    CONSTRAINT fk_jml_ct_case   FOREIGN KEY (case_id)   REFERENCES jml_cases (id) ON DELETE CASCADE,
    CONSTRAINT fk_jml_ct_ticket FOREIGN KEY (ticket_id) REFERENCES tickets (id)   ON DELETE CASCADE
);

Where it shows

  • The case page - a Tickets section beside the steps: number, name, team, status, checklist progress (3 of 5).
  • The ticket - a line under the subject: Starter: Jane Smith - case (a link), for analysts who may open Starters & leavers.
  • Progress - the case counts each linked ticket as one step, done when it is closed.

Closing and reopening

  • Marking the case done with tickets still open: ask - close them, or leave them open.
  • A ticket reopened after the case is done: the case shows it as open again, but is not reopened by itself.
  • Reopening the case never reopens its tickets.

Care needed

  • No requester: a ticket with no requester sends no requester emails and no satisfaction survey, and does not ask Reply goes to anything.
  • SLA: a starter ticket's clock is its due date, not the service desk's response targets - check how SLA policies treat a ticket type, and suggest a Starter ticket type the template can set.
  • Workflows: the new tickets fire A ticket is created like any other; say so in the help, so a desk's routing rules do not move them away from the team the template chose.
  • Demo data: one template with both kinds - Facilities pass as a ticket, IT accounts as a ticket of three steps, HR induction as a task.

Later

Add a step to one open case - a task or a ticket, for the one-off ("this person also needs a VPN token"). Templates never change cases already opened, so today an open case cannot gain a step.

Open question

The case's own shape - one task with a checklist, or a task with subtasks (today) - is still to be decided, and should be decided together with this: a template that raises everything as tickets would leave the case task as just the overview.


See also: Starters & leavers Β· Developer guide Β· Checklists and SOPs

FreeITSM

Getting Started

Modules

Multi-tenancy (planned)

Responses to feedback

Blue sky thinking

Bugs resolved

Pull requests

Links

Clone this wiki locally