Starters Steps As Tickets Design - edmozley/freeitsm GitHub Wiki
Starters & leavers: steps as tickets - design
Status: BUILT in 5.2.0 - see Steps as tickets - Developer Guide for what was built and where it differs from this proposal (the requester chain, the schedule instead of a due date, the requester-email setting, and Done that never closes tickets). Kept as the record of the design. 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 inStartersService::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:
- Task steps - exactly as today.
- 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.
- 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