Research & Evidence Base
This guide was written from the live School module source, not from
imagination. Every page, route, permission, status word, setting and workflow in this
documentation is traceable to a file under modules/School/. This page maps
the evidence to what it establishes, so you can verify any claim yourself and keep the
guide honest as the module changes.
0.2.0, slug school, category
Academics. It ships 42 school_* tables created per tenant and
tracked in migrations_school, depends on the Learn module
(courses) only for the optional LMS bridge, and reuses the rest of ERPat
(customer accounts for portals, Helpdesk for tickets, core Announcements/Messages/Events
for communication).
What lives in the module
Alongside these, the module carries the standard ERPat module sidecars — a manifest
(module.json), six config/ files, a language/ pack,
helpers/, seeders/, views/, tests/,
and its own README.md / CHANGELOG.md.
Manifest & configuration
The manifest and config/ sidecars establish the module's identity, its menu,
the routes, the RBAC surface, and the audit vocabulary.
| File | What it establishes |
|---|---|
module.json | Identity — slug school, enable setting module_school, version 0.2.0, category Academics, the graduation-cap icon, the 42-table database footprint, the dependency on courses (Learn), and the declared permission list. |
config/module_config.php | Registration in Settings → Manage Modules — the module_key (school), display name, icon, and category. |
config/permissions.php | The complete RBAC surface — the base school, the 14 per-page enablers, the CRUD children, and the segregation-of-duties / restricted permits (school_grade_release, school_grade_approve, school_health, school_child_protection, school_export). Proves the whole permission list and the SoD split. |
config/menu.php | The single School sidebar group and its 14 permission-gated children, including the extra gates — module_courses on LMS Bridge and school_visitor_pass_enabled on Visitor Pass. |
config/default_menu.php | The module's slice of the aggregated default left menu (the Left Menu Customization editor's default / "Restore to default"). |
config/routes.php | Every route on the module's surface — the 14 staff pages, school/report_cards, school/safeguarding, and the portal routes school/parent, school/student, and the school/portal dispatcher. |
config/system_logs.php | The audited-action catalog — approve_enrollment, reject_enrollment, verify_guardian, view_health, release_grades, view_safeguarding, scan_visitor, export, update_settings — and each action's severity. |
Controllers
The 21 controllers under controllers/ are the source of truth for what each
screen does — its fields, the gating permissions, the status transitions, and the exact
workflow steps documented in the operate pages.
| Controller | What it establishes |
|---|---|
School.php | The Dashboard — permission-filtered quick-link cards to the pages a user can reach. |
School_base.php | The shared base controller other School controllers extend (module gate + common setup). |
School_enrollment.php | The admissions lifecycle — application create/submit, the auto-copied requirements checklist, the mandatory-requirements approval gate, roster materialisation, and the approve_enrollment / reject_enrollment audits. Backs Enrollment. |
School_learners.php | The learner master — list/filters, the add/edit field set (required first/last name, inline LRN), statuses, the profile modal, and student-portal provisioning. Backs Learners & Guardians. |
School_guardians.php | The guardian directory and the learner↔guardian link — link fields, the unverified-on-create rule, the verify_guardian gate, unlink, and parent-portal provisioning. |
School_personnel.php | Marking staff users as school personnel — position, DepEd employee no., adviser-eligible flag; a staff user registers only once. |
School_academics.php | The academic-structure tabs — School Years (and is_current), Terms, Sections (adviser/room/capacity/strand), Subjects, Rooms, and the read-only Reference tab. Backs Academic Structure. |
School_attendance.php | The section register — pick section/date/session, mark present/absent/late/excused with reasons and time-in, bulk-save, and the records browser. Backs Learner Attendance. |
School_grades.php | The class record (section+subject+term), WW/PT/QA encoding, the draft-only edit lock, and the ordered release governance (submit_class → approve_class → release_class) with the release_grades audit. Backs Grading Engine. |
School_report_cards.php | SF9-style generation from released grades — per-subject finals, general average, Promoted/Retained remark, snapshot freeze. Backs Report Cards. |
School_communication.php | The launcher into core Announcements / Messages / Events, each tile gated by its own module setting. |
School_support.php | Support cases — case type, severity, assignment, the SC-yymmdd-XXXX number, progress notes, and the open→investigating→resolved/referred/closed flow, plus the guarded link to Safeguarding. |
School_safeguarding.php | The confidential child-protection / anti-bullying surface — segregated from Support, restricted notes, and the view_safeguarding audit on every read. Backs Data Privacy & Safeguarding. |
School_visitors.php | Visitor passes — issue, the generated pass code, check-in (scan_visitor), check-out, revoke, and the issued/active/used/expired/revoked statuses. Backs the Gate playbook. |
School_facilities.php | The room summary and the fail-safe reuse of Helpdesk for facility/maintenance tickets. |
School_reports.php | The summary counts, the LIS/EBEIS validation run, and the SF1-style masterlist export (export audit, internal-only). Backs Reports & Compliance. |
School_settings.php | The School Settings page — portal toggles, visitor-pass toggle, default grading policy; saving audited as update_settings. |
School_lms.php | The LMS Bridge — link a section to a Learn course, push the roster, the fail-safe notice when Learn is off, and the enrolled/skipped sync result. |
School_parent_portal.php | The parent portal — verified-children-only, released-grades-only visibility, attendance summary, active enrollment, and the IDOR-proof child resolution from the session user. |
School_student_portal.php | The student portal — learner resolved from school_learners.user_id, own released grades / attendance / enrollment, and the "no record" page for unlinked accounts. |
School_portal.php | The portal dispatcher behind school/portal that routes to the parent/student surfaces. |
Libraries — the engines
Three libraries under libraries/ carry the module's specialised logic and are
the authority for the grading, compliance, and integration claims in this guide.
| Library | What it establishes |
|---|---|
School_grade_engine.php | The pure, config-driven grade computation — DepEd Order 8 s.2015 (per-subject-group WW/PT/QA weights + transmutation table) and MATATAG DO10 s.2024 (uniform 25/50/25, floor-60 linear), whole-number final grades floored at 60 / capped at 100, and the descriptors. Proves that weights are data, not code. |
School_lis_validator.php | The LIS/EBEIS learner-data check — missing/malformed LRNs, incomplete demographics, duplicate LRNs. Proves the validator is output-only: it never submits to or replaces DepEd LIS/EBEIS. |
School_lms_bridge.php | The section↔course link and roster push, and the fail-safe behaviour when the Learn module is disabled — School grading and portals are unaffected. |
Models
The 34 models under models/ define the tables and the queries behind every
screen. They confirm table names, the soft-delete convention, and the relationships (for
example, that the learner↔guardian link and its verified flag are their own
record). Grouped by domain:
| Domain | Models |
|---|---|
| Academic structure | School_campuses_model, School_years_model, School_terms_model, School_sections_model, School_subjects_model, School_subject_groups_model, School_rooms_model, School_grade_levels_model, School_tracks_model, School_strands_model |
| Learners & guardians | School_learners_model, School_learner_identifiers_model, School_learner_documents_model, School_learner_status_history_model, School_guardians_model, School_learner_guardians_model, School_personnel_model |
| Enrollment | School_enrollment_applications_model, School_enrollment_requirements_model, School_document_requirements_model, School_enrollment_decisions_model, School_learner_enrollments_model |
| Attendance | School_attendance_records_model, School_attendance_reasons_model |
| Grades & report cards | School_grade_schemes_model, School_grade_components_model, School_quarterly_grades_model, School_grade_approvals_model, School_report_cards_model |
| LMS bridge | School_lms_links_model |
| Support & visitors | School_support_cases_model, School_case_notes_model, School_visitor_passes_model, School_visitor_logs_model |
Migrations
Seven timestamped migrations under migrations/ build the 42 school_*
tables. They run per tenant (tracked in migrations_school) via
php erpat migrate:modules, which is why the tables must be created and
validated on every tenant DB before the module is used there.
| Migration | Establishes |
|---|---|
…_create_school_foundation_tables.php | Campuses, school years/terms, sections, subjects/subject groups, rooms, and the seeded grade-level / track / strand reference data. |
…_create_school_people_tables.php | Learners, learner identifiers (LRN), guardians, the learner↔guardian link, and personnel. |
…_create_school_enrollment_tables.php | Applications, the document-requirement catalog and per-application checklist, decisions, and the materialised roster enrollments. |
…_create_school_attendance_tables.php | The attendance records and the attendance-reasons list. |
…_create_school_grades_tables.php | Grade schemes, grade components, quarterly grades, the grade-approvals history, and report cards. |
…_create_school_lms_tables.php | The section↔Learn-course link records for the LMS bridge. |
…_create_school_support_visitor_tables.php | Support/safeguarding cases and case notes, and visitor passes and their gate logs. |
Module metadata & statutory basis
Two more sources round out the evidence: the module's own metadata and the Philippine statutes and DepEd systems the design implements.
The module's own description and version history (rendered in Manage Modules). They confirm the 0.2.0 scope and the honesty caveats — the SF exports and LIS validator are internal aids, and the LMS bridge / facility tickets are fail-safe.
RA 10533 (K to 12), DepEd Order 8 s.2015 and MATATAG DepEd Order 010 s.2024 (grading), RA 10173 (Data Privacy Act), RA 7610 & RA 10627 (child protection & anti-bullying). Forms/systems: LRN, SF1, SF9, LIS, EBEIS.
Keeping this guide honest
Verify against the file, not memory
Any claim here should be checkable in the file named in these tables. If a screen behaves differently from the guide, the controller/library is right and the guide is stale.
Bump the version when you edit a page
Following the ERPat user-guide authoring discipline, changing a page's content means bumping its version and refreshing its "last reviewed" date so the docs portal tracks the change.
Don't invent
Every feature, permission, status, route and setting in this guide is drawn from the live module. If a needed detail isn't in the source, describe less rather than guess.