Work the member directory
The directory is the module's front door. It has a table view and four alternative list views, all reading the same paged list underneath.
Search
Type in the box. The term is committed after 300 ms of no typing, or immediately on Enter.
The placeholder reads "Search by name or member ID…". PTRS matches the lowercased term against a child's first name or last name only.
A member's organisation-assigned id is returned in the response and never searched, and nothing in PTRS writes that field anyway, so it is blank on every child.
Search matches part of either name, case-insensitive, one at a time. Searching "smith j" finds nobody; search one name at a time.
Filters
Three drop-downs, all on the table view only. Each is saved to the page's address, so a filtered view can be bookmarked and shared.
| Filter | Values | Behaviour |
|---|---|---|
| Status | The nine statuses the page lists | Checked against the values PTRS recognises; an unknown value is ignored rather than refused |
| Grade | Pre-K, K, 1st, up to 12th | Matched against the stored value exactly |
| Age | 5 to 8, 9 to 11, 12 to 14, 15 to 18 | Converted to a date-of-birth range on PTRS's side. The arithmetic is correct |
Active filters appear as removable chips under the bar. Clear All resets everything including the search term.
The filter looks for "3rd". Quick Member Entry stores a bare "3". The comparison is exact, so those children are invisible under any grade filter.
The registration wizard and the edit sheet use the filter's own vocabulary, so records created or corrected there do match. If a child is missing from a grade filter, open their record and check what the Grade field actually contains.
The status list leaves out "Deceased", the tenth status PTRS recognises. A child in that state, which nothing in the interface can set, appears only under All Statuses.
Sorting
Click a column header to sort; click again to reverse. Five headers are clickable and two of them actually work.
| Header | Sends | PTRS handles it as | Result |
|---|---|---|---|
| Name | name | last name | Sorts by last name, which is what you wanted |
| Age | age | last name | Sorts by last name |
| Grade | grade | last name | Sorts by last name |
| Status | status | last name | Sorts by last name |
| Enrolled | enrolment date | enrolment date | Works |
PTRS handles first name, date of birth and enrolment date by name, and falls back to last name for everything else. The arrow indicator moves to whichever header you clicked, so Age, Grade and Status look sorted and are not.
First name and date of birth are supported by PTRS and no header sends either.
Paging
25, 50 or 100 per page, chosen at the bottom right. Both the page and the size are saved to the page's address. The count beside the Members heading is PTRS's total for the current filter, not the number of rows on screen.
The four alternative views
The tab bar under the heading switches between five views. All five share the search box; only the default table view has the status, grade and age filters.
| View | Shows | Reads |
|---|---|---|
| All Members | The sortable table | The paged search |
| Guardians | One row per child with their guardians | The paged list, then one extra reading per row |
| Emergency Contacts | One row per child with their contacts | The paged list, then one extra reading per row |
| Demographics | Gender, ethnicity, grade and age spread | The paged list only |
| Enrollment Status | Status and enrolment date per child | The paged list only |
Guardians and Emergency Contacts each fan out into one extra reading per child on the page.
At the default page size that is 26 readings to render one screen, and at 100 per page it is 101. There is no single reading that returns every child's guardians or contacts together. Expect these two views to be slow and to stay slow; use a smaller page size.
Export and print
Quick Actions → Export as CSV downloads the rows currently loaded, the current page, not the whole filtered set. Selecting rows with the checkboxes and using Export CSV in the bulk bar exports only the selected ones.
Quick Actions → Print Member List and the bulk bar's Print both print the current page as shown.
The exported list is built from what is already on screen, so it carries name, date of birth, grade, status, school, enrolment date and last visit, and no medical or contact detail.
The QR badge
The QR icon on a child's row links to her record; the badge itself is on her own page.
- Open the child's record.
- Press Generate QR in the header.
- The badge renders at wallet-card size, 2.125 by 3.375 inches, the standard ID-card format.
- Download exports a picture at print resolution.
The code encodes the child's record id. The badge also shows her initials or photo, age, grade, location and any allergies or medical alerts from her record.
"Expires" is worked out in the browser as 30 June of next year. It is a fixed formula, not a stored value: nothing in PTRS records or enforces a badge expiry, and every badge printed in a given calendar year carries the same date.
The ID printed under the name is the last eight characters of the child's internal record id, in capitals. The dialog will use her organisation- assigned id when she has one, and nothing in PTRS ever writes that field.
A working, PTRS-rendered version of the same code exists, and nothing calls it. The browser generates its own instead.
What the columns mean
| Column | Source |
|---|---|
| Age | Calculated in the browser from the date of birth. A dash when the date is missing |
| Grade | The stored free-text value, verbatim |
| Status | The child's status, colour-coded |
| School | The stored school name |
| Enrolled | The enrolment date, shown as month and year |
| Last Visit | The most recent check-in, as a relative time. A dash when there is none |
Last Visit looks up attendance for each row individually and is the one column that reaches outside this module.
Where a child has no photo on file, which is every child, since nothing writes that field, the avatar falls back to an outside image service, with the child's full name written into the request.
That is one outbound request per row, per render, to a service outside the organisation, carrying a child's name. It happens on the desktop table and on the mobile card list.
What a permission failure looks like here
The navigation shows all six Members entries to every signed-in user and checks no role. The page checks none either, and the list reading does not check for a refusal.
| Role | What they see |
|---|---|
| Staff member, site director, organisation administrator, super admin | The directory, working |
| Regional director | "No members found.", above a working-looking Register New Member button that PTRS refuses on submit |
| Read-only account | "No members found.", without the buttons |
| Guardian, OCCL auditor | The same empty list |
If the directory is empty and you know there are members, check your role before checking your filters.
Where to go next
Checked against PTRS on 7 September 2026.