SFReg is the registration step between a course booking and a certificate. Each attendee gets a private link, confirms who they are and gives their details without logging in. If they want NZQA Standards, SFReg also finds or creates their National Student Number (NSN).
AttendeesUse the link, complete the form and receive the emails.Form pages
Customer Service and Training AdministrationSend new links, work help cases, release holds and resend certificates.Staff tools
TrainersCheck attendees in and record the result of the course.After the course
Content editorsChange form and email wording without a deployment.Site content · Emails
The course booking is never at risk. The NSN and identity checks only decide whether the attendee gets NZQA Standards. A failed check doesn't cancel their place.
The full journey
Read left to right. Each coloured band shows who does the work, and the headings point to the section with the detail.
Attendee
SFReg in Salesforce
Outside services
Staff and trainers
Dashed line: only in FIS mode
1
Course booking
A booking comes from the website, or from Customer Service using Order Quick Create. Salesforce creates one Service per attendee. That record, ContactAssetRole__c, holds the registration from here on and starts at status NYA (Not Yet Attended).
Who sends the booking email
SFReg sends it, with the registration link, when all of these are true. Otherwise the older booking email path applies.
The record is an active attendee, and not a placeholder seat.
The course is public, not private.
The course date hasn't passed. Online and youth courses are exempt from this.
The booking has no Blended add-on set to TRUE.
An active email rule exists for the product (see Dynamic emails).
If the attendee's NZQA Required add-on is TRUE, they get the NZQA version of the email. If a booking email fails to start, an hourly sweep picks it up and sends it.
2
Registration link
The link is the attendee's only key to the form, so there's no login and no account to create. It works once. Opening it starts a session of up to 4 hours, and refreshing the page can use up the link. If someone else opens it, they can use it too, so the booking email asks people to forward it to the actual attendee rather than click it themselves.
Links are created for booking emails, reminders and resends. Each new link switches off the one before it.
Screen the attendee sees
Why
Can they get a new link themselves?
Your registration link has expired
EXPIRED_TOKEN Past its expiry period
Yes
This link has already been used
CONSUMED_TOKEN Opened before
Yes
This link has been replaced
LINK_REPLACED A newer link was sent
Yes
Your session has expired
SESSION_EXPIRED Took too long between steps
Yes
This session has ended
SESSION_ENDED Finished, or a newer link was sent
Yes
This registration link is no longer active
CAR_INELIGIBLE Booking was swapped, moved or cancelled
No, contact us
We couldn’t find your registration link
INVALID_TOKEN Link doesn't match a booking
No, contact us
You're already registered
POST_EVENT_REGISTERED_LOCKED Finished, and the course is over
No, contact us
3
Form pages
A progress bar across the top shows four stages. The examples below use made-up data and the wording set in QA.
Welcome to your First Aid Training registration. Please confirm the name and email we have on record. You'll add the rest of your details on the next step. p1.welcomeToYourFirstAid
I have only one legal name p1_singleLegalNameContinue p1.continue
Your credits will be lodged against NSN page4_newNsnAnnouncement_prefix 000000000
You can safely close this window. conf.youCanSafelyCloseThis
Page 1: Confirm Attendee
Name change only: the booking is corrected in place, and any NSN result is reset so it's checked again.
Different email address: SFReg asks "Is this a different person?". If they confirm, it's a seat swap (see section 7).
Only one legal name: the attendee ticks "I have only one legal name" and types it once. SFReg saves it in the NSI's format, with ~ as the first name and the real name as the last name. It also recognises ~ in saved names, ticks the box and shows the real name (V0.99.50).
After the course: name and email are locked to the person registered. If the form is also finished, the attendee is asked to contact us.
Page 2: Additional Details
Asked of everyone: name, date of birth, phone number, address, ethnicity and gender. Employee ID is optional. A full address is required for NZQA.
NZQA choice: shown only when the course offers it. It's a tick box, and opting out takes the attendee straight to page 4.
Residential status: Australian citizen, overseas or "I am not sure", or a citizen or resident who ticks "There has been a change to my residency status", shows We'll need to speak with you and leads to a case (see section 6).
NSN: entering it is the most accurate route. NZQA's Awhina assistant is linked for anyone unsure of their number.
Previous names: used for the search only, not saved to the registration (V0.99.48).
Page 3: Validate Identity
Only needed when a new NSN has to be created, or an NZQA record must be confirmed. See section 5.
Page 4: Confirmed
The wording depends on the outcome: NSN verified, new NSN created, NSN still being confirmed, identity attempts used up with a case raised, NZQA declined, or already registered.
4
NSN and NZQA check
When an attendee chooses NZQA Standards, SFReg checks the National Student Index (NSI), NZQA's record of students, while the form waits. The two routes on page 2 use different searches but finish at the same decision.
Green is the straight-through result. Orange and red need more from the attendee or the team.
Rules worth knowing
Exact means exact on the record. Case, spaces and macrons are ignored. The first-name box matches the record's first given name alone or with its middle names, in order (V0.99.49). A middle name on the record doesn't stop a match, but a typed one must be on the record.
Previous names are searched too. If the current name finds nobody, or one person who isn't an exact match, up to three more combinations run with the attendee's previous names (V0.99.48). If different people come back, the search stops.
Stops are deliberate. If SFReg can't be sure it has the right person, it stops rather than risk putting a qualification on the wrong record.
An unverified NSN is never shown. It stays on the server until the identity check passes.
Too many checks in a short time show "You’ve made several checks in a short time", with a time to try again.
5
Identity check
NZQA requires a confirmed identity before an NSN can be registered. An identity verification service compares the attendee's name, date of birth and address with their document. Those details have to match the document exactly.
Forms of ID: New Zealand driver licence (preferred, age 16 and over), passport or birth certificate.
Most common cause of a mismatch: a name recorded differently, such as "Dave" instead of "David", or a missing middle name. "Edit these details" takes the attendee back to fix it.
After a pass: a found record is used as it is. Otherwise SFReg creates a new NSN and page 4 shows it. If the new NSN can't be confirmed straight away, an hourly job keeps checking and raises a case after 24 hours. The confirmation email waits until the NSN is confirmed.
If the NSI says the person already has an NSN when creating one, SFReg doesn't treat that as success. It raises a case.
6
On hold and help cases
When the form can't finish online, a Case goes to the Training queue with type Customer Request - Training and reason NZQA Query, linked to the Service. The attendee sees the case number and gets an email.
What happened
What the attendee does
Email
Then
NSN search stoppedNot exact, two people, merged or inactive
Selects Ask us to help
EMAIL_CASE_CREATED
Registration is On Hold, Awaiting Support. The form shows the case number when reopened (V0.99.48).
Not a citizen, or residency changed
Selects Ask us to help
EMAIL_NON_NZ_CITIZEN
The extra checks are done by phone.
Couldn't verify a given NSNAfter 3 tries
Selects Ask us to help
EMAIL_CASE_CREATED
The team sorts out the record with them.
Identity attempts used up
Selects Finish my registration
EMAIL_IDENTITY_FAILURE
Registration finishes. The team follows up on NZQA through the case.
Getting a booking off hold
Work out the record with the attendee. Correct the name or date of birth if needed.
On the Service, use Act on Behalf. Send new registration email or Opt in to NZQA & send email releases the hold after you confirm. Open registration form keeps it.
Releasing clears the search stop and resets the look-up attempts to 0. The case stays open.
When the attendee finishes, the hold ends and SFReg closes that help case. If you released or reset a booking and it doesn't finish, close the case yourself.
Changing details outside the form restarts it. A first name, last name or date of birth changed on the record clears the finished state, marks the NSN stale and ends any hold, and the attendee gets a new link. Nothing they entered is overwritten, and the NSI isn't called until the form is used again.
7
Someone else attending
The email address decides who the booking belongs to. If it changes on page 1, and the attendee confirms "Yes, send a new link", a new Service is created for the new person and the old one goes to status Swapped.
New attendee: gets a fresh link and fills in the form from the start.
Previous attendee: is told the place has been given to someone else (EMAIL_SWAPPED_OUT).
Person who booked: gets a notice, unless they're the person displaced (EMAIL_SWAP_BOOKER_NOTICE).
The swap runs in the background and is checked again on the server. The form shows progress, then "We've sent your new registration link". Swaps aren't available once the course is over.
8
After the course
Course day and result
Classroom Portal: staff and trainers see the course roster with who has registered. "I'm in" moves an attendee to ATT, and they can correct details or mark DNA. Check-in emails anyone who hasn't finished their form.
Result: the trainer records competency through the training portal, which moves the booking towards a certificate (C, then CR).
Finishing the form after the course
The attendee can still finish. Their name and email are locked, and NZQA can't be changed once they've registered for it. NZQA stays open until the close-off, eight weeks after the course's first day. At close-off, anyone still not ready has NZQA set to FALSE and gets a standard certificate with the closure email.
9
Certificates
One rule decides which certificate a booking gets, so the hold, the release, the closure and the issue step always agree.
Shown for the Salesforce route. Each decision is stored on the latest registration attempt: decision, reason, outcome and time.
What the attendee gets
An email with a PDF attached, named Cert_<First>_<Last>_<number>_<yyyyMMdd>.pdf. The PDF comes from the Dynamic Document engine: the NZQA or standard template set for the product. A copy stays on the Service as a File.
Safeguards
Issued once: a booking already sent, in SFReg's records or the status history, goes back to CS and isn't issued again. A second copy is a staff resend of the stored file.
One exception: a finished registration reopened for NZQA before close-off can receive the NZQA certificate after a standard one.
Failed render or email: stays at CR and is tried again the next day.
No email address, or opted out of email: the certificate is filed and the booking moves to CS. Staff resend it once fixed.
Older bookings with no registration: get the "Please finish" email and then follow the normal path.
Which system issues the certificate
That depends on the org's integration mode.
Mode
When a trainer marks a booking complete
Status path
In use today
FSRSalesforce issues
SFReg applies the rule and issues the PDF and email itself (V0.99.18)
CR to CS
QA, and UAT when set to this mode
FISFIS prints
Salesforce sends PRINT_CERTIFICATE to FIS. FIS produces the certificate and sends it back, and Salesforce files and emails it. The daily retry, hold release and eight-week closure still go through SFReg.
CR, CP, CS
Production runs FIS today. The UAT build supports it.
Open decision. SFReg isn't in Production yet, and the mode it goes live with hasn't been decided. Check this section again before relying on it for Production.
Dynamic emails
Editors change most SFReg email wording in Salesforce without a deployment. Three things work together: a rule says whether a product sends an email and which template it uses, the template holds the layout, and a content record holds the words.
Which email goes when, and to whom
Subjects are as set in QA and can be changed in the manager. All emails come from training@stjohn.org.nz.
Email
When it goes
To
Kind and template
Subject
Link
Booking confirmationBooking
A Service SFReg owns is created. Course has no NZQA option, or the attendee did not choose it
Issue step, when NZQA was closed out at eight weeks
Attendee
EMAIL_AUTO_OPT_OUT_CERTAutoOptOutNZQACertSend_Dyn
Your St John training certificate
PDF attached
SFReg also sends an SMS two days before the course and with the final reminder. Failed sends are retried hourly. Other training emails, such as private and blended bookings, still come from the older path.
How the words are chosen
The rule, a Definition_Attribute__c row of record type Rule, is looked up on the product by name, for example EMAIL_POST_COURSE_CERT. The most specific level wins: Option, Variant, Offer, then Family. Rules currently sit on the First Aid Training family.
The words come from Dynamic_Email_Content__c, matched on Template_Key__c. A row for the product wins, otherwise the Default row (blank Definition) is used. QA and UAT currently hold 14 Default rows and no product overrides.
The parts of an email
Banner image from the template
Email_Heading__cPlease confirm your details before your course
Block_1__cYour booking for First Aid Level 1 is confirmed. Your enrolment in this course makes you eligible for NZQA standards…
Confirm registration
Block_2__cPlease note: If you are not the person attending the course, please forward this email to the attendee…
Block_4__cIf you have any issues with the form, please email our friendly Customer Service Team…
Signature__cSignature name and job title
Contact_Us__cMailing address and website
Blocks 1 to 6 are optional, and an empty one doesn't show. Merge fields such as {!relatedTo.Asset__r.Name} fill in details like the course name. Sent By and Reply To are also stored on each row.
Changing an email
Open the Dynamic Email Template Manager tab in Salesforce. You need Edit access to email content.
Pick the email from the list. Its status shows whether a rule and content exist.
Edit the words on the left. Edit HTML (advanced) is under Settings. The subject line and footer are edited here too, and one footer can be saved to all templates.
Check the preview on the right, on Desktop and Phone. Choose a sample booking to see real merge data.
Select Save. The next email sent uses the new wording, with no deployment.
Test environments don't email attendees. In QA and UAT, sends are redirected to test recipients. Keep it that way: never turn on sending to actual recipients in a sandbox.
Site content
All form wording can be changed by updating Sites_Content__c records, with no deployment. The form ships with its own default wording, so a missing or switched-off row can never leave a blank page.
What's on a row
Field
What it does
Name
The content key, such as p1.continue. It has to match exactly, including capitals.
Site_API_Name__c
Must be SFRegRegistration. The same object also serves the SFDocs and SFLMS sites.
Category__c
Groups rows for editors: SFReg-P1, -P2, -P3, -P4, -Offer, -Help, -Err.
Body__c
The wording.
Is_Active__c
Unticked, the row is ignored and the shipped wording shows. This is the safe way to revert.
Description__c
A note for editors: where it appears, and whether it must be plain text.
How keys are named
A key is section.name. The form treats a dot and an underscore the same, so p1.continue and p1_continue are the same key. Some rows use the underscore form, such as p2_nsi_ambiguous_title.
Key starts with
Controls
p1
Page 1: heading, welcome text, name and email labels, buttons, and the "different person" screens
p2
Page 2: labels, help text, NZQA section, NSN messages, the non-citizen notice, previous name fields and buttons
offer, identityVariant
The panel that offers the identity check, for each reason
id, idEntry, idWork, idFail, idErr, idCap, idOk
Page 3: intro, document entry, progress, no match, errors, attempts used up, and confirmed
conf, confirmed, page4
Page 4: thank you, summary labels, case messages and new NSN line
errorCopy.<REASON>.title / .body
Link and error screens, one pair per reason
err, load, help, s1 to s4, page1, page2
Resend messages, loading text, help requests, progress bar labels and post-course notices
Changing the wording
Find the wording in the Site Content map, or use Show the Site Content keys in Form pages to see which key sits where.
Open the Sites Content tab in Salesforce and find the row. If there's no row, create one with the exact key, site SFRegRegistration and Is Active ticked.
Change Body__c. Keep any placeholder exactly as it is, such as {caseNumber}, {supportPhone}, {time}, {ref} or {n}.
Save, then open a fresh link in a private window. The browser caches content, so an open session may show the old words until a hard refresh.
Labels must be plain text. Field labels, button text and placeholders display markup as literal characters. Only blocks of copy can hold HTML, and those are cleaned when shown. To go back to the original wording, untick Is Active rather than deleting the row.
See every screen with its keys
The Site Content map draws each form screen in order and shows the key beside every piece of text, with when it appears. It covers 286 keys, built from the V0.99.50 form code and rows read from QA and UAT on 02-Nov-26.
Rows: QA has 172, 158 of them active. UAT has 166, and their wording matches QA. The other 6 QA rows show the built-in wording in UAT.
No row yet: 114 keys show the wording built into the form. Add a row to change one.
Not used: 9 active rows do nothing in this version, because the form no longer reads them.
This card is on the Service record, for authorised staff only. A Registration line shows the current state, and the latest change made outside the form.
Button
What it does
Open registration form
Issues a fresh link and opens the form in a new tab. It works after the course date, but replaces the link in the attendee's inbox. For a true guest view, use Copy link in a private window.
Send new registration email
Emails a fresh link. Releases a hold after you confirm.
Opt in to NZQA & send email
Sets NZQA to Yes and emails a fresh link. It can reopen a registration finished without NZQA, up to the close-off.
Resend certificate
Emails the stored certificate again, for bookings at CS.
Release certificate
Asks the certificate rule again and releases a held certificate if the attendee is ready.
Classroom Portal
An internal Lightning app showing course rosters. Staff and trainers check people in, correct their details and see who has finished registering. Correcting an email address starts a swap. Correcting a name or date of birth restarts the registration, and the attendee gets one email.
Where to look on a Service
Emails: an Email Message and a Task are logged for each send.
Certificate decision: the latest registration attempt holds the decision, reason and outcome.
Certificate file: Files related list, named Cert_….
Help: the Cases related to the Service.
Statuses
Status__c stores short API values, which reports and data loads must use. Screens show the readable names.
API value
Label
Meaning here
NYA
Not Yet Attended
Booked. The normal starting point.
PR
Pre-registered
Place held ahead of the course, for example someone swapped in on the Classroom Portal.
ATT
Attending
Checked in on the Classroom Portal.
DNA, PA, NC
Did Not Attend, Part Attended, Not Competent
No certificate.
C
Competent
Passed. Also where a certificate waits while held.
CR
Certificate Requested
Being issued, or waiting for the daily retry.
CP
Certificate Processing
With FIS. FIS route only.
CS
Certificate Sent
Done. Staff can resend.
Swapped, Transferred, Cancelled, CWC, InActive
Same, with CWC = Cancelled With Credit
This seat no longer applies, and its link stops working.
Registration state on Act on Behalf
State
Meaning
FINISHED_NZQA
Finished with a verified or created NSN
FINISHED_EXCLUDED
Finished; the course has no NZQA option
FINISHED_NO_NZQA
Finished; NZQA declined
FINISHED_OTHER
Finished, with no outcome recorded
ON_HOLD
On Hold, Awaiting Support: search stopped and help requested
HELP_REQUESTED
Asked for help, not finished
NOT_FINISHED
Started, not finished
NOT_STARTED
Hasn't started
Background jobs
These keep the journey moving without anyone acting. Any test environment can have a job paused.
Job
When (NZ time)
What it does
Abandonment sweep
Hourly, on the hour
Finds form sessions left unfinished and sends "Please finish" with a new link.
NSN reconcile
Hourly, at :05
Keeps checking NSNs still being confirmed. Raises a case after 24 hours.
Booking confirmation sweep
Hourly, at :20
Sends any booking confirmation that failed to start.
Registration recovery sweep
Hourly, at :40
Retries failed confirmation, case and swap emails, and missing identity cases.
Request flushes
Hourly
Pick up NSN and identity requests that were lost before they ran.
Closes NZQA eight weeks after the course and requests the standard certificate.
Common questions
The attendee says their link doesn't work
Ask what the screen says, then check the table in section 2. Most screens offer "Resend me another link". If not, use Send new registration email on Act on Behalf, after checking that the booking is still active.
The attendee didn't get an email
Check for an Email Message on the Service. Then check the address on file and any transactional email opt-out. A failed send is retried hourly. In test environments, emails go to test recipients.
A name is wrong and the course is over
The attendee can't change it on the form. Staff correct it on the record. That restarts the registration, and the attendee gets a new link.
The NSN won't match, but the attendee is sure it's right
Their name and date of birth must match their NSI record exactly, so ask about middle or previous names. If the search has stopped, have them select Ask us to help, and work it through the case.
A certificate hasn't arrived
Check the status. At C it may be held: look at the decision reason on the latest attempt, such as NSN_NOT_VERIFIED or REGISTRATION_NOT_FINISHED. At CR, the daily retry will try again. At CS, it's been sent, so use Resend certificate after checking the address.
I changed the wording but the form looks the same
Check that the key is exact, the site is SFRegRegistration and Is Active is ticked. Then hard-refresh, or use a new link in a private window.
Can the attendee skip NZQA?
Yes. They can leave it unticked on page 2, or continue without it after a failed identity check. Their booking stays and they get a standard certificate. Once the course is over and they've registered for NZQA, it can't be changed on the form.
Glossary
Service (ContactAssetRole__c, CAR)
One attendee's place on one course. The registration lives here.
NZQA Standards
Credits recorded with the New Zealand Qualifications Authority. Optional, and only on courses that offer them.
NSN
National Student Number: 9 or 10 digits identifying a learner in New Zealand.
NSI
National Student Index, the national register of NSNs.
NZQA Required add-on
The record of whether this attendee wants NZQA. TRUE, FALSE, or none if the course doesn't offer it.
Swap
Passing a seat to a different person by changing the email on page 1.
Act on Behalf
The staff card on a Service for links, holds and certificates.
FIS / FSR mode
Whether the external FIS system or Salesforce (FSR) issues certificates. See section 9.
Close-off
Eight weeks after the course's first day. NZQA can't be added after this.