Each of these is called by a registered API handler, module-dark behind a per-tenant flag. One honest bound on the whole section: reachable is a source-level claim. It means a handler calls the function. It does not mean every branch has been exercised against a live district’s data, and where a surface’s final access wall is not yet fully wired, the card says so.
Plan authoring & lifecycle
IEP and 504 plan authoring — Draft, Review, Final, Amending, Archived, and Final is edit-locked
A plan moves through a five-state machine and only the moves the regulation actually allows are legal: draft to review, review to final, final can open an amendment or archive, amending closes back to final. Every other move is rejected outright, not merely discouraged. Once a plan is Final its content is edit-locked; a real change happens through the amendment path, never a silent overwrite. Section 504 is not a stripped-down cousin of the IEP — it is a first-class sibling plan type sharing the same state machine, with its own finalize gate (an IEP needs the 34 CFR 300.320 schema complete; a 504 needs its own accommodation set). The fields a team decides — eligibility, placement, least-restrictive-environment — are carried through every update verbatim. The system never computes or overwrites a team’s own determination.
Measurable annual goals
Structured goals, not a text box — and the system never marks one met
A goal is authored with a controlled goal area — academic, behavioral, communication, social-emotional, functional, motor, adaptive, transition, the 34 CFR 300.320(a)(2) vocabulary — a statement, and an optional baseline. It starts in draft. The type this compiles to structurally cannot represent the system setting a goal to met or not_met: that verdict is a stored team act, never derived. This writer shipped ready with its migration and then sat unwritten for a full release — the table existed, the pure function existed, and nothing called it. It is now wired to a route and persisted for real.
IEP team roster
The team roster, with a case-manager singleton the write itself enforces
A team member is added with a closed role — case manager, sped teacher, general teacher, school admin, parent/guardian, related-service provider, student, district rep, other, the 34 CFR 300.321(a) roster vocabulary — and the write enforces exactly one active case manager per plan inside a single transaction, so a race can never leave a plan with two or with zero. Rolling a member off is soft: the row is marked inactive, never deleted, because the row is itself part of the IDEA-required roster record. This is a second dead-to-live writer — the table shipped with its migration and had no writer at all until this.
Goal progress monitoring
A trend for a human to read, from a type that cannot say “mastered”
Every progress data point — an observation, a probe, a work sample, a formal assessment, a rubric score, a frequency count — is recorded against a goal with a method and a date. From a run of points the system computes a direction: improving, regressing, flat, or insufficient data. “Mastered” is not a value that return type can hold, which is a structural fact rather than a policy someone has to remember to enforce — the function that reads the points cannot return a mastery verdict because that word is absent from its type. Mastery stays exactly where IDEA puts it: a team decision, recorded by the team, on the goal itself.
Service-minute delivery log
Delivered vs. mandated minutes — and zero delivered is never read as clean
Speech-language, occupational therapy, physical therapy, counseling, psychological services, social work, specialized instruction, behavioral support, assistive technology, orientation and mobility, or another related service is logged with a date, minutes delivered, and minutes mandated. The read this produces is a discriminated union on purpose: a caller can only reach a compliant/non-compliant verdict after first narrowing on whether a real mandate basis existed at all. A child who received zero minutes of a mandated service produces zero log rows, and zero rows is exactly the state the union refuses to grade as clean. Absence of data is never evidence of compliance.
The IDEA deadline clock
A compliance clock re-derived from an event ledger, not a date someone typed into a field
The federal defaults are the floor: sixty calendar days from consent to complete an initial evaluation, thirty days from an eligibility determination to a finalized IEP, an annual review at most 365 days out, a triennial reevaluation at most three years out. Many states override that floor materially — DC uses 120 days; several states count in school days rather than calendar days; California excludes any vacation of five or more days from the count. The engine encodes that variance as a state-rule table rather than as branching code, and resolves the rule for the student’s SEA. A deadline is a re-derived projection of an append-only event ledger — consent received, eligibility determined, IEP finalized — so it can never go stale the way a hand-maintained spreadsheet date can, and every deadline carries the provenance of the exact ledger event it was computed from.
Meeting notice & team completeness
Parent notice early enough to attend, and a checklist for who has to be in the room
The deadline clock answers by when an obligation must be met. This answers the two things that actually satisfy it: the parent notice that has to precede the meeting (34 CFR 300.322), and the required team membership that has to attend it (34 CFR 300.321). It consumes the deadline engine’s output as a type — it does not recompute the clock — and proposes a scheduling window, then separately reports which required roles are missing from a proposed roster. It never rules on an excusal; a 300.321(e) excusal needs the parent’s and the LEA’s written agreement, a human decision this module does not make. IDEA fixes no notice-day count, so the roughly-ten-day default returns marked, in the value itself, as provisional district practice, not a confirmed legal number.
The subject-PII consent chokepoint
One gate for every emission of a name, a disability category, or a PLAAFP narrative
A student’s name, disability category, and present-levels narrative are the most sensitive fields this product touches, and there is exactly one place in the codebase allowed to decide whether they leave a pure data shape and become a rendered field: this gate. It reads the same canonical consent chokepoint every other consent-gated surface reads — there is no second, copy-pasted rule that could quietly diverge. A student with no resolvable consent record is treated as suppressed, the fail-closed default the chokepoint itself returns. And it holds one distinction on purpose: the platform-wide do-not-publish kill switch is inherited and denies everything, correctly — but an ordinary photo opt-out, or a lapsed school-photo grant, is a decision about pictures, not about a disability record, and this gate is written to never be driven by it.
Section 504 accommodation authoring
Four accommodation buckets, and a review cadence marked honestly provisional
A 504 plan’s accommodations sort into the four buckets the category actually uses — presentation, response, setting, timing and scheduling — rather than one flat list nothing can group or validate. On top sits a periodic review scheduler mirroring the same default-deny posture as the deadline engine: the commonly cited annual-review and three-year-reevaluation cadence is district and SEA policy, not one hard federal day count, so every date this produces is marked provisional pending a signer, never presented as a confirmed deadline. It composes the existing plan finalize gate rather than re-implementing it — one lifecycle rule, shared by both plan types.
Prior Written Notice
The 300.503 notice, assembled — with the legal boilerplate left honestly blank
Before an LEA proposes or refuses to change a child’s identification, evaluation, placement, or FAPE, IDEA requires written notice within a reasonable time (34 CFR 300.503). The composer assembles the notice from the plan’s own authored facts and refuses to produce a document at all when a required element is missing — it returns no document, never a document with a hole in it. One element it will never write for you: the statement of procedural-safeguards protections and how to obtain a copy, which is state and counsel-mandated legal language. That field ships as an explicit, named honest-off marker rather than invented text, because a fabricated paragraph of legal boilerplate is worse than an obviously blank one.
Medicaid billing consent constraint
A claim line that is physically un-writable without a real, current parental consent
IDEA requires a one-time written parental consent, plus an annual notice, before a district bills Medicaid for an IEP-listed related service (34 CFR 300.154). This is enforced twice, on purpose. The database itself will not accept a claim-line row without a linked, active consent record — the backstop the application cannot bypass. And before the app ever attempts that write, a pure check walks the whole chain — consent present, active, not revoked, not expired, the service IEP-listed, the provider credentialed, the encounter documented — and returns which link failed, so the route can give a clean, explained refusal instead of a raw constraint error. A parent may revoke consent at any time, and a revocation stops billing immediately, at both layers.
Manifestation determination
Discipline meets disability — flagged, never decided, by the system
When a disciplinary removal crosses the change-of-placement threshold — more than ten cumulative school days, or a pattern (34 CFR 300.530) — a manifestation determination review is required within ten school days. This surface detects that condition from the discipline record and confirms, against the student’s actual plan, that an MDR applies, then only flags it. The team’s own determination — was the behavior a manifestation of the disability, or the result of a failure to implement the IEP — is recorded verbatim, gated to an administrator, and marked needs-counsel in its own return value. It is wired directly into the discipline-incident routes, with its own read and record endpoints.