SFReg UAT Test Run

SFReg UAT Test Run

HHSJ-UAT · V0.99.71 + 15-Nov owner fix · started 15-Nov-26 3:16 pm NZ · 119 use cases apply to UAT. Each executed case lists its record Ids and the emails it sent.

75Pass
11Fail
22Blocked
11Not Run

Run set-up

Email redirectBatches 1-4: only ShailSingh active (deploy 0AfAD00000VKLZW0A5). Restored after batch 4 (deploy 0AfAD00000VKOCQ0A5): a tester mailbox + TestDigital active, ShailSingh inactive. Allow_Send_To_Actual_Recipients off throughout
Debug logsTraceFlags 7tfAD000001u0snYAA (Shail), 7tfAD000001u0uPYAQ (Automated Process), 7tfAD000001u0w1YAA (site guest), SFReg_Debug, 4 h
Test classArlo 63461 First Aid Level 1, 30-Nov 8:30 am, Mt Wellington (Quick registration). Attendees are made-up Etoe <case> people with @example.invalid emails

Observations

  • After the redirect, other UAT testers' emails also come to you (for example a tester's booking email at 02:18:51Z). Switch it back when the run ends.
  • Earlier today, before the redirect, other testers' SFReg emails went to a tester mailbox and TestDigital, as designed.
  • Defect (High): NZQA opt-out is lost on multi-attendee OQC orders (shared ExternalCode__c), see B-15/F-05. For the developer.
  • Defect (Low): a no-NZQA finish records JourneyOutcome__c = REGISTERED_VERIFIED and no NzqaDeclinedAt__c.
  • Finding: NSI returns HTTP 400 for a name with digits; the form shows "service isn't answering". Real names rarely have digits, but the message misleads.
  • Abandoned-email subject greets with the first name on some sends ("Etoe, …") and full name on others ("Etoe B2, …").
  • Defect (High): SFReg hold cases created through the Training Portal REST call go to CSC queue despite the 15-Nov fix (C-08). Workaround proven: Sforce-Auto-Assign: FALSE on the call.
  • Defect (Medium): the Training Portal REST call accepts Swapped bookings and a missing status header silently (D-07, D-08).
  • UAT got very slow from about 3:15 pm NZ: one anonymous Apex call took 30 minutes and still committed.
  • Finding (Medium, for the developer): the Classroom Portal swap copied the old attendee's actionRequired__c REGISTRATION_NSNCASECREATE onto the new person's CAR a04AD000009fikfYAA (P-06; the old CAR a04AD000009fiBLYAY had asked for NSI help in C-03). The new person had no help case, but the value stops every reminder for them (reminders need blank or REG_ABANDONED). The guest-form swap a04AD000009fiG1YAI came from a CAR with a blank value, so it doesn't show whether that path copies it too.
  • No 2-day or 7-week reminder email, and no reminder SMS, has ever been sent in UAT: no UAT booking in those windows is marked attended. The eight-week closure has seen 0 bookings every day for the same reason.
  • Arlo UAT has no OrderProcess (checkout-only) class among 37 upcoming classes checked, so the 405 path (A-14, C-07) can't be tested in UAT as it stands.
  • Defect (High, X-10): certificates drop macron letters: "Mere-Āta O'Kōwhai" prints as "Mere-ta O'Kwhai" (Helvetica/WinAnsi in the certificate PDF).
  • Defect (High, E-07): a certificate released by the attendee's own registration (event path) is never issued: SFReg_CertificateIssueQueueable runs as Automated Process and has no access to DynamicCertificatePdfController. The booking sticks at CR.
  • Defect (Medium, E-07): the hold case can't be closed on that path: Case validation rule Wrap_up_code_is_required.
  • Defect (High, D-03): a guest can swap the attendee after the class; the page says the name and email are locked but the server accepts the swap (Arlo changed too).
  • Defect (Medium, F-04): staff opt-in / reopen for NZQA isn't blocked after the course.
  • B-15 defect is wider: swaps leave Swapped NZQA Required rows on the same ExternalCode__c, so every swapped booking hits AMBIGUOUS on opt-in/opt-out.
  • Fixed 15-Nov 8:36 pm NZ (QA 0AfBm00000cOX09KAG, UAT 0AfAD00000VKNhm0AH): X-10 macrons on certificates; C-08/C-06 hold-case owner (Case assignment rule entry). Re-tested PASS in UAT.
  • UAT changed during the run: V0.99.72 (+ PC-16, PC-16b, PC-16c) was deployed to UAT at 8:06 pm NZ (07:06Z) by another session. Batches 1–5b ran on V0.99.71; D-03, F-04, R-11 and the re-tests ran after it.

All UAT use cases

IDUse caseGroupResult
A-01OQC booking, On Account, NZQA courseBookingPASS
A-02OQC booking paid by card (Pay now)BookingNOT RUN
A-03OQC booking, Offline paymentBookingPASS
A-04OQC booking with a donation, Pay nowBookingNOT RUN
A-05Donation with Offline paymentBookingPASS
A-06Donation refuses On AccountBookingPASS
A-07Class must be picked before Create or PayBookingNOT RUN
A-08Group booking: three attendeesBookingPASS
A-09Course without NZQABookingPASS
A-10New customer: attendee on a LeadBookingPASS
A-11Private course: SFReg sends nothingBookingPASS
A-12Placeholder or blended booking: SFReg sends nothingBookingPASS
A-13Booking after the class (Historic events)BookingPASS
A-14Arlo class that takes checkout only (405)BookingBLOCKED
A-15Failed booking email is recovered by the sweepBookingNOT RUN
B-01Booking-email link opens page 1Registration links and the guest formPASS
B-02Reloading the page uses up the linkRegistration links and the guest formPASS
B-03Attendee asks for a new linkRegistration links and the guest formPASS
B-04More than five guest resends in a dayRegistration links and the guest formPASS
B-05Staff link methodsRegistration links and the guest formPASS
B-06Older link stops working after a newer oneRegistration links and the guest formPASS
B-07New link ends an open sessionRegistration links and the guest formPASS
B-10Link for a swapped or cancelled bookingRegistration links and the guest formPASS
B-11Page 1: correct the nameRegistration links and the guest formPASS
B-12Page 1: a different email passes the seat onRegistration links and the guest formPASS
B-13Page 1: single legal nameRegistration links and the guest formPASS
B-14Page 2: field rulesRegistration links and the guest formPASS
B-15Page 2: finish without NZQARegistration links and the guest formFAIL
B-16NSN given, own record, verifiedRegistration links and the guest formBLOCKED
B-17NSN given, wrong detailsRegistration links and the guest formPASS
B-18Name search finds nobody: Create NSNRegistration links and the guest formBLOCKED
B-19Name search finds an unverified record: NSI verificationRegistration links and the guest formBLOCKED
B-20Search stops: two people, merged or inactiveRegistration links and the guest formBLOCKED
B-21Found under a previous nameRegistration links and the guest formBLOCKED
B-22Identity check fails, then passesRegistration links and the guest formBLOCKED
B-23Identity check: input rulesRegistration links and the guest formPASS
B-25NSI service not reachedRegistration links and the guest formPASS
B-26Help button only where it appliesRegistration links and the guest formPASS
C-01Non-citizen asks for NZQA helpThe SFReg casesPASS
C-02NSI help after the search stops (On Hold)The SFReg casesBLOCKED
C-03NSI help after a failed check, no stopThe SFReg casesPASS
C-04Identity verification cap reachedThe SFReg casesPASS
C-05NZQA assistance for a residency changeThe SFReg casesPASS
C-06Certificate-held case (guest or staff path)The SFReg casesPASS
C-07Arlo "register by hand" caseThe SFReg casesBLOCKED
C-08API path: cert-hold case via the Training Portal REST call with auto-assign onThe SFReg casesPASS
C-09API path: sObject update C → CR, as "My StJohn" doesThe SFReg casesPASS
C-10Watch: every SFReg case since the fix is on the queueThe SFReg casesPASS
C-11NSN Create cap reachedThe SFReg casesBLOCKED
C-12NSN Create finds the person already in NSIThe SFReg casesBLOCKED
C-14Possible duplicate attendeeThe SFReg casesPASS
C-15Staff release a hold and resendThe SFReg casesPASS
C-16One help case per linkThe SFReg casesPASS
R-02Pre-course SMS is off in UATRemindersPASS
R-03Post-course email two days after the classRemindersNOT RUN
R-05Final reminder in UAT sends the email onlyRemindersBLOCKED
R-06Finished registration gets no reminderRemindersPASS
R-07No post-course reminder without attendance or NZQARemindersPASS
R-08Excluded statuses get nothingRemindersPASS
R-09Hourly runs never send twiceRemindersNOT RUN
R-10Abandoned form gets the "finish your registration" emailRemindersNOT RUN
R-11Historic ordered booking gets no remindersRemindersPASS
P-01Find a class and see its rosterClassroom and Tutor PortalPASS
P-02"I am here" on a registered attendeeClassroom and Tutor PortalPASS
P-03Confirm Attendance for an attendee not yet registeredClassroom and Tutor PortalPASS
P-04Mark all presentClassroom and Tutor PortalNOT RUN
P-05Correct a name in the window (same email)Classroom and Tutor PortalPASS
P-06Change the email in the window: swap to another personClassroom and Tutor PortalPASS
P-07Swap refused once the certificate is requestedClassroom and Tutor PortalPASS
P-08Switching class closes the Confirm Attendance window (V0.99.69)Classroom and Tutor PortalNOT RUN
P-10Booking removed from the class meanwhileClassroom and Tutor PortalPASS
P-11No access without the permissionClassroom and Tutor PortalBLOCKED
P-12Class busy: record lock retriesClassroom and Tutor PortalNOT RUN
P-13Tutor Portal shows the same rosterClassroom and Tutor PortalNOT RUN
P-14No-show is set outside the portalClassroom and Tutor PortalPASS
D-01Swap before the class syncs to ArloCourse end: Arlo sync and status updatesPASS
D-02Change registrant after the class ends (Completed in Arlo)Course end: Arlo sync and status updatesPASS
D-03Guest swap after the class is refusedCourse end: Arlo sync and status updatesFAIL
D-04Training Portal sets a resultCourse end: Arlo sync and status updatesPASS
D-06Certificate request in UAT (FSR mode)Course end: Arlo sync and status updatesBLOCKED
D-07Missing status headerCourse end: Arlo sync and status updatesFAIL
D-08Unknown or inactive booking idCourse end: Arlo sync and status updatesFAIL
D-10Several ids: one bad id rolls back allCourse end: Arlo sync and status updatesFAIL
D-11OQC booking swap without a real Arlo idCourse end: Arlo sync and status updatesPASS
D-12Salesforce-created class is not syncedCourse end: Arlo sync and status updatesBLOCKED
D-13Nightly trainer and venue on the class (V0.99.71)Course end: Arlo sync and status updatesPASS
E-01NZQA certificate for a verified attendeeCertificatesBLOCKED
E-02Standard certificate: course has no NZQACertificatesFAIL
E-03Standard certificate: attendee declined NZQACertificatesPASS
E-04Held: registration not finishedCertificatesPASS
E-05Held: NSN not verifiedCertificatesBLOCKED
E-06Released when the attendee finishes with NZQACertificatesBLOCKED
E-07Released when the attendee declines NZQACertificatesFAIL
E-08Staff Release certificateCertificatesPASS
E-09Issued once onlyCertificatesPASS
E-10Duplicate request within 15 minutesCertificatesPASS
E-11Older booking with no Attempts rowCertificatesPASS
E-13Check the mode before every certificate runCertificatesPASS
F-01Staff: Opt in to NZQA & send emailClose-out: NZQA opt-in, opt-out and the closure batchFAIL
F-02Opt in refused while on holdClose-out: NZQA opt-in, opt-out and the closure batchPASS
F-03Reopen after finishing without NZQAClose-out: NZQA opt-in, opt-out and the closure batchFAIL
F-04Opt in refused after a post-course finishClose-out: NZQA opt-in, opt-out and the closure batchFAIL
F-05Attendee opts out on the formClose-out: NZQA opt-in, opt-out and the closure batchFAIL
F-06Eight-week closure of a held bookingClose-out: NZQA opt-in, opt-out and the closure batchPASS
F-07Registered just before the closure runClose-out: NZQA opt-in, opt-out and the closure batchBLOCKED
F-08Closure leaves the wrong bookings aloneClose-out: NZQA opt-in, opt-out and the closure batchPASS
F-09Closure tidies orphan hold casesClose-out: NZQA opt-in, opt-out and the closure batchPASS
X-01Email gate is off before every runNegative and edge casesPASS
X-02A used link shows no personal detailsNegative and edge casesPASS
X-03NSI data never reaches the browserNegative and edge casesBLOCKED
X-04Staff tools need their permissionNegative and edge casesBLOCKED
X-05Citizen without a residency change gets no non-citizen caseNegative and edge casesPASS
X-06Resend refused for an email opt-outNegative and edge casesPASS
X-07Identity cap scope per link kindNegative and edge casesPASS
X-08Name or date of birth changed outside the formNegative and edge casesPASS
X-09Website course moveNegative and edge casesBLOCKED
X-10Macrons and apostrophes end to endNegative and edge casesPASS
X-11Finished in one tab, still open in anotherNegative and edge casesPASS
X-12Prod pre-deploy: the queue existsNegative and edge casesPASS
A-01

OQC booking, On Account, NZQA course

PASS
Order01724964 · 801AD00001G9S58YAF
CARa04AD000009fhztYAA · Service 7771180
Lead00QAD00000UJEh82AH
Arlo synca3VAD000001rd4H2AQ Succeeded · registration 1606397
Email02sAD00000C6hrpYAB
  • CAR Status__c = NYA, Type Attendee, Role Primary; token issued; Attempts origin INITIAL_REGISTRATION, BookingConfirmedNzqaEmailedAt__c 02:17:30Z.
  • BookingConfirmationAttendeeNZQA_Dyn sent to shailendra.singh@stjohn.org.nz only.
  • No OQC schedule email for the attendee (SFReg owns it); the order got the usual "Thanks for your purchase" summary.
Email 02sAD00000C6hrpYAB
02sAD00000C6hrpYAB
Email 02sAD00000C6jrZYAR
02sAD00000C6jrZYAR
A-02

OQC booking paid by card (Pay now)

NOT RUN
  • Needs you on screen: the Windcave hosted page and its test card are entered by you, not by me.
A-03

OQC booking, Offline payment

PASS
Order01724965 · 801AD00001G9ZjDYAV
CARa04AD000009fi1VYAQ
Arlo synca3VAD000001rd5t2AA Succeeded · 1606398
Email02sAD00000C6junYAB
  • Reference POS-E2E-1501 on OrderDPSTxnRef__c.
  • CAR NYA; NZQA booking email sent.
Email 02sAD00000C6junYAB
02sAD00000C6junYAB
A-04

OQC booking with a donation, Pay now

NOT RUN
  • Needs you on screen (card on the Windcave page).
A-05

Donation with Offline payment

PASS
Order01724966 · 801AD00001G9WevYAF
CARa04AD000009fi37YAA
Arlo synca3VAD000001rd7V2AQ Succeeded · 1606399
Emails02sAD00000C6jwPYAR, 02sAD00000C6iFaYAJ
  • Lines: First Aid Level 1 $169.57 + donation DON-PRD-OOD-DOTP-40 $20; reference POS-E2E-1505.
  • Offline with a donation allowed (Training_Course.Allow_Offline_With_Donation__c = true). The donation makes no CAR.
Email 02sAD00000C6jwPYAR
02sAD00000C6jwPYAR
Email 02sAD00000C6iFaYAJ
02sAD00000C6iFaYAJ
A-06

Donation refuses On Account

PASS
Ordernone created
  • Server refused in assertPaymentAllowed: "An order with a donation is paid by card: use Pay now." The transaction rolled back.
A-07

Class must be picked before Create or Pay

NOT RUN
  • UI only. Skipped by Shail (15-Nov 8:52 pm NZ): the Chrome tab Claude drives stops at the Microsoft passkey prompt. Run by hand in UAT.
A-08

Group booking: three attendees

PASS
Order01724967 · 801AD00001G8vu1YAB
CARsa04AD000009fb6UYAQ, a04AD000009fb6ZYAQ, a04AD000009fb6eYAA
Arlo synca3VAD000001rd972AA, …d982AA, …d992AA Succeeded · 1606400–1606402
Emails02sAD00000C6iXKYAZ, …iXLYAZ, …iXMYAZ
  • Three CARs at NYA, three different tokens, three NZQA booking emails (02:18:15, :20, :25Z).
  • Arlo pushes went one after another, all Succeeded.
Email 02sAD00000C6iXKYAZ
02sAD00000C6iXKYAZ
A-09

Course without NZQA

PASS
Order01724971 · 801AD00001G9TXgYAN (Mental Health First Aid, Arlo 63119)
CARa04AD000009fi9ZYAQ
Email02sAD00000C6gSIYAZ
  • BookingConfirmationAttendee_Dyn (standard) sent; BookingConfirmedEmailedAt__c 02:20:49Z; no NZQA Required add-on.
  • First try used Basic Life Support (order 01724968, CAR a04AD000009fi4jYAA): it got the NZQA email, correctly, because BLS carries the NZQA Required add-on in UAT. Test data pick, not a defect.
  • Note: the standard and NZQA templates have the same subject, "…your training is booked - please confirm your details".
Email 02sAD00000C6gSIYAZ
02sAD00000C6gSIYAZ
A-10

New customer: attendee on a Lead

PASS
Leadse.g. 00QAD00000UJEh82AH (A-01)
  • Every batch 1 attendee is a new Lead (Lead__c set, Contact__c blank) and got its booking email.
A-11

Private course: SFReg sends nothing

PASS
CARsa04AD000009Kxf7YAC, a04AD000009L07tYAC, a04AD000009L09VYAS, a04AD000009bOMLYA2, a04AD000009cd3BYAQ (existing UAT private bookings)
Probebatch5/own-probe.apex (no DML, rolls back)
  • SFReg_BookingConfirmationOwnership.evaluate → owned false, reason PRIVATE_COURSE for all 5 (AED Workshop, NZP Medic, Transpower AED, FA1 Private).
  • Emails: the older bookingConfirmationAttendee path sent; no SFReg booking email. On a04AD000009bOMLYA2 staff later sent a form link by hand (CSC_RESEND), which then worked; that is staff choice.
  • Run on existing bookings, not a new order.
A-12

Placeholder or blended booking: SFReg sends nothing

PASS
Placeholdera04AD000008JAjvYAG, a04AD000008JAk1YAG → PLACEHOLDER
Blendeda04AD000009cknpYAA (First Aid Refresher 15-Dec, add-on a04AD000009cknrYAA TRUE) → BLENDED
  • Owned false for both reasons. Placeholder seats got the older bookingConfirmationAttendeeBlendedPvtRef; the blended booking has no SFReg email.
  • Run on existing bookings, not a new order.
A-13

Booking after the class (Historic events)

PASS
Order01724969 · 801AD00001G9VcRYAV (class 63444, 4-Nov, finished)
CARa04AD000009fi6LYAQ
Arlo synca3VAD000001rdCL2AY Succeeded · 1606404
Email02sAD00000C6hrqYAB (order receipt, not SFReg)
  • No token, no Attempts row and no SFReg booking email (owned, silent).
  • Arlo accepted the registration on the finished class through the registrar.
  • The order sent an "Here's your purchase receipt" email (OrderReceipt), which the website flow also sends.
Email 02sAD00000C6hrqYAB
02sAD00000C6hrqYAB
A-14

Arlo class that takes checkout only (405)

BLOCKED
Probebatch5/regmethod3.apex (GET only)
  • All 30 upcoming UAT Arlo classes with bookings (17-Nov to 31-Jan, all courses) plus the 7 checked earlier are QuickRegistrationProcess. No OrderProcess class exists in Arlo UAT, so A-14 and C-07 need one set up in Arlo UAT by the training team.
A-15

Failed booking email is recovered by the sweep

NOT RUN
  • QA-only case (forced send failure); not part of the UAT run.
B-01

Booking-email link opens page 1

PASS
BookingOrder 01724972 · 801AD00001G9X02YAF (6 attendees on 63461)
CARa04AD000009fiBBYAY
Tokena03AD000017msGCYAY consumed 02:28:22Z
Attemptsa3GAD0000014MXd2AM SESSION_OPENED
  • Page 1 "Confirm who is attending" with the booking name and email; progress Attendee / Details / Identity / Confirmed.
  • No-token address shows "We couldn't find your registration link".
Email B-01-page1
B-01-page1
Email B-00-notoken
B-00-notoken
B-02

Reloading the page uses up the link

PASS
CARa04AD000009fiBBYAY
  • Reload shows "This link has already been used" with Resend me another link; no booking details shown (also X-02).
Email B-02-used
B-02-used
B-03

Attendee asks for a new link

PASS
Attemptsa3GAD0000014Mar2AE origin TOKEN_REISSUE
Tokena03AD000017mxKcYAI
Email02sAD00000C6kVtYAJ
  • "A fresh registration link has been sent to your email."
  • AttendeeRegistrationAbandoned_Dyn sent to you; the new link opened page 1.
Email B-03-resent
B-03-resent
Email 02sAD00000C6kVtYAJ
02sAD00000C6kVtYAJ
B-04

More than five guest resends in a day

PASS
CARa04AD000009fhztYAA (A-01)
  • Six requests in two minutes sent 2 emails; the rest got "A fresh link was sent to you recently" (log: "Duplicate throttle hit").
  • A short throttle blocks rapid repeats before the 5-per-day cap; the daily cap itself was not reached.
Email B-04-limit
B-04-limit
B-05

Staff link methods

PASS
CARa04AD000009fiBGYAY
AttemptsAOB_RESEND 02:32:03Z, CSC_RESEND 02:33:03Z
Email02sAD00000C6gvNYAR
  • Send new registration email → origin AOB_RESEND + AttendeeRegistrationAbandoned_Dyn.
  • Open registration form (forced new) → origin CSC_RESEND, no email.
  • The case quick action (SELF_SERVICE_RESEND) was not run.
Email 02sAD00000C6gvNYAR
02sAD00000C6gvNYAR
B-06

Older link stops working after a newer one

PASS
CARa04AD000009fiBGYAY
  • Unopened first link shows "This link has been replaced".
Email B-06-replaced
B-06-replaced
B-07

New link ends an open session

PASS
CARa04AD000009fiBGYAY
  • Page 2 open; staff issued a new link; Submit showed "This session has ended". Log: "Ended 1 registration session(s) … (reason=new_link)".
Email B-07-ended
B-07-ended
B-10

Link for a swapped or cancelled booking

PASS
Old CARa04AD000009fiG1YAI → Swapped (staff swap, portal service)
New CARa04AD000009fjC5YAI
Emails02sAD00000C6pvNYAR (new person), 02sAD00000C6pvOYAR (swapped out)
  • Opened the old booking's unused link (from email 02sAD00000C6kyvYAB): "This registration link is no longer active … open the most recent link"; no resend button.
Email B-10-inactive
B-10-inactive
Email 02sAD00000C6pvNYAR
02sAD00000C6pvNYAR
Email 02sAD00000C6pvOYAR
02sAD00000C6pvOYAR
B-11

Page 1: correct the name

PASS
CARa04AD000009fiBBYAY
  • First name changed Etoe → Etoea on page 2's "Registering as" (page 1 edit did not take through automation); log "Page-2 name edit persisted"; Service_Recipient_First_Name__c = Etoea; no swap.
B-12

Page 1: a different email passes the seat on

PASS
Old CARa04AD000009fb6eYAA → Swapped
New CARa04AD000009fiG1YAI NYA, Lead 00QAD00000UJFYL2A5
ArloChangeRegistrant Succeeded
Emails02sAD00000C6kyvYAB, …kywYAB, …kyxYAB
  • "Is this information correct?" then "We've sent your new registration link".
  • New attendee booking email, AttendeeSwapped_Dyn to the old attendee and "A change to your training booking" to the booker.
Email B-12-swap
B-12-swap
Email 02sAD00000C6kyvYAB
02sAD00000C6kyvYAB
Email 02sAD00000C6kywYAB
02sAD00000C6kywYAB
Email 02sAD00000C6kyxYAB
02sAD00000C6kyxYAB
B-13

Page 1: single legal name

PASS
CARa04AD000009fb6ZYAQ
  • Ticked "I have only one legal name", entered Etoesingle → saved as First ~, Last Etoesingle.
B-14

Page 2: field rules

PASS
CARa04AD000009fiBLYAY
  • Phone 0211234 → "Please enter a valid contact number — 8 to 15 digits."
  • Date of birth 01/02/2030 → "Please enter a date of birth in the past." (shown at Check NSN).
  • An 8-digit NSN is zero-padded to 10 digits (0012345678), not refused.
Email B-14-fields
B-14-fields
B-15

Page 2: finish without NZQA

FAIL
CARa04AD000009fiBBYAY
Email02sAD00000C6kcLYAR
Add-onNZQA Required a04AD000009fiBDYAY still TRUE
  • Screen and email right: "Thanks — you're registered", NZQA "Not requested", AttendeeRegistrationConfirmed_Dyn.
  • Defect: the opt-out was not saved. SFReg_NzqaOptInHandler: "setNzqaRequired returned AMBIGUOUS — opt-in decision NOT recorded." All 6 attendees on this OQC order share ExternalCode__c 9000614, so the add-on can't be matched. Same on A-08 P2 (a04AD000009fb6ZYAQ). On single-attendee A-03 (a04AD000009fi1VYAQ) it worked (add-on FALSE).
  • Also: JourneyOutcome__c = REGISTERED_VERIFIED (expected REGISTERED_NO_NZQA) and NzqaDeclinedAt__c blank, on both group and single bookings.
Email B-15-confirmed
B-15-confirmed
Email 02sAD00000C6kcLYAR
02sAD00000C6kcLYAR
B-16

NSN given, own record, verified

BLOCKED
  • Needs the NZQA test data rows (R-A…R-K) and/or a passing Centrix test document.
B-17

NSN given, wrong details

PASS
CARa04AD000009fiBLYAY
NSIVERIFY_BY_NSN → NO_RECORD (real call)
  • NSN 999999990: "We couldn't find a match for your NSN", Check NSN again + Ask us to help shown after one failed check.
  • The QA/UAT diagnostic panel says "2 tries left before help button appears" while the button is already showing (panel text only).
Email B-17-nomatch
B-17-nomatch
B-18

Name search finds nobody: Create NSN

BLOCKED
CARa04AD000009fiBaYAI
  • Reached: name search → "didn't find one" → Request NSN → identity step. Not finished: needs a Centrix test document that passes.
B-19

Name search finds an unverified record: NSI verification

BLOCKED
  • Needs the NZQA test data rows (R-A…R-K) and/or a passing Centrix test document.
B-20

Search stops: two people, merged or inactive

BLOCKED
  • Needs the NZQA test data rows (R-A…R-K) and/or a passing Centrix test document.
B-21

Found under a previous name

BLOCKED
  • Needs the NZQA test data rows (R-A…R-K) and/or a passing Centrix test document.
B-22

Identity check fails, then passes

BLOCKED
  • Needs the NZQA test data rows (R-A…R-K) and/or a passing Centrix test document.
B-23

Identity check: input rules

PASS
CARa04AD000009fiBaYAI
  • Licence A12345 refused on screen ("two letters then six numbers"), no attempt counted. Passport, birth certificate and under-16 not tried.
B-25

NSI service not reached

PASS
CARa04AD000009fiBaYAI
  • Seen in UAT: "We can't check your NZQA record right now", attempts unchanged (0 of 3).
  • Finding: the cause was NSI refusing the name search with HTTP 400 because the test last name had digits ("B2 P6"). The attendee is told the service isn't answering, which is misleading for a data error.
B-26

Help button only where it applies

PASS
  • Hidden before any check (P3); shown after one failed NSN check (P3), for Overseas (P4) and for citizen + residency change (P5).
C-01

Non-citizen asks for NZQA help

PASS
Case00612808 · RT Default · Training - Pre-Registration/NZQA Queries
CARa04AD000009fiBQYAY
Email02sAD00000C6kpFYAR
  • Overseas → "We'll need to speak with you"; Ask us to help → case "NZQA registration assistance required — Etoe B2 P4 — First Aid Level 1".
  • Web / New / Medium / Customer Request - Training / NZQA Query; created by the site guest; AttendeeRegistrationNonNZCitizen_Dyn; EXITED_HELP_REQUESTED.
Email C-01-notice
C-01-notice
Email C-01-case
C-01-case
Email 02sAD00000C6kpFYAR
02sAD00000C6kpFYAR
C-02

NSI help after the search stops (On Hold)

BLOCKED
  • Needs an NZQA test row that stops the search (two people, merged or inactive).
C-03

NSI help after a failed check, no stop

PASS
Case00612807 · 500AD00000fFiqyYAC
CARa04AD000009fiBLYAY
Email02sAD00000C6km1YAB
  • Case "First Aid registration — NSI verification assistance required — Etoe B2 P3 — First Aid Level 1" on Training - Pre-Registration/NZQA Queries.
  • actionRequired__c = REGISTRATION_NSNCASECREATE; JourneyOutcome__c = EXITED_HELP_REQUESTED; AttendeeRegistrationCaseCreated_Dyn sent.
Email C-03-help
C-03-help
Email 02sAD00000C6km1YAB
02sAD00000C6km1YAB
C-04

Identity verification cap reached

PASS
Case00612810 · 500AD00000fFXneYAG
CARa04AD000009fiBaYAI
Email02sAD00000C6kvhYAB
  • Licences AB123456/7/8 → MISMATCH, "2 attempts left", "1 attempt left", then "We couldn't confirm your identity"; Finish → "Your course is booked — we need to talk with you about NZQA".
  • Case "First Aid registration — Identity verification cap reached — …" on the queue; IdentityCheckAttempts__c = 3; REGISTRATION_IDENT_FAIL; AttendeeRegistrationIdentityFailure_Dyn once.
Email C-04-cap
C-04-cap
Email C-04-finish
C-04-finish
Email 02sAD00000C6kvhYAB
02sAD00000C6kvhYAB
C-05

NZQA assistance for a residency change

PASS
Case00612809
CARa04AD000009fiBVYAY
Email02sAD00000C6ksTYAR
  • Citizen + "change to my residency status" ticked → notice + Ask us to help → case "NZQA registration assistance required — Etoe B2 P5 …" on the queue; AttendeeRegistrationNonNZCitizen_Dyn.
Email 02sAD00000C6ksTYAR
02sAD00000C6ksTYAR
C-06

Certificate-held case (guest or staff path)

PASS
Cases00612816 (REST, auto-assign on), 00612817 (hourly-batch retry), 00612814 (E-11)
  • Fix deployed 15-Nov 8:36 pm NZ (UAT 0AfAD00000VKNhm0AH).
  • All new hold cases since the fix are on Training - Pre-Registration/NZQA Queries. The wrap-up-code rule that blocked closing 00612812 only applies to CSC-owned cases, so it no longer bites.
C-07

Arlo "register by hand" case

BLOCKED
  • Needs the A-14 405 booking; no OrderProcess class in Arlo UAT.
C-08

API path: cert-hold case via the Training Portal REST call with auto-assign on

PASS
CARa04AD000009fiBQYAY
Case00612816 · 500AD00000fG6wTYAS · Training - Pre-Registration/NZQA Queries
Log07LAD00000SfYdY2AV
FixCase assignment rule: new first entry RT "NZQA Registration Hold" → Training queue
  • Fix deployed 15-Nov 8:36 pm NZ (UAT 0AfAD00000VKNhm0AH).
  • Training Portal PUT status: CR with Sforce-Auto-Assign: TRUE (the header that sent 00612812 to CSC queue): booking held at C; the assignment rule ran ("WF_RULE_ENTRY_ORDER|1 … Case Record Type equals NZQA Registration Hold" → true) and the case stayed on the Training queue; no owner change in CaseHistory.
  • Before the fix: 00612811 (no header) and 00612812 (TRUE) went to CSC queue; those two old test cases are still on CSC queue.
C-09

API path: sObject update C → CR, as "My StJohn" does

PASS
CARa04AD000009fhztYAA (A-01)
Case00612817 · Training - Pre-Registration/NZQA Queries
  • The sObject PATCH to CR (batch 3) runs no gate by itself. In Prod the hourly CertificateRequest_Hourly_Schedule (CertificateRequestBatchSchedulable, Salesforce Admin) retries every invoiced booking at CR; UAT has no such schedule.
  • Re-test: ran the batch's own call (requestBulk(…, RETRY)) as Shail on this booking only → HELD: back to C, CertificateHold__c true, hold case 00612817 on the Training queue. So once SFReg is released to Prod (not there yet), a "My StJohn" sObject update is caught within the hour by Prod's existing hourly schedule.
C-10

Watch: every SFReg case since the fix is on the queue

PASS
Cases00612807, 00612808, 00612809, 00612810
  • All 4 Web SFReg cases created after 15-Nov 01:30Z are owned by Training - Pre-Registration/NZQA Queries. None came from "My StJohn" yet (C-08/C-09 still to run).
C-11

NSN Create cap reached

BLOCKED
  • Needs the NZQA test rows and/or a passing Centrix test document (as B-16, B-18).
C-12

NSN Create finds the person already in NSI

BLOCKED
  • Needs the NZQA test rows and/or a passing Centrix test document (as B-16, B-18).
C-14

Possible duplicate attendee

PASS
CARa04AD000009fiBGYAY (B2 P2) matched a04AD000009fiBaYAI on the same booking (order 01724972)
Case00612815 · 500AD00000fG2ZPYA0
Email02sAD00000C6qMnYAJ (registration confirmed)
  • Staff form link (CSC_RESEND); page 2 as "Etoe Etoesixfix", date of birth 02/02/1990 (same as the other seat), no NZQA, Submit.
  • Case "Possible duplicate attendee — Etoe Etoesixfix — First Aid Level 1", Web/New, on Training - Pre-Registration/NZQA Queries; no case email; the registration completed. First time this case has been raised in any org.
  • First try with "Etoea B2" was refused on screen: names can't contain digits.
Email C-14-finish
C-14-finish
Email 02sAD00000C6qMnYAJ
02sAD00000C6qMnYAJ
C-15

Staff release a hold and resend

PASS
CARa04AD000009fiBaYAI
Attemptsnew AOB_RESEND row, identity attempts 0
Email02sAD00000C6jwQYAR
Case00612810 stays New
  • releaseHoldAndResend: "The hold was released. Registration email sent…"; actionRequired__c cleared; new link; case stays open.
  • Run through Apex, so the on-screen cancel/confirm step was not exercised.
Email 02sAD00000C6jwQYAR
02sAD00000C6jwQYAR
C-16

One help case per link

PASS
CARa04AD000009fjQbYAI
Case00612818 · Training - Pre-Registration/NZQA Queries
  • Run through the form's server methods as Shail (the form itself ends the session after help, so a second click can't be made on screen): staff link → consumeToken → submitHelpTicket twice in separate transactions.
  • Both returned case 00612818 ("Idempotent — existing help ticket on this link returned"); no second case.
R-02

Pre-course SMS is off in UAT

PASS
RunRun 19:15 NZ (06:15Z) logs 07LAD00000SfWYW2A3, 07LAD00000SfEi32AF (caught just before the TraceFlags expired)
Bookings33 real UAT bookings on 16-17 Nov classes (window = today+2 plus 1 catch-up day)
  • Rebuilt the job's query for 15-Nov: exactly 33 bookings pass it, and all 33 are in the 19:15 run logs (no extra, none missing).
  • 31 dispatch results USE_CASE_INACTIVE; 2 with no reason logged. No SMS_Message__c row (the only SMS row in 5 days is a 10-Nov Certificate_Issued), no Reminder2dSmsAt__c / Reminder7wSmsAt__c on any Attempts row.
  • Our own test bookings a04AD000009fij3YAA, a04AD000009fij8YAA (63449, 18-Nov) enter the window at the 16-Nov 00:15 NZ run: re-check then (same query).
R-05

Final reminder in UAT sends the email only

BLOCKED
Window25-27 Sep classes (7 weeks + catch-up)
  • Final_NZQA_Reg_Reminder is inactive in UAT (read). Only 2 real bookings in the window, neither attended, so no booking qualifies.
  • A new test booking can't be made for it: a booking created after its class is skipped by design (V0.99.60 D-187), and real bookings must not be backdated.
R-06

Finished registration gets no reminder

PASS
RunRun 19:15 NZ (06:15Z) logs 07LAD00000SfWYW2A3, 07LAD00000SfEi32AF (caught just before the TraceFlags expired)
  • Passive, on real UAT bookings: 11 finished registrations on 16-17 Nov classes (REG_COMPLETE 5, REGISTRATION_CONFIRMED 6) and 18 on 11-13 Nov classes were not picked by the 15-Nov runs; no reminder email or SMS.
  • No reminder markers on any Attempts row in UAT.
R-07

No post-course reminder without attendance or NZQA

PASS
Window11-13 Nov classes (2-day reminder + 2 catch-up days)
  • (a) 83 bookings in the post-course window have FATattendance__c blank: none picked, no AttendeeRegistrationReminder2d_Dyn sent.
  • (b) and (c) not observable: no UAT booking in the window is marked attended, so the NZQA and NZQAReported__c gates are never reached. No 2-day or 7-week reminder email has ever been sent in UAT.
R-08

Excluded statuses get nothing

PASS
RunRun 19:15 NZ (06:15Z) logs 07LAD00000SfWYW2A3, 07LAD00000SfEi32AF (caught just before the TraceFlags expired)
  • Not picked: pre-course CS 2, Swapped 2; post-course CS 9, DNA 7, Swapped 9. Transferred, Cancelled, Deceased not present in the windows.
R-09

Hourly runs never send twice

NOT RUN
  • Needs a reminder that was sent (R-03, after 20-Nov). The job does run hourly (165 dispatch jobs in 3 days) without making SMS rows.
R-10

Abandoned form gets the "finish your registration" email

NOT RUN
CARa04AD000009fij8YAA (63449)
  • Staff link opened and left on page 2 at 7:56 pm NZ (06:57Z). The abandonment sweep should mark it REG_ABANDONED and email a new link after 5 h (from about 1 am NZ, 16-Nov).
Email R-10-page2
R-10-page2
R-11

Historic ordered booking gets no reminders

PASS
CARa04AD000009fiSvYAI (63444, 13-Nov NZ; made 15-Nov after the class; attended; NZQA Required TRUE)
Log07LAD00000SfVsa2AF (SFReg SMS Reg Reminder Hourly, 8:15 pm NZ)
  • The 2-day query returned exactly this booking (Rows: 1: it passes attendance, NZQAReported__c and the NZQA gates); filterOutTerminalOutcomes kept it; dropHistoricBookings removed it (event1bCars → []). No dispatch job, no email, no Reminder2dEmailedAt__c, no SMS row.
P-01

Find a class and see its roster

PASS
Class63461 First Aid Level 1, Mt Wellington, 30-Nov
  • Run through the portal's server methods (SFReg_ClassroomPortalService) as Shail, because the controlled Chrome window kept returning to the Microsoft passkey sign-in.
  • findRoster('63461'): 5 bookings (4 NYA, 1 DNA), all ours; C, CS, NC and Swapped bookings left off, as designed.
P-02

"I am here" on a registered attendee

PASS
CARa04AD000009fb6ZYAQ (registered)
  • Run through the portal's server methods (SFReg_ClassroomPortalService) as Shail, because the controlled Chrome window kept returning to the Microsoft passkey sign-in.
  • markAttending → Status__c = ATT.
P-03

Confirm Attendance for an attendee not yet registered

PASS
CARa04AD000009fiBaYAI
  • Run through the portal's server methods (SFReg_ClassroomPortalService) as Shail, because the controlled Chrome window kept returning to the Microsoft passkey sign-in.
  • Details saved (P-05), then markAttending → ATT; registration still unfinished.
P-04

Mark all present

NOT RUN
  • Feature removed from the portal page on 25-Aug (only an unused controller method remains). Plan to drop or rewrite this case.
P-05

Correct a name in the window (same email)

PASS
CARa04AD000009fiBaYAI
Email02sAD00000C6ndRYAR
  • Run through the portal's server methods (SFReg_ClassroomPortalService) as Shail, because the controlled Chrome window kept returning to the Microsoft passkey sign-in.
  • Last name → Etoesixfix, same email: no swap; not finished, so AttendeeRegistrationAbandoned_Dyn with a new link.
Email 02sAD00000C6ndRYAR
02sAD00000C6ndRYAR
P-06

Change the email in the window: swap to another person

PASS
Old CARa04AD000009fiBLYAY → Swapped
New CARa04AD000009fikfYAA at PR
ArloChangeRegistrant Succeeded
Emails02sAD00000C6nf3YAB, 02sAD00000C6nf4YAB
  • Run through the portal's server methods (SFReg_ClassroomPortalService) as Shail, because the controlled Chrome window kept returning to the Microsoft passkey sign-in.
  • Task "Attendee Swapped - Etoe B2 P3"; new person got the NZQA booking email (the plan said the abandoned email); old attendee got AttendeeSwapped_Dyn.
Email 02sAD00000C6nf3YAB
02sAD00000C6nf3YAB
Email 02sAD00000C6nf4YAB
02sAD00000C6nf4YAB
P-07

Swap refused once the certificate is requested

PASS
CARa04AD000009fi1VYAQ (CS)
  • Run through the portal's server methods (SFReg_ClassroomPortalService) as Shail, because the controlled Chrome window kept returning to the Microsoft passkey sign-in.
  • Refused inside updateAttendeeDetails (the CR/CP/CS lock); booking unchanged, no new CAR. The message text itself only shows in the UI.
P-08

Switching class closes the Confirm Attendance window (V0.99.69)

NOT RUN
  • UI only. Skipped by Shail (15-Nov 8:52 pm NZ): the Chrome tab Claude drives stops at the Microsoft passkey prompt. Run by hand in UAT.
P-10

Booking removed from the class meanwhile

PASS
CARa04AD000009fb6eYAA (Swapped)
  • Run through the portal's server methods (SFReg_ClassroomPortalService) as Shail, because the controlled Chrome window kept returning to the Microsoft passkey sign-in.
  • markAttending refused in assertRosterBooking ("This booking is no longer on the class list…"); no write.
P-11

No access without the permission

BLOCKED
  • Needs a test user without Classroom Portal access to sign in as (as X-04).
P-12

Class busy: record lock retries

NOT RUN
  • Can't be forced from here: Salesforce waits up to 10 s for a lock and anonymous Apex can't hold one longer (10 s CPU limit). By code: a UNABLE_TO_LOCK_ROW on save becomes CLASS_BUSY (SFReg_ClassroomPortalService.isLockError / classBusy); the 3 s / 6 s retries are in the page. Needs two people saving on one class at once.
P-13

Tutor Portal shows the same roster

NOT RUN
  • UI only. Skipped by Shail (15-Nov 8:52 pm NZ): the Chrome tab Claude drives stops at the Microsoft passkey prompt. Run by hand in UAT.
P-14

No-show is set outside the portal

PASS
CARa04AD000009fb6UYAQ
  • Set to DNA by the REST call (D-04); the roster lists it with status DNA (No show group).
D-01

Swap before the class syncs to Arlo

PASS
Sync rowsa3VAD000001rdM12AI (guest swap, a04AD000009fiG1YAI), a3VAD000001rdQr2AI (portal swap, a04AD000009fikfYAA)
  • Both ChangeRegistrant rows Succeeded on the first try (B-12, P-06). Bookings are OQC orders, which keep the real Arlo id since ss.arlo.11. Not checked on the Arlo screen.
D-02

Change registrant after the class ends (Completed in Arlo)

PASS
Old CARa04AD000009fi6LYAQ → Swapped
New CARa04AD000009fiSvYAI
Arloevent 63444 Status Completed; registration 1606404 now Latesam Afterclass, e2e-d02-new@example.invalid (GET 15-Nov 8:10 pm)
  • Staff change through the Classroom Portal service after the class; Salesforce swap, swapped-out and booker emails; sync row Succeeded.
  • Confirmed in Arlo UAT by API GET: the change is real. Arlo accepts a change of registrant on a Completed event, so the plan's expectation ("Arlo refuses") was wrong; plan to update.
D-03

Guest swap after the class is refused

FAIL
Old CARa04AD000009fiSvYAI → Swapped
New CARa04AD000009fkOHYAY (NYA)
Sync rowChangeRegistrant Succeeded
Emails02sAD00000C6r4LYAR (swapped out), 02sAD00000C6r4MYAR (booker)
  • Staff form link (after-class allowed, CSC_RESEND) on the finished class 63444. Page 1 said "This course has now finished … your name and email address are locked", but the email field stayed editable; a new email led to "Is this information correct?" → Yes → "We've sent your new registration link".
  • Defect (High): the swap went through after the class (log "Swap complete — newCar=a04AD000009fkOHYAY"), Arlo registration changed, swap emails sent. Expected refusal post_event_closed, no new CAR, no sync row.
  • Also: the screen says a new link was sent to the new email, but nothing was sent and no Attempts row was made (the new CAR counts as booked after the class, so SFReg stays silent).
  • Run after the 8:15 pm reminder run so R-11 stayed clean.
Email D-03-confirm
D-03-confirm
Email D-03-swapped
D-03-swapped
Email 02sAD00000C6r4LYAR
02sAD00000C6r4LYAR
Email 02sAD00000C6r4MYAR
02sAD00000C6r4MYAR
D-04

Training Portal sets a result

PASS
CARsC: a04AD000009fi37YAA, a04AD000009fhztYAA, a04AD000009fi9ZYAQ, a04AD000009fi1VYAQ, a04AD000009fiBBYAY, a04AD000009fiBGYAY; DNA: a04AD000009fb6UYAQ; NC: a04AD000009fiBVYAY
  • PUT /services/apexrest/v1/contactAssetRoles with header status C, DNA, NC → HTTP 200 "Updated the ContactAssetRole__c Status__c value".
  • Status__c set; LastModifiedByContact__c = the updatedBy Contact; LastModifiedDateByContact__c = updatedAt. No certificate activity.
D-06

Certificate request in UAT (FSR mode)

BLOCKED
  • Needs the NZQA test rows and/or a passing Centrix test document (as B-16, B-18).
D-07

Missing status header

FAIL
  • Without the status header the call returns HTTP 200 with an empty body (code and message null). Expected 400 "No status value found in header". Nothing changed, but the caller can't tell.
D-08

Unknown or inactive booking id

FAIL
CARa04AD000009fb6eYAA (Swapped)
  • Defect (Medium): a Swapped booking was accepted: HTTP 200 and Status__c Swapped → C. The Training Portal path doesn't check the booking is active. Restored to Swapped afterwards by the same call.
D-10

Several ids: one bad id rolls back all

FAIL
CARsa04AD000009fiBQYAY + a04AD000009fb6eYAA
  • No id was refused (see D-08), so both changed; the rollback path was never reached.
D-11

OQC booking swap without a real Arlo id

PASS
Old CARa04AD000009fjC5YAI → Swapped
New CARa04AD000009fjQbYAI
Sync rowa3VAD000001rdc92AA FailedPermanent
Emails02sAD00000C6o4sYAB, 02sAD00000C6o4tYAB
  • Set the test booking's arloRegistrationId to the marker PUB-CREATED:63461 (was 1606402), then a staff swap.
  • Salesforce swap done; sync row "changeRegistrant: HTTP 404 — this booking has no Arlo registration id (PUB-CREATED:63461). Swap the attendee in Arlo by hand." No case raised for it (known: a failed ChangeRegistrant makes no case). Arlo 1606402 still shows "Swaptwo Btenperson".
Email 02sAD00000C6o4sYAB
02sAD00000C6o4sYAB
Email 02sAD00000C6o4tYAB
02sAD00000C6o4tYAB
D-12

Salesforce-created class is not synced

BLOCKED
  • UAT has SF-created classes (e.g. S90000361, FA1 18-Nov), but all their bookings are real customers'. OQC can't book an S class (it looks the class up in Arlo).
D-13

Nightly trainer and venue on the class (V0.99.71)

PASS
Parent02iAD000005DCmrYAG (63087) EventContactName__c = Kohan Carden
Bookings02iAD000006G5RhYAK, 02iAD000008eKY5YAM
Runs707AD00001nuvLE, 707AD00001nuv0L (14-Nov)
  • Run on 14-Nov (Shail's go); re-read 15-Nov: bookings' Product_Capability_Description__c = "Hato Hone St John Mt Wellington, 10 Harrison Road, Mt Wellington, Auckland, 1060" (OQC format), VenueName rows "Hato Hone St John Mt Wellington".
  • Portal header with the trainer not checked (UI). Nightly schedule and backfill not set up yet in UAT.
E-01

NZQA certificate for a verified attendee

BLOCKED
  • Needs the NZQA test rows and/or a passing Centrix test document (as B-16, B-18).
E-02

Standard certificate: course has no NZQA

FAIL
CARa04AD000009fi9ZYAQ (MHFA)
FileCert_Etoe_Ab_8382015_20261115
Email02sAD00000C6lVBYAZ
  • Certificate PDF filed and PostCourseCompletionCert_Dyn sent, but CS was not written: "emailed but CS not written: unable to obtain exclusive access to this record (recorded ISSUED: the next request sets it to CS)".
  • Left at CR until the next request; a repeat CR (E-09) set it to CS. CertificateRequestBatch is not scheduled in UAT, so without a repeat call it would stay at CR.
Email 02sAD00000C6lVBYAZ
02sAD00000C6lVBYAZ
E-03

Standard certificate: attendee declined NZQA

PASS
CARa04AD000009fi1VYAQ (A-03, single booking)
FileCert_Etoe_A_8381975_20261115
Email02sAD00000C6hWZYAZ
  • CR → certificate filed, PostCourseCompletionCert_Dyn, Status__c = CS (no CP step). Decision fields on Attempts aren't readable by my user (FLS), so STANDARD/NZQA_DECLINED is inferred from the issue.
Email 02sAD00000C6hWZYAZ
02sAD00000C6hWZYAZ
E-04

Held: registration not finished

PASS
CARa04AD000009fi37YAA (A-05)
Case00612812 · 500AD00000fFopoYAC · RT NZQA_Registration_Hold
  • CR → back to C; CertificateHold__c = true; reason NZQA_REGISTRATION_INCOMPLETE; hold case "NZQA registration incomplete — certificate held", Web/Medium, Registration_Hold_CAR__c set; no certificate email.
  • Owner was wrong: see C-08.
E-05

Held: NSN not verified

BLOCKED
  • Needs the NZQA test rows and/or a passing Centrix test document (as B-16, B-18).
E-06

Released when the attendee finishes with NZQA

BLOCKED
  • Needs the NZQA test rows and/or a passing Centrix test document (as B-16, B-18).
E-07

Released when the attendee declines NZQA

FAIL
CARa04AD000009fi37YAA
Job707AD00001nzPjdYAE Failed (Automated Process)
RecoveredCert_Etoe_A_8381980_20261115 · 02sAD00000C6nokYAB · CS
Case00612812 still New (CSC queue, pre-fix)
  • Release on the attendee's own finish worked (NZQA_OPT_OUT, STANDARD), but the immediate certificate job runs as Automated Process from the event and fails: "no access to DynamicCertificatePdfController". Open for the developer: skip that attempt in the event context (or run the event as a named user).
  • Recovery proven: the Prod hourly retry's call (requestBulk(…, RETRY), as Shail, this booking only) issued the standard certificate and set CS. After the SFReg release, Prod's existing hourly schedule would issue it within the hour; in UAT nothing retries (no schedule; 77 invoiced CR bookings, so not scheduled).
  • Hold case 00612812 stays open (it was created on CSC queue before the C-08 fix); the eight-week closure tidies CS bookings that are still flagged (up to 10 a day).
Email E-07-registered
E-07-registered
Email 02sAD00000C6q0DYAR
02sAD00000C6q0DYAR
Email 02sAD00000C6nokYAB
02sAD00000C6nokYAB
E-08

Staff Release certificate

PASS
CARa04AD000009fiBBYAY (B2 P1, held; NZQA Required stuck TRUE by the B-15 defect)
Case00612811 stays New
  • (a) releaseCertificate → NOT_READY "Not ready for a certificate: NSN_MISSING…"; hold stays true, case stays open.
  • (b) "held booking now entitled" not run: E-07 showed the automatic release fires first, so no held-and-entitled booking was left to release by hand.
E-09

Issued once only

PASS
CARsa04AD000009fi1VYAQ, a04AD000009fi9ZYAQ
  • Repeat CR → "completed again after their certificate was sent: set back to CS, nothing issued". Still one certificate email each.
E-10

Duplicate request within 15 minutes

PASS
CARa04AD000009fjATYAY
Logs07LAD00000SfVkU2AV (1st CR 06:38:06Z), 07LAD00000SfGtZ2AV (2nd CR 06:38:08Z)
  • Two CR PUTs 2 seconds apart, both HTTP 200. The second logged inFlightSkipped 1; one certificate file and one PostCourseCompletionCert_Dyn only; CS.
E-11

Older booking with no Attempts row

PASS
Order01724976 · 801AD00001G9p3FYAR (historic, class 63300, 14-Sep NZ)
CARa04AD000009fj8rYAA
Arlo syncCreateRegistration Succeeded
Case00612814 · 500AD00000fFsKCYA0 · RT NZQA_Registration_Hold · Training - Pre-Registration/NZQA Queries
Email02sAD00000C6maxYAB
  • Booked after the class, so no Attempts row and no booking email (as A-13). Marked attended; Training Portal PUT C, then CR (with Sforce-Auto-Assign: FALSE, the C-08 workaround).
  • Held: back to C, CertificateHold__c true, hold case on the Training queue; an AttendeeRegistrationAbandoned_Dyn invite went out and a new Attempts row (INITIAL_REGISTRATION) was made.
  • This booking is the F-06 subject: the 16-Nov 10:30 am NZ closure run should opt it out and issue a standard certificate.
Email 02sAD00000C6maxYAB
02sAD00000C6maxYAB
E-13

Check the mode before every certificate run

PASS
  • OrderAPIOutbound: UAT true (FSR), QA false (FIS), read 15-Nov 7:30 pm NZ. Unchanged, so groups D and E stand.
F-01

Staff: Opt in to NZQA & send email

FAIL
CARa04AD000009fij8YAA (2-attendee order 01724975)
Email02sAD00000C6lN9YAJ
  • Result: "NZQA opt-in not recorded: this booking has more than one NZQA option record; Training Administration needs to correct the booking first." Email with a new link still sent (AOB_OPT_IN_AND_RESEND).
  • Same root cause as B-15: every OQC booking with 2+ attendees shares ExternalCode__c, so staff can't change NZQA on any of them.
Email 02sAD00000C6lN9YAJ
02sAD00000C6lN9YAJ
F-02

Opt in refused while on hold

PASS
CARa04AD000009fi37YAA (A-05)
Case00612812 stays New
  • Opt-in returned ALREADY_SET and sent a new link; CertificateHold__c stays true and the hold case stays open (opt-in never releases a hold).
  • No HOLD_RELEASE_CONFIRM_REQUIRED prompt: that applies to a registration hold (help/identity), not a certificate hold. Plan text to clarify.
Email 02sAD00000C6lNAYAZ
02sAD00000C6lNAYAZ
F-03

Reopen after finishing without NZQA

FAIL
CARa04AD000009fi1VYAQ (A-03, CS)
  • Refused: CAR_INELIGIBLE "This booking is in status Certificate Sent — the attendee cannot register on it." The plan expected a reopen confirmation (V0.99.45). Likely by design since C-137 ("CS ends registration"); confirm with the developer and update the plan.
F-04

Opt in refused after a post-course finish

FAIL
CARa04AD000009fkOHYAY (finished without NZQA after class 63444; REGISTERED_NO_NZQA)
  • Form finished after the class without NZQA (staff link), then Act on Behalf → Opt in to NZQA: REOPEN_CONFIRM_REQUIRED ("Adding NZQA reopens their registration: confirm it on the panel first"); the panel's confirm (reopenForNzqaAndResend) went on to the NZQA write and stopped only on OPT_IN_NOT_RECORDED (AMBIGUOUS). Nothing changed.
  • Defect (Medium): the after-course read-only rule (ERR_AFTER_COURSE_READ_ONLY) did not stop the opt-in or the reopen; only the AMBIGUOUS add-on did.
  • Defect extends B-15: the booking now has three NZQA Required rows on one ExternalCode__c (two Swapped from the swaps + one TRUE), so the attendee's own opt-out was also "AMBIGUOUS — not recorded". Any swapped booking, even a single-attendee one, loses NZQA opt-in/opt-out.
F-05

Attendee opts out on the form

FAIL
CARsa04AD000009fiBBYAY (group, held as 00612811); a04AD000009fi1VYAQ (single, standard certificate)
  • See B-15. Consequence proven: B2 P1 declined NZQA but the add-on stayed TRUE, so its CR was held (NZQA_REGISTRATION_INCOMPLETE, case 00612811) instead of getting a standard certificate. The single booking A-03 got its standard certificate.
F-06

Eight-week closure of a held booking

PASS
CARa04AD000009fj8rYAA (E-11 booking, class 63300 14-Sep, attended, held at C)
Job707AD00001nzKeVYAU (SFReg_PostCourseCertClosureBatch.runNow() as Shail = the 10:30 NZ daily job, run early)
Case00612814 Closed
FileCert_Etoe_E_8382110_20261115
Email02sAD00000C6rh3YAB
  • Checked first: only this booking was in the window (attended, C/CR, 23-Aug to 20-Sep).
  • Log: "seen 1, closed out 1". NZQA Required → FALSE; AutoOptOutClosedAt__c set; standard certificate issued (job ran as Shail, Completed); AutoOptOutNZQACertSend_Dyn sent; Status__c CS; hold case Closed with "Auto opt-out at eight weeks: NZQA registration not completed; standard certificate requested."
Email 02sAD00000C6rh3YAB
02sAD00000C6rh3YAB
F-07

Registered just before the closure run

BLOCKED
  • Needs a verified NSN finish (NZQA test rows / Centrix).
F-08

Closure leaves the wrong bookings alone

PASS
LogsSFREG_Log__c finish rows 08-15 Nov
  • The batch only selects attended bookings at C/CR; every daily run 08-15 Nov logged "seen 0" (no UAT booking 56-84 days old is marked attended), so none of the not-attended, ATT or CS bookings was touched.
F-09

Closure tidies orphan hold cases

PASS
Case00612674 · 500AD00000een0RYAQ (RT NZQA_Registration_Hold)
CARa04AD000009TCK2YAO (Swapped)
  • The 12-Nov 10:30 NZ run closed it with "Closure reason: Booking swapped, transferred or cancelled: hold no longer applies." (log: "orphan bookings tidied 1"). The CS tidy branch was not seen.
X-01

Email gate is off before every run

PASS
  • Allow_Send_To_Actual_Recipients = false (read 15-Nov).
X-02

A used link shows no personal details

PASS
  • Used-link screen shows no name, email or booking (B-02).
X-03

NSI data never reaches the browser

BLOCKED
  • Needs someone else's NSN from the NZQA test rows.
X-04

Staff tools need their permission

BLOCKED
  • Needs a test user without Act on Behalf / Classroom Portal access to sign in as; none exists and creating one is a write.
X-05

Citizen without a residency change gets no non-citizen case

PASS
CARa04AD000009fiBVYAY
  • Citizen, box unticked: no notice, Check NSN enabled, no help button.
X-06

Resend refused for an email opt-out

PASS
CARa04AD000009fi4jYAA (A-09 BLS)
PersonLead 00QAD00000UJEpC2AX → Contact 003AD000017n8jIYAQ (opted out of transactional email)
  • Set HasOptedOutOfTransactionalEmail__c on the test Lead; opened a staff link; on "This link has already been used" → Resend me another link: "We can't email you a new link because you've asked us not to send you emails. Please call us on 0800 FIRST AID…". No new Attempts row, no email.
  • Opening the link converted the Lead to a Contact (the opt-out carried over). Finding (Low): a reload while the first load was still converting the Lead showed "Something went wrong with your registration" (log "Lead not found", the Lead had just been converted) instead of the used-link screen. The page itself says not to refresh while loading.
Email X-06-refused
X-06-refused
X-07

Identity cap scope per link kind

PASS
CARa04AD000009fiBaYAI
  • After the cap, the AOB_RESEND link started with identity attempts 0 (fresh allowance). CSC_RESEND not tried on this booking.
X-08

Name or date of birth changed outside the form

PASS
(a) CARa04AD000009fiBaYAI (started, NZQA on); DOB row a0LAD00000HRPa12AH
(b) CARa04AD000009fi1VYAQ (CS); DOB row a0LAD00000HROpG2AX
Email02sAD00000C6qOPYAZ
  • Direct edit of the attendeeDateOfBirth row as Shail.
  • (a) First edit while the latest link was unopened: "the registration has not started, so nothing is reset" (by design). Opened the newest link, edited again: "Registration reset after a details change (date of birth); new link emailed" — Attempts TOKEN_REISSUE, the open session ended, AttendeeRegistrationAbandoned_Dyn.
  • (b) "Details changed (date of birth) after finishing (certificate sent): no reset; the panel flags it."
Email 02sAD00000C6qOPYAZ
02sAD00000C6qOPYAZ
X-09

Website course move

BLOCKED
  • Needs a website booking moved to another class; website checkout isn't driven in this run, and OQC bookings don't use that path.
X-10

Macrons and apostrophes end to end

PASS
CARa04AD000009fjATYAY
FixDynamicCertificatePdfController.unicodeSafe + DynamicCertificatePdfX10Test
BeforeCert_MereĀta_OKōwhai_8382115_20261115 printed "Mere-ta O'Kwhai"
  • Fix deployed 15-Nov 8:36 pm NZ (UAT 0AfAD00000VKNhm0AH).
  • Re-rendered the certificate page for this booking (read-only, getContentAsPDF, template a3ZAD000002yp052AA): "Mere-Āta O'Kōwhai". Text beyond Latin-1 now prints in Arial Unicode MS, which has no bold, so a macron name prints in regular weight; other names and the course line stay bold.
  • Still open (Shail to decide): the file name drops "-" and "'" (Cert_MereĀta_OKōwhai_…) by the letters-only rule in DynamicCertificateType.
Email X-10-cert-after
X-10-cert-after
Email X-10-cert
X-10-cert
Email 02sAD00000C6pqXYAR
02sAD00000C6pqXYAR
X-11

Finished in one tab, still open in another

PASS
CARa04AD000009fikfYAA
  • On screen a second tab can't join the session (the session lives in the page only). The server guard tested directly: staff link → consumeToken → declineNzqa (finished, REGISTERED_NO_NZQA, COMPLETED) → the same session's declineNzqa again = the other tab → refused SESSION_ENDED; nothing overwritten.
X-12

Prod pre-deploy: the queue exists

PASS
Queue00G7F000003jvNFUAY
  • Training_Pre_Registration_NZQA_Queries present in UAT.