Ale dirèk nan kontni prensipal la

Member and guardian fields

Every field a person can fill in, what limits it, and which screen can supply it.

PTRS checks almost nothing before a save leaves the browser. The rule run on PTRS's own side, after the save is sent, is the only rule there is, and a person finds out it was broken after pressing Save. Where PTRS's own check is looser than the space actually available to store the value, the result is a plain server error with no explanation, not a helpful message; those cases are marked.

Four write actions in this module have no check at all: adding a guardian, verifying a document (a check exists on the wrong action; the one that runs takes free text), moving a document's status, and deleting a document. Of the twenty checks that do exist, eleven set a maximum length, a better ratio than any module read so far, and still not a complete one.

Member

A child's own record carries 44 fields. The table gives the space actually available, the rule PTRS enforces, and which of the four creation and edit surfaces can supply it.

The surfaces column uses four letters: QA for Quick Actions → Quick Member Entry, W for the eight-step registration wizard, E for the edit sheet on a child's record, and S for Quick Scan's extraction.

FieldLimitRuleQAWESNotes
First name100, requiredRequired on create and updateSet to "Unknown" on a scan when unreadable
Middle name100None
Last name100, requiredRequired
Nickname100None
Suffix20NoneCollected by the wizard's step 1 and never sent
Date of birthRequired, fixed at creationRequired on create onlyCannot be changed after creation. The edit sheet shows it as required and does not send it
GenderA named choice, 50Checked; an unrecognised value fails the saveMale, Female, Non-binary, Prefer not to say, Other
EthnicityA named choice, 50Checked; an unrecognised value fails the save9 choices
Member StatusA named choice, 50Checked; an unrecognised value fails the save10 choices; a scan always sets "New"
Status reason, status changed date500No ruleNo writer anywhere
Membership TypeA named choice, 50No ruleNo writer anywhere. The wizard offers six choices and does not send them
Organisation member id100No ruleNo writer anywhere. The badge falls back to the child's internal record id
Grade20NoneFree text. Three vocabularies; see Age and grade
Photo2000No ruleNo writer anywhere. Every avatar falls back to an outside image service
Primary guardianA link to a guardian recordNo ruleSet only when a guardian is created alongside the child
Language PreferenceA named choice, 50Checked; an unrecognised value fails the saveEnglish, Spanish, Haitian Creole
Enrolment dateRequired, fixed at creationRequired on create onlyautoautoautoAlways today's date; the edit sheet shows it and does not send it
Active flagYes or noNo ruleNo writer after creation. Always "yes" on every row
AllergiesA short listNoneMust be a specifically formatted list. See The list fields
Medical AlertsA short listNoneSame
MedicationsA short listNoneSame
Hobbies, Other ProgramsA short listNoneSame
Primary phone20NoneCollected by the wizard and never sent
Email256None, no format checkCollected by the wizard and never sent
Home address500None
City100None
State50NoneThe wizard offers 51 two-letter codes; the field accepts anything
Postal code20None
County100NoneCollected by the wizard and never sent
Home phone20None
School name200None
School district200None
Referral sourceA named choice, 50Dropped without a message when unrecognisedSee Referral source
Previous member, previous member yearsYes/no, a numberNone; the years figure has no range ruleThe wizard caps it at 0 to 20 on screen only
Can swimYes or noNoneSet to "no" on a scan when unreadable
Physician name200None
Physician phone20None
Preferred hospital200None
Hospital phone20None
Insurance company200None
Insurance policy number100NoneStored in plain, readable text
Pickup password100NoneStored in plain, readable text; returned whenever the record is read
Linked user accountA linkNo ruleNo writer in this module
Length limits stop at the two names

First name and last name are the only fields on a child's record with a length rule actually enforced. Every other field has a limit and no rule checking it, so an over-length address, school name, physician name, insurance number or pickup password fails with a plain server error, not a helpful message naming the field.

Email has no format rule either, on the child or on the guardian.

The list fields

Allergies, Medical Alerts, Medications, Hobbies and Other Programs each hold a short list, and PTRS stores whatever is sent, checked by nothing.

The edit sheet is explicit about the shape it expects, showing examples like a bracketed, quoted list of items, and what a person types is sent exactly as typed. Typing a plain sentence instead of that shape produces a server error.

The registration wizard is not consistent about it. It sends the medical conditions and current medications boxes, both ordinary paragraphs of text, into the same two fields that expect the structured list shape. Any child with a recorded medical condition or medication therefore fails at the very first step of the wizard's save sequence with a database error.

Only the allergies field is safe from the wizard, because it alone is built into the correct shape before sending.

The child's own record parses these fields back defensively: anything that is not a proper list renders as an empty list rather than breaking the page.

Age and grade

PTRS enforces no age eligibility anywhere. There is no minimum, no maximum, no future-date check and no relationship between age and grade, not on save, not on the record, not on any of the four input surfaces.

The only age arithmetic in the module is:

WhereWhat it does
Directory filterFour fixed bands, 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
Registration wizardShows the calculated age, and shows a COPPA notice when the child is under 13 and an email address has been entered
Consents stepShows the same COPPA notice under 13

The four bands and the age of 13 are fixed values written into the screens. The code cites no regulation for any of them. The COPPA notice names COPPA in its text and gives no section reference.

The age-range arithmetic itself is correct and uses the right boundary on both ends.

Grade is free text with three vocabularies, matched exactly in the filter:

ScreenValues
Registration wizardPre-K, K, 1st, 2nd, up to 12th
Directory filterPre-K, K, 1st, 2nd, up to 12th
Quick Member EntryK, 1, 2, up to 12; no Pre-K
Edit sheetFree text, placeholder "e.g., 5"

A child added through Quick Member Entry in third grade is stored as a bare "3", and the directory's Grade filter, which looks for "3rd", will never find them.

Referral source

PTRS recognises eleven referral sources: Newspaper, School, Radio, Mailer, Flyer or Poster, Friend or Family, Staff or Club Member, Club Event, Website, Social Media, Other.

The registration wizard offers seven, and only three of them are spelled in a way PTRS accepts:

OfferedAccepted
School, Website, OtherYes
Friend/Family, Community Event, Social Media, Walk-inNo

An unrecognised value is dropped without a message; PTRS only assigns the field when the match succeeds, and returns no error either way. Four of the seven choices therefore leave the field blank with no indication.

Editing the field afterward behaves the same way.

Guardian

A guardian record belongs to the organisation, not to one child, and is joined to a child through a link record.

FieldLimitRuleAdd GuardianEdit guardian
First name100, requiredEnforced on edit only
Last name100, requiredEnforced on edit only
Email256, requiredNo rule on either
Phone20, requiredRequired, enforced on edit only
Relationship100Required, enforced when linking
Preferred contact methodA named choice, 50Not applicable
Language preferenceA named choice, 50Not applicable
Work phone20None
Work phone extension10None
Employer200None
Occupation200None
Military statusA named choice, 50Dropped without a message when unrecognised
Military branch100None
Military installation200Not applicableNo writer
Lives on baseYes or noNone
Military start date, end dateA dateDropped without a message when unrecognised
Home address, city, state, postal code500/100/50/20None
Maiden name100None
Cell phone20Not applicableNo writer
Lives with member, is emergency contact, can receive communicationYes or noNot applicableNo writer except Quick Scan
Sign-in account link, linked user account, notification preferencesVariousNot applicableNo writer in this module
Everything in the "Edit guardian" column is unreachable

Editing a guardian is built to accept eighteen fields, and no screen ever calls it. So the eighteen fields it accepts can be read back on the guardian's own record and can never be set.

Add Guardian collects five fields and has no check on it at all. Since email and phone are required fields and the request sends them as plain values with no rule, a blank value for either produces a plain server error rather than a field-level message.

Two guardians can share the same email address; nothing stops it, and the one action that would link an existing guardian to a second child is reachable from no screen, so a family with three children ends up with three guardian records.

FieldWhat it isSet by
Relationship100, requiredAdd Guardian; set to "Parent/Guardian" on a scan when the form gave none
Primary flagYes or noAdd Guardian; always "yes" on a scan
Authorised for pickupYes or no, defaults to yesAdd Guardian; always "yes" on a scan

Each child-guardian pair can exist only once, and linking checks for a duplicate and refuses it before it can happen. Neither the uniqueness rule nor the duplicate check can actually fire in practice, because the only reachable path creates a fresh guardian every time rather than reusing one.

Emergency contact

FieldLimitRuleOn the form
First name100, requiredRequired
Last name100, requiredRequired
Phone20, requiredRequired; no length rule, so over 20 characters fails with a plain server error
Phone extension10None; over 10 fails with a plain server error
Relationship100None
PriorityA number, defaults to 1Must be 1 or more when adding; no rule on edit
Second phone20Not applicableNo writer
Primary phone type, secondary phone typeA named choice, 20Not applicableNo writer
Authorised for pickupYes or noNot applicableNo writer except Quick Scan

The list is ordered by priority, and shows an "Authorised for pickup" marker for a flag no input on the form can actually set.

Authorised pickup and restricted person

FieldLimitRuleOn the form
Authorised pickup
First name, last name100, requiredRequired
Phone20None; over 20 fails with a plain server error
Relationship100None
Active flagYes or noSet to yes on add, no on removeauto
Authorised dateA dateSet to today on addauto
Revoked dateA dateSet on remove, and then hidden along with the recordauto
Photo ID on file, photo, court order on file, authorising guardian, notesVariousNot applicableNo writer anywhere
Restricted person
First name, last name100, requiredRequired
Reason2000None; over 2000 fails with a plain server error

An authorised pickup's own description in the code says it supports DELACARE release-of-child rules and tracks a photo ID, a court order and the authorising guardian. None of those three can actually be recorded.

PTRS recognises 21 consent types, in the four groups the registration wizard uses:

GroupTypes
GeneralMembership, Photo Release, Field Trip, Technology Use, Data Collection, Background Check, Open Door Policy, School Data Release
MedicalMedical Treatment, Emergency Hospitalization, Emergency Transportation, Caregiver Support Meeting
MedicationMedication Admin Request, Medication Consent Caregiver, Medication Consent Physician, Non-Prescription Med Authorization, EpiPen/Inhaler Authorization, Non-Intravenous Injection Authorization, Injection Liability Waiver
Health-adjacentSunscreen Application, Insect Repellent Application

The wizard's own list offers 19 of the 21, leaving out Membership and School Data Release.

FieldLimitRule
Child, organisation, consent type, signing guardianRequiredAll required; consent type checked, an unrecognised value fails the save
Signature10,000 charactersNo rule; a captured signature image longer than that fails with a plain server error
Expiry dateA dateChecked; an unrecognised value fails the save
Consent granted flagYes or noAlways "yes" on create
Revoked date, revoked byA date, a linkSet by the revoke action
Medication consent typeA named choice, 50Checked; an unrecognised value fails the save
Physician name, phone, signature, signed date200/20/10,000/dateAccepted by PTRS and not sent by the screen; the request only carries five of the ten fields
Document version, submitting address, witness name, member's own signatureVariousNo writer anywhere

Whether a consent is currently active is worked out on the spot each time, not stored: it is active when it has not been revoked, and either has no expiry or the expiry has not passed.

The link to the signing guardian is a real, enforced link, which is why the registration wizard's made-up guardian identifier cannot work here.

Document

FieldLimitRule
Document typeA named choice, requiredRequired; checked against 24 choices, an unrecognised value fails the save
Document name200, requiredRequired; the on-screen check allows 250, so a name of 201 to 250 characters passes on screen and fails with a plain server error once it reaches PTRS
File location2000Set by PTRS; blank when no file was attached
Upload dateA dateSet to today
Expiry dateA dateChecked; dropped without a message when unrecognised
Verified flagYes or noSet to yes by verify; never set back
Verified by256Required, up to 200 characters; free text sent by the screen, not the account that is actually signed in. The Documents section sends the fixed word "current-user" on every verification
Verified dateA dateSet to today by verify
StatusA named choiceChecked by the status action, which nothing calls
Required flagYes or noFrom the upload form
Notes2000Up to 2000 characters

Upload limits: 25 MB; PDF, JPG, JPEG, PNG, GIF, DOC, DOCX. The file itself is optional.

Required documents

Three lists exist and no two of them agree.

SourceCountTypes
The Documents section's checklist, the one a person actually sees, noted "per DELACARE compliance"9Birth certificate, immunisation record, physical exam, enrolment application, emergency contact form, emergency medical authorisation, medical release, photo release, insurance card
The registration wizard5The first three, plus school enrolment verification and emergency medical authorisation
PTRS's own missing-documents check3Birth certificate, immunisation record, physical exam

All three are fixed lists written into the code. None cites a regulation. The Documents section's is the only one that names a rule at all, in a note reading "required per DELACARE compliance", with no regulation number, no section and no date.

Verify the list your licensing authority requires against your own current source. The checklist on screen is not a compliance statement.

Two further limits on PTRS's own check: it ignores whether a document is actually marked required for that child, and it does not look at the expiry date, so an immunisation record that expired last year still counts as present. Nothing on any screen calls that check anyway, so the Documents section works out its own checklist in the browser instead.

Three of the type names the interface offers are not names PTRS recognises, and PTRS refuses to save them:

Offered onValuePTRS recognises instead
Documents section, 20 optionsIEP DocumentIEP Plan
Registration wizard, required listSchool Enrollment VerificationNothing similar
Registration wizard, optional listMedical Form, IEP/504 PlanIEP Plan and Section 504 Plan, kept separately

Enrolment prerequisites

Adding an enrolment is the module's one enforced safety gate. All five figures below are fixed values written into that one check.

#RuleFigureReadsMessage
1Minimum emergency contacts2Her emergency contacts"has N emergency contact(s); minimum 2 required"
2An active Emergency Hospitalization consent, granted, not revoked, not expiredNot applicableHer consents"does not have an active signed Emergency Medical Authorization consent"
3Immunisations marked exactly up to dateNot applicableHer structured medical record"does not have immunizations marked as up to date"
4Physical exam within1 yearHer structured medical record's last physical date"physical exam is expired or missing"
5Every emergency-type medication on site cleared to administerNot applicableMedications on site"has emergency medication that is not ready for administration"

The code cites no regulation for the 2 or the 1 year. No federal reference, no DELACARE citation, no note explaining either figure. Verify both against your own current source.

A sixth rule is a warning only. If her medical conditions text contains any of six words, asthma, diabetes, seizure, allergy, anaphylaxis, epilepsy, in any case, and she has no active emergency action plan, the save still succeeds and PTRS quietly logs a warning to the audit trail. Nothing reads that warning and no screen shows it, so it reaches nobody.

The gate reads a record most creation paths never write

Checks 3 and 4 read her separate, structured medical record. Quick Scan and Quick Member Entry never create that record; Quick Scan writes the physician, hospital and insurance values onto her main record instead. So a scanned or quick-added child fails check 3 until somebody opens the Health tab and sets Immunizations Up to Date and a physical date.

A waiver setting exists that would skip all five checks and log who used it. No screen sets it, and PTRS applies no extra role check on it beyond the module's usual setting, which admits staff members.

The structured medical record

A child's structured medical record is a second, separate record, at most one per child. Six of its fields duplicate fields on her main record, and nothing reconciles the two.

FieldLimitOn PTRS's readOn PTRS's saveOn the screenEffect
Allergies2000The screen omits it from both its own types, so it can never be set or shown from the interface
Medical conditions2000Works
Current medications2000Works
Medication administered at clubYes or noWorks
Medication instructions2000Works
Dietary restrictions2000Works
Dietary restriction typeA named choice, 50Always blank; the screen sends it and PTRS drops it
Special medical needs, in a person's own words4000Same
Behavioural health notes4000Same
Physician name, phone200/20Duplicates the main record
Preferred hospital, hospital phone200/20Duplicates the main record
Insurance provider, policy number, group number200/100/100The first two duplicate the main record
Can swimYes or noDuplicates the main record
Physical limitations2000Works
Last physical dateA dateRead by enrolment check 4
Immunisations up to dateYes/no/blankRead by enrolment check 3
Blood type10Free text, no fixed vocabulary

Saving this record only actually requires the child's id. None of the eighteen fields has a length rule, so any of the six 2000-character fields overflows into a plain server error.

Four fields are marked for removal in the code in favour of newer, structured records: a structured allergy list, a structured chronic condition list, a structured current-medication list, a structured physical-limitation list. None of those four has a writer anywhere in the solution, and both actions that touch this record silence the warning that would normally flag using a field marked for removal.

Three parallel allergy models

ModelWritten byRead by
A short list on the main recordQuick Member Entry, the wizard, the edit sheet, Quick ScanThe member detail banner and the printed badge
Free text on the structured medical record, marked for removalNothing; the screen omits the fieldThe Health tab
The structured allergy recordNothing anywhere in the solutionCACFP's allergy alerts, CACFP's meals-with-alerts list, CACFP's allergen cross-reference, Health and Safety's enrolment readiness check

The three do not see each other. An allergy typed into the interface is visible on the child's own record and to nothing else in the product.

Demographics, financial and enrolment history

Each has at most one record per child.

Her demographics record can hold household setting, family setting, sibling counts, household size, income range and government assistance programmes. A details field, a primary language field and a previous club name field exist on the record and have no writer. The three named- choice fields are dropped without a message when unrecognised. Saving this record only actually requires the child's id and the organisation, and nothing calls the action anyway.

Her financial record can hold annual household income, free/reduced lunch, receives childcare subsidy, subsidy case number, government assistance programmes, billing type and monthly fee; last payment date, balance due and the confidential flag are returned and have no writer. The only rule PTRS checks beyond the child's id is that the fee is zero or more. Both actions are narrowed; see Member financial information.

Her enrolment history can hold enrolment type, enrolment date, effective start date, expiry date, membership fee, fee-waived flag and reason, payment method, application received date, ID card issued date, orientation completed flag and date, and processed-by, all coming from the request; a data-entry date is stamped as today automatically. The processed-by field is free text, not the signed-in account's actual identity. Termination date and reason are set only by the terminate action, and there is no un-terminate.

What the audit trail records, and what it leaves out

Every save in the module logs to the audit trail, which records a snapshot of the record before and after.

A field marked for exclusion is left out of that snapshot entirely; it is not hidden, it is absent. The reasoning behind the exclusion, documented in the code, is that it protects sensitive fields such as tokens, personal detail and medical data that should not appear in an audit entry.

On the child's main record, twelve fields carry that exclusion:

Excluded from the audit snapshot
Allergies, medical alerts, medications
Physician name, phone, preferred hospital, hospital phone
Insurance company, insurance policy number
Pickup password
Primary phone, email, home address, city, state, postal code, home phone

The guardian record excludes email, phone, work phone and extension, address, maiden name and cell phone. A consent excludes all three signature fields and the submitting address. The structured medical record excludes almost everything it holds.

The audit row still records that the child's record was updated, by whom and when. It does not record what changed in any of those fields.

What this costs a reviewer

A state reviewer asking "who changed this child's allergy list, and when?" gets an entry saying the record was updated, with the changed fields absent from both the old and the new values.

Combined with the child's own audit history only showing changes to her main record, so guardian, contact, consent, document and note changes do not appear at all, the Audit panel inside the edit sheet shows changes to her name, school, grade, status and swimming ability, and nothing else.

This is a deliberate privacy trade-off in the code, not a defect. It is recorded here because the product's audit trail is presented as tamper- evident and complete, and on this module it is tamper-evident and partial.

Where to go next

Checked against PTRS on 7 September 2026.