Who can do what with curriculum, staffing, goals, assessments and surveys
This page covers all 49 things PTRS can do for a program's curriculum and resource library, its staffing, and its goals, assessments, surveys and evaluation. The core setup and enrolment half is covered on Who can do what with a program's setup, schedule and enrolment; the money and governance half is covered on Who can do what with money and governance.
Every row states whether anything in the product actually reaches it.
Who is admitted
All 49 require the module-wide setting. Only one of them adds a second, narrower setting on top: reading a program's staff list, the last of thirteen actions across the whole module that narrow this way.
| Requirement | Count | Effective audience |
|---|---|---|
| The module-wide setting only | 37 | Site directors, regional directors, organisation administrators, super admins |
| The module-wide setting, narrowed | 1 | Site directors, organisation administrators, super admins |
| No setting beyond being signed in to the group | 11 | Site directors, regional directors, organisation administrators, super admins |
None of the 49 widens access, and none is open with no sign-in check.
What a role actually experiences
Twelve of these screens sit inside a program's own tabs, so a role first has to pass the check every tab depends on: reading the program's own detail.
| Role | What they can actually reach |
|---|---|
| Site directors, organisation administrators, super admins | All 49, and every screen |
| Regional directors | 48 of the 49 by setting alone, and only one screen in practice. Every program tab shows a failure message, because the check every tab depends on refuses the role first. The one exception is the Resource Library, which sits outside a specific program and works fully for that role, including adding and removing items |
| Staff members | None. The module-wide setting excludes the role, so reading the staff list is refused too, even though its narrower setting would otherwise admit it |
| Guardians, OCCL auditors, read-only accounts | None |
It is the first Programs surface in this portal whose effective audience includes that role. The Program Calendar is the other screen the role can load, and it is permanently empty and linked from nowhere; the resource library holds real records, and its add and delete controls both work.
How to read the "Reachable" column
| Value | Meaning |
|---|---|
| A screen or component name | Something in the product calls this action in normal use |
| Nothing reaches it | The action is built correctly and no screen calls it |
| Reachable, always stuck | A control calls it and the branch that would matter never actually runs |
Summary
| Count | |
|---|---|
| Actions in this subset | 49 |
| Reachable by a screen | 27 |
| Reachable by nothing | 22 |
| Of the 27, cannot succeed as built | 1 |
| Of the 27, wired up and never reached | 1 |
| Add a narrower setting | 1 |
| Carry no setting beyond the module-wide one | 11 |
Curriculum, units, sessions and the resource library (21 actions)
| Action | Reachable by | Note |
|---|---|---|
| Create a curriculum | The Curriculum tab | Length checks match the underlying storage exactly, 200 and 2,000 |
| Correct a curriculum's name or hours | Nothing reaches it | The only way to rename a curriculum or change its estimated hours |
| Read one curriculum in full | The Curriculum tab | Returns the whole outline, units, sessions, activities, materials, assessments, in order |
| Read a program's curricula | The Curriculum tab | Newest first |
| Delete a curriculum | The Curriculum tab | Permanent. Takes every unit, session, activity, material and assessment with it |
| Publish a curriculum | The Curriculum tab | One-way. A second attempt is refused. There is no unpublish |
| Clone a curriculum | The Curriculum tab | A genuine deep copy, every unit, session, activity, material and assessment. The copy starts as a fresh draft in the same program |
| Add a unit | The Curriculum tab | Always sends the fixed name "New Unit" and zero estimated hours; there is no form |
| Correct a unit | Nothing reaches it | The only way to rename a unit or give it learning objectives |
| Delete a unit | The Curriculum tab | Permanent, taking its sessions and their contents |
| Reorder a unit or session | Reachable, always stuck | See Drag-to-reorder |
| Add a session | The Curriculum tab | Always sends the fixed title "New Session", 60 minutes and type Workshop; there is no form |
| Correct a session | Nothing reaches it | The only way to retitle a session, change its length or type, or link it to a real dated meeting |
| Delete a session | The Curriculum tab | Permanent |
| Set a session's activities | Nothing reaches it | Replace-all. The only writer of a session's activities |
| Set a session's materials | Nothing reaches it | Replace-all. The only writer of a session's materials, and therefore the only way to attach a resource library item to anything |
| Set a session's assessments | Nothing reaches it | Replace-all. The only writer of a session's assessments |
| Add a library resource | The Resource Library | Takes the organisation from your own sign-in, unlike the Members create path |
| Correct a library resource | Nothing reaches it | No edit control exists on the screen |
| Read the library | The Resource Library | An exact match on content type, plus a search over title, description and tags |
| Delete a library resource | The Resource Library | Permanent. Any session material pointing at it has its reference cleared |
Drag-to-reorder can never succeed
The Curriculum Builder wraps units and sessions in a drag-and-drop list. On drop, the screen and PTRS disagree on the wording of what is being moved, and PTRS refuses the request, naming the wrong term for it in the message.
What you see: the list animates into the new order, a red message appears carrying that wording mismatch, and the order reverts. Nothing is saved, and a unit or session's position therefore only ever holds the value it was given at creation, the length of the list at the time, so insertion order.
The same underlying action has a third case for reordering activities, and nothing anywhere calls it: no screen renders an activity list that can be reordered.
The three replace-all actions above are the only writers of a session's activities, materials and assessments, and none of the three is reachable from any screen. The session detail panel renders all three lists read-only and shows "No activities yet", "No materials yet" and "No assessments yet" on every session in every program.
Program staffing and certification (7 actions)
| Action | Reachable by | Note |
|---|---|---|
| Assign staff to a program | The Staff tab | Refuses a duplicate assignment. Checks that the staff member exists and nothing else, not a background check, not an onboarding clearance, not whether the person is active |
| Read a program's staff | The Staff tab | The subset's only action requiring the narrower setting. A staff record that was removed disappears from this list too |
| Remove a staff assignment | The Staff tab | Permanent, which is what makes re-assigning the same person afterward work |
| Set a program's certification requirements | Nothing reaches it | Replace-all. The only writer of a program's certification requirements, and the whole Compliance tab depends on it, see below |
| Check staff compliance | The Staff tab | Correct credential arithmetic including grace periods. Returns an empty result when the program has no requirements |
| Read available staff | The Staff tab | Every active staff member in the organisation, minus those already assigned. Not filtered to the program's own site |
| Correct a staff assignment | Nothing reaches it | The only way to change a role, an end date, hours per week, the primary flag, or whether the assignment is active |
The Compliance tab can never show anything
The compliance check returns an empty result as soon as either the assignment list or the requirement list is empty. Setting a program's certification requirements has no client control and is reachable from no screen anywhere in PTRS.
So no program has a certification requirement, the check comes back empty on every program, and the Compliance tab reads: "No compliance data. Assign staff and set certification requirements to see compliance."
The second half of that sentence names a control that does not exist anywhere in PTRS.
The consequence is worth stating plainly: this is the only place in PTRS that checks a credential against the specific program a staff member is working on, and it cannot run.
Goals, KPIs, learning outcomes, assessment, surveys and evaluation (21 actions)
| Action | Reachable by | Note |
|---|---|---|
| Create a goal | The Goals tab | Checks Category against a seven-choice list, without regard to case. Always creates the goal Not Started |
| Change a goal's status | Nothing reaches it | The only way to move a goal's status anywhere |
| Read a program's goals | Nothing reaches it | Complete and unused; the Goals tab reads the dashboard instead |
| Read the goals dashboard | The Goals tab | Five status counters plus the full goal outline |
| Set a program's learning outcomes | Nothing reaches it | Replace-all, and the only writer of a learning outcome. Replacing them deletes any child progress attached to the old ones |
| Create an assessment | The Assessments tab | Checks Type against a nine-choice list. Always starts active |
| Read a program's assessments | The Assessments tab | Each assessment's result count is a live count |
| Read a child's progress on an outcome | Nothing reaches it | No screen shows a child's progress against a program's learning outcomes |
| Record a child's progress | Nothing reaches it | A correct upsert keyed on the child, the program and the outcome. The only writer of that record |
| Record a program evaluation | Nothing reaches it | Checks the overall rating against a fixed list. The Evaluation screen calls nothing at all, see below |
| Read a program's evaluations | Nothing reaches it | Same |
| Create a survey | The Survey Builder | Has nowhere to carry the builder's Active checkbox, so it is dropped; every survey starts active by default instead |
| Correct a survey | Reachable, always stuck | The builder calls this when given an existing survey to edit. The surveys screen never renders that way, so the branch never runs |
| Read a program's surveys | The Surveys tab | Each survey's response count is a live count |
| Compare pre and post assessment averages | The Assessments tab | See the pre/post pairing |
| Add an objective under a goal | Nothing reaches it | The only writer of an objective |
| Set an objective's value and success criteria | Nothing reaches it | Replace-all for success criteria. The only writer of them |
| Record a KPI measurement | Nothing reaches it | The only writer of a KPI measurement |
| Record an assessment score | Nothing reaches it | The only writer of an assessment result. Falls back to the assessment's own maximum score when none is given |
| Submit a survey response | Nothing reaches it | The only writer of a survey response. Refuses a second response from the same child |
| Read a survey's results | Nothing reaches it | No screen shows survey responses |
The Evaluation screen does not connect to PTRS at all
The Evaluation tab loads no data and calls no action. Its list is a fixed, empty value built into the screen, and its create dialog's five inputs have no value and no response to typing; Create closes the dialog and does nothing else.
So the screen is permanently empty and its three tiles permanently read zero, whatever the database holds, and both underlying actions, complete and correct, have no screen reaching them.
It is also the only Programs tab with no role check on its primary action: every other tab hides its create control behind the management setting; this one shows New Evaluation unconditionally.
The pre/post comparison cannot be matched to its assessment
PTRS groups assessments by their title with "(Pre)" and "(Post)" stripped off, the convention it expects, and returns the stripped title.
The assessments screen matches that back with an exact comparison against the unstripped title.
So a pair named "Reading (Pre)" and "Reading (Post)" produces a comparison keyed "Reading", which matches neither card, and no comparison is ever shown. A pair given the exact same title twice does match, and is the only naming that works.
Requests that always fail
| Request | Why | What you see |
|---|---|---|
| Reorder a unit | PTRS expects the plural form of the word and the screen sends the singular | The list snaps back and a red message names the wrong term |
| Reorder a session | The same mismatch | The same message, naming the other term |
Both are the same underlying mismatch and the same one-word fix.
Length checks in this subset
Sixteen of the subset's 29 body-taking write actions have a real length check; thirteen have none. The split is not even across areas.
| Area | Write actions taking a body | With a check | Without |
|---|---|---|---|
| Curriculum, units, sessions, resource library | 13 | 12 | 1, reordering |
| Staffing and certification | 3 | 3 | 0 |
| Goals, KPIs, assessment, surveys, evaluation | 13 | 1, creating a goal | 12 |
Where a check exists in the curriculum area, its limits match the underlying storage exactly: 200 for every name and title, 2,000 for a description, 4,000 for learning objectives and a session description, 2,000 for a file address, 100 for a content type, 1,000 for tags. That matches the discipline found in the scheduling half of the core subset, and it is the best of any area read so far.
Where no check exists, the storage size is the only limit, so an over-length value is a plain server error rather than a field message, and every date parsed by hand in those actions is unguarded.
Full list, with the storage limit each field is written into: Curriculum and goal fields.
Where to go next
Checked against PTRS on 7 September 2026.