# Personal Education Management System

# As Built



# Assessment to Enrollment Update

#### Find the values that need to update the enrollment record

> SELECT
> 
> assessment\_results.students\_id,
> 
> [assessment\_codes.id](http://assessment_codes.id),
> 
> <span style="color: rgb(224, 62, 45);">\# grouping by subject ID, so these find the average for all assessment codes with same subject</span>
> 
> <span style="background-color: rgb(251, 238, 184);"> avg(level\_equivalent) as Final\_LevelEq\_enrollment , </span>
> 
> <span style="background-color: rgb(251, 238, 184);"> avg(dapdtterm) as APRate\_enrollment, </span>
> 
> <span style="background-color: rgb(251, 238, 184);"> avg(dapterm) as DAPDT\_enrollment, </span>
> 
> [subjects.name](http://subjects.name),
> 
> [subjects.name](http://subjects.name), <span style="color: rgb(224, 62, 45);"> // why twice?</span>
> 
> [student\_terms.name](http://student_terms.name),
> 
> assessment\_codes.subjects\_id
> 
> FROM assessment\_results
> 
> left join assessment\_codes on assessment\_results.assement\_codes\_id=[assessment\_codes.id](http://assessment_codes.id)
> 
> left join subjects on assessment\_codes.subjects\_id=[subjects.id](http://subjects.id)
> 
> left join student\_terms on [student\_terms.id](http://student_terms.id)=assessment\_results.student\_term\_id
> 
> <span style="color: rgb(224, 62, 45);">\# '$s..' Injects Assessment code ID, student ID and Term ID (variables passed to this subroutine)</span>
> 
> <span style="color: rgb(224, 62, 45);">\# finds the set of assessment results for a given student, given term, and at final stage of the term.</span>
> 
>  where assessment\_results.students\_id=" . $sID . "
> 
>  and assessment\_results.student\_term\_id=" . $sTermId . "
> 
> and assessment\_results.stage=266 <span style="color: rgb(224, 62, 45);">// term final assessments (stage=266)</span>
> 
> <span style="color: rgb(224, 62, 45);">\# find the set of final assessment results with matching subjects, as defined in the assessment code.</span>
> 
> and [subjects.id](http://subjects.id)=(
> 
>  Select subjects\_id <span style="color: rgb(224, 62, 45);">//filtering results where the id of the subject matches the result of the subquery</span>
> 
>  from assessment\_codes <span style="color: rgb(224, 62, 45);"> //looks up the subjects\_id from the assessment\_codes table</span>
> 
>  where id=" . $sCodeId . " and exclude\_results!=1 <span style="color: rgb(224, 62, 45);">// sub</span>
> 
>  limit 1
> 
> )
> 
> group by assessment\_codes.subjects\_id, assessment\_results.student\_term\_id;

<div drawio-diagram="184"><img src="https://bsa.lynops.com/uploads/images/drawio/2025-06/drawing-5-1749324981.png" alt=""/></div>

#### Assessment Result Sample Data

<table border="1" id="bkmrk-raw-score-student-te" style="border-collapse: collapse; width: 100%; height: 229.172px;"><colgroup><col style="width: 8.28183%;"></col><col style="width: 10.3832%;"></col><col style="width: 14.3387%;"></col><col style="width: 8.89988%;"></col><col style="width: 16.1928%;"></col><col style="width: 15.204%;"></col><col style="width: 13.601%;"></col><col style="width: 13.2222%;"></col></colgroup><tbody><tr style="height: 80.1875px;"><td style="height: 80.1875px;">**Raw Score**</td><td style="height: 80.1875px;">**Student**</td><td style="height: 80.1875px;">**Terms**</td><td style="height: 80.1875px;">**Stage**</td><td style="height: 80.1875px;">**Assessment Code**</td><td style="height: 80.1875px;">**Assessmentcode.Subject**</td><td style="height: 80.1875px;">**Assessmentcode.Exclude**</td><td style="height: 80.1875px;">**Improvement**</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">540</td><td style="height: 29.7969px;">183</td><td style="height: 29.7969px;">Spring 2025 183</td><td style="height: 29.7969px;">final</td><td style="height: 29.7969px;">IXL.OP</td><td style="height: 29.7969px;">Math</td><td style="height: 29.7969px;">YES</td><td style="height: 29.7969px;">*calculated relative to other assessment records*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">620</td><td style="height: 29.7969px;">183</td><td style="height: 29.7969px;">Spring 2025 183</td><td style="height: 29.7969px;">final</td><td style="height: 29.7969px;">IXL.MAT</td><td style="height: 29.7969px;">Math</td><td style="height: 29.7969px;">YES</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">530</td><td style="height: 29.7969px;">183</td><td style="height: 29.7969px;">Spring 2025 183</td><td style="height: 29.7969px;">final</td><td style="height: 29.7969px;">IXL.GRAM</td><td style="height: 29.7969px;">English</td><td style="height: 29.7969px;">YES</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">490</td><td style="height: 29.7969px;">183</td><td style="height: 29.7969px;">Spring 2025 183</td><td style="height: 29.7969px;">final</td><td style="height: 29.7969px;">IXL.VOCAB</td><td style="height: 29.7969px;">English</td><td style="height: 29.7969px;">NO</td><td style="height: 29.7969px;">  
</td></tr></tbody></table>

#### Enrollments Sample Data

<table border="1" id="bkmrk-student-terms-class." style="border-collapse: collapse; width: 100%; height: 165.781px;"><colgroup><col style="width: 10.6304%;"></col><col style="width: 20.0247%;"></col><col style="width: 8.28183%;"></col><col style="width: 12.3609%;"></col><col style="width: 17.6761%;"></col><col style="width: 14.7075%;"></col><col style="width: 16.1948%;"></col></colgroup><tbody><tr style="height: 46.5938px;"><td style="height: 46.5938px;">**Student**</td><td style="height: 46.5938px;">**Terms**</td><td style="height: 46.5938px;">**class.units**</td><td>**Class**</td><td style="height: 46.5938px;">**<span style="text-decoration: underline;">curriclum</span>.Subject**</td><td style="height: 46.5938px;">**Curriculum**</td><td style="height: 46.5938px;">**Average Metics**</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">183</td><td style="height: 29.7969px;">Spring 2025 183</td><td style="height: 29.7969px;">5</td><td>Math 4A</td><td style="height: 29.7969px;">math</td><td style="height: 29.7969px;">Math 5A</td><td style="height: 29.7969px;">*from assessment results*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">183</td><td style="height: 29.7969px;">Spring 2025 183</td><td style="height: 29.7969px;">5</td><td>Math 4A</td><td style="height: 29.7969px;">math</td><td style="height: 29.7969px;">Math 5B</td><td style="height: 29.7969px;"> </td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">183</td><td style="height: 29.7969px;">Spring 2025 183</td><td style="height: 29.7969px;">5</td><td>English 4A</td><td style="height: 29.7969px;">english</td><td style="height: 29.7969px;">English 4A</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">183</td><td style="height: 29.7969px;">Spring 2025 183</td><td style="height: 29.7969px;">5</td><td>Science 4A</td><td style="height: 29.7969px;">life science</td><td style="height: 29.7969px;">Biology</td><td style="height: 29.7969px;">  
</td></tr></tbody></table>

# Overview

Introduction to the ideas and terminology of PEMS

# Concept of Operation

### Business Model

The Studia Nova Business Model is unique in the industry in that it encourages third parties to set up physical classroom locations for students to gather while Studia Nova, the private school of record, provides the virtual curriculum and record keeping. At these different locations, students can be any grade level and a single teacher can be trained to manage a mixed group of various grade levels. However, each location can be a separate client, and so it is essential that each location only see the student information pertaining to its own students.

Third parties manage the billing relationship with families and provide student oversight. Student oversight requires third party staff to view student progress on courses in the Learning Management System (LMS). Staff may also elect to grade assignments on the platform in exchange for reduced 'wholesale' prices.

### Homeroom

Virtual learning allows families and communities to re-group themselves in unique ways to help students achieve their online learning goals. Read more about [One Room School Houses](https://www.studianova.org/the-new-one-room-school-house/). PEMS is configured to allow third parties to participate in the learning process. A homeroom can be a tutoring club with computers where students come to learn, or a homeroom may be a family with multiple students learning from home.

### Enrollment Partner Website (Word Press)

PEMS allows commercial partners to enroll students into the Studia Nova SIS, allowing third parties to act as 'resellers' of Studia Nova private school. The partner is provided a Word Press Website to manage enrollment. Thrid party partners also act a supervisors of the student's learning, ensuring they are completing their courses and providing a basic level of help.

Partners must have access to basic information from the SIS, for example the student's enrollment status. The SIS shares this information with the partner website. Partners may also be provided log-ins to the LMS so that they may review their student's progress on courses.

Families or parents create user accounts on the partner website, then fill out forms to enroll students. Parents pay the partner tuition fees online, then the partner remits payment to Studia Nova. A key aspect of the partner relationship is that Studia Nova does not maintain the billing relationship with the student's guardian.

The flagship partner site is [Freedom Library Club.](https://www.freedomlibrary.club/)


### Learning Management System (Moodle)

Online or virtual courses are created in the popular, open source learning management platform called [Moodle.](https://moodle.com/) Studia Nova builds courses using a variety of online sources, mostly open source material. The LMS is integrated with [Big Blue Button](https://bigbluebutton.org/) (BBB) for open source video classes. The LMS also has a chat feature where students can chat instructors as needed so that qualified teachers may help students who are working remotely.

### Student Information System (Custom Development)

The Student Information System (SIS) is a custom development in PHP on a laravel framework. The most basic functions of the SIS is to maintain student records and transcripts. However the PEMS SIS helps schools plan our sets of course a student must take to achieve their educational object, tracks student assessments, and tracks teacher credential status.

The SIS contains all the functions required to identify the correct courses a student needs to take on the LMS for each academic term, enroll students in those courses, keep historical grades, calculate GPAs, and produce transcripts on demand.

### Single Sign On (Key Cloak)

Single Sign On (SSO) allows students to sign on to one software application, then the software manages the student's log in to other applications. PEMS uses [Key Cloak](https://www.keycloak.org/) for SSO.

### eBook Publishing (BookStack App)

[BookStack App](https://www.bookstackapp.com/) is used for PEMS documentation. The application is fully searchable to help users find the information they need.

### CRM

tbd

# Student Records (SIS) Function

### Relevant Definitions

{{@90#bkmrk-a-term-is-the-divisi}}

{{@90#bkmrk-this-is-the-list-of-}}

{{@90#bkmrk-a-transcript-is-a-re}}

### The SIS

The Student Information System (SIS) manages all student records, which includes student biographical information like date-of-birth, and parent phone numbers as well as student academic information like that which appears on the student's transcripts. Moodle has course completion information, but not relate those courses to a specific school term.

A student record is created in the SIS for each student that attends the school. The record is created during the student Intake process.

<span style="color: rgb(224, 62, 45);">SIS stores student record for each student.</span>

### Transcript

The most important function of the SIS is to provide a student transcript. The transcript shows the classes taken in each term by the student, the grades, and calculates the overall grade point average of the student as well as the term grade point average.

The following image shows a typical transcript document:

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-01/scaled-1680-/image.png)](https://bsa.lynops.com/uploads/images/gallery/2024-01/image.png)

The header contains biographical information. The body of the document shows the specific year and term the classes were taken in and the grade the student achieved. Various Grade-point averages are calculated.

### Student Term Records

{{@90#bkmrk-a-student-term-recor}}

PEMS develops the information required for the transcript by making a unique record for every grading period (school term) that the student attends the school. A diagram of the data relationship for school terms is shown below:

<div drawio-diagram="148"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-03/drawing-5-1710361847.png" alt=""/></div>

For each individual student, there are multiple student term records. Each student term record is related to only one (school) term record. However, when all the students are considered, the school term record will be related to multiple student term records, one for each student enrolled in that particular term.

**(School) Term Table Example**

<table border="1" id="bkmrk-fall-2022-spring-202" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr><td>Fall 2022</td></tr><tr><td>Spring 2023</td></tr></tbody></table>

**Student Table Example**

<table border="1" id="bkmrk-akash-jagdish-ishaan" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr><td>Akash</td></tr><tr><td>Jagdish</td></tr><tr><td>Ishaan</td></tr></tbody></table>

**Student Term Table Example**

<table border="1" id="bkmrk-%28school%29-term-studen" style="border-collapse: collapse; width: 100%; height: 208.512px;"><colgroup><col style="width: 21.508%;"></col><col style="width: 23.9717%;"></col><col style="width: 54.5203%;"></col></colgroup><tbody><tr style="height: 29.7875px;"><td style="height: 29.7875px;">**(School) Term**</td><td style="height: 29.7875px;">**Student**</td><td style="height: 29.7875px;">**Student Term**</td></tr><tr style="height: 29.7875px;"><td style="height: 29.7875px;">Fall 2022</td><td style="height: 29.7875px;">Akash</td><td style="height: 29.7875px;">Fall 2022 Akash</td></tr><tr style="height: 29.7875px;"><td style="height: 29.7875px;">Fall 2022</td><td style="height: 29.7875px;">Jagdish</td><td style="height: 29.7875px;">Fall 2022 Jagdish</td></tr><tr style="height: 29.7875px;"><td style="height: 29.7875px;">Fall 2022</td><td style="height: 29.7875px;">Ishaan</td><td style="height: 29.7875px;">Fall 2022 Ishaan</td></tr><tr style="height: 29.7875px;"><td style="height: 29.7875px;">Spring 2023</td><td style="height: 29.7875px;">Akash</td><td style="height: 29.7875px;">Spring 2023 Akash</td></tr><tr style="height: 29.7875px;"><td style="height: 29.7875px;">Spring 2023</td><td style="height: 29.7875px;">Jagdish</td><td style="height: 29.7875px;">Spring 2023 Jagdish</td></tr><tr style="height: 29.7875px;"><td style="height: 29.7875px;">Spring 2023</td><td style="height: 29.7875px;">Ishaan</td><td style="height: 29.7875px;">Spring 2023 Ishaan</td></tr></tbody></table>


### Enrollments

Students take classes during each term. When a student is enrolled in a class, the record that represents the class that specific student took in that specific term is called the enrollment record. The enrollment record relates the classes a student takes to the student term record. The grades a student achieves, A, B, C, D etc. are recorded in the enrollment records. Class Names, from the related class records appear on the student transcript.

<div drawio-diagram="149"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-03/drawing-17-1710363283.png" alt=""/></div>

To create the transcript, PEMS creates a report of completed enrollments sorted by student term.

term

<table border="1" id="bkmrk-terms-fall-2024-spri" style="border-collapse: collapse; width: 100%; height: 94.4px;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr style="height: 35.2px;"><td class="align-center" style="height: 35.2px;">**Terms**

</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">Fall 2024</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">Spring 2025</td></tr></tbody></table>

student term

<table border="1" id="bkmrk-term-student-student" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50.0494%;"></col><col style="width: 24.9629%;"></col><col style="width: 24.9629%;"></col></colgroup><tbody><tr><td>Term

</td><td>Student</td><td>student term</td></tr><tr><td>Fall 2024</td><td>Akash

</td><td>Fall 2024 Akash

</td></tr><tr><td>Spring 2025</td><td>Akash

</td><td>Spring 2025 Akash

</td></tr></tbody></table>

Class List

<table border="1" id="bkmrk-class-list-english-9" style="border-collapse: collapse; width: 100%; height: 212.8px;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">**Class List**  
</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">English 9A</td></tr><tr><td class="align-center">English 9B</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">Indian History 1</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">Indian History 10</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">Algebra 1</td></tr><tr style="height: 35.2px;"><td class="align-center" style="height: 35.2px;">Algebra 2

</td></tr></tbody></table>

Enrollments

<table border="1" id="bkmrk-student-term-class-a" style="border-collapse: collapse; width: 100%; height: 235.2px;"><colgroup><col style="width: 33.3663%;"></col><col style="width: 33.3663%;"></col><col style="width: 16.6831%;"></col><col style="width: 16.6831%;"></col></colgroup><tbody><tr style="height: 46.4px;"><td style="height: 46.4px;">Student Term</td><td style="height: 46.4px;">Class</td><td style="height: 46.4px;">At Grade-level (automated-calculation)</td><td style="height: 46.4px;">Grade (manual entry-Moodle)</td></tr><tr style="height: 35.2px;"><td style="height: 35.2px;">Fall 2024 Akash</td><td style="height: 35.2px;">English 9A

</td><td style="height: 35.2px;">9</td><td style="height: 35.2px;">A</td></tr><tr style="height: 35.2px;"><td style="height: 35.2px;">Fall 2024 Akash</td><td style="height: 35.2px;">Indian History 1

</td><td style="height: 35.2px;">9</td><td style="height: 35.2px;">B</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">Fall 2024 Akash</td><td style="height: 29.6px;">Algebra 1</td><td style="height: 29.6px;">9</td><td style="height: 29.6px;">A</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">Spring 2025 Akash</td><td style="height: 29.6px;">English 9B</td><td style="height: 29.6px;">9</td><td style="height: 29.6px;">C</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">Spring 2025 Akash</td><td style="height: 29.6px;">Indian History 10</td><td style="height: 29.6px;">9</td><td style="height: 29.6px;">A</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">Spring 2025 Akash</td><td style="height: 29.6px;">Algebra 2</td><td style="height: 29.6px;">9</td><td style="height: 29.6px;">F</td></tr></tbody></table>

# Programs of Study Function

### Relevant Definitions

{{@90#bkmrk-in-summary%2C-enrollme}}

{{@90#bkmrk-a-student-term-recor}}

### Graduation Requirements

Most jurisdictions require students to take a certain number of units and certain types of classes in order to graduate with a degree. These requirements will be collectively called a program of study. Normally, students meet with a counselor, who explains to them the courses they need to take to meet their educational objectives, then it is the student's responsibility to enroll in the courses. The counselor provides oversight and checks the student is on track. This is time intensive and prone to error. In reality, the specific classes a student takes can be pre-determined based on the educational objective.

The image below shows a portion of information generally found on student transcripts:

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-01/scaled-1680-/CcFimage.png)](https://bsa.lynops.com/uploads/images/gallery/2024-01/CcFimage.png)

In the graduation requirements block, the units the student has already taken is shown along side the units the student must still take. An unfortunate disadvantage to allowing students to pick their own classes is that they might not meet all the graduation requirements.

### Program of Study

The PEMS was designed to allow administrators to plan out a set of classes (such at Algebra I, World History, English, and so on) that the student will take over a multi-year time frame. Once a student is assigned a plan, there is no need for the student to pick classes every term. The plan itself ensures all requirements and auto-enrollment ensures the student is taking the right courses when they need to. However, plans can be changed and manually adapted as students change their objectives.

The Programs of Study Function provides administrators the ability to pre-plan any number of "programs of study", which are called <span style="text-decoration: underline;">plans</span> inside of the PEMS. The student can then be assigned a plan, which provides the information needed to auto-enroll the student in classes every term until the plan is complete.

PEMS makes an [enrollment](https://bsa.lynops.com/link/90#bkmrk-enrollment) record for every required class under the plan, then relates that enrollment record to the future [student term records.](https://bsa.lynops.com/link/178#bkmrk-student-term-records) The status of future enrollments is 'incomplete.' When the student is ready to be enrolled in the class, PEMS auto-enrolls the student in the Moodle Course required for that class. At the end of term, the grade is updated by the course progress in Moodle and if the score is adequate, course credit is granted.

##### ***A plan is not just a list of courses required to meet graduation requirements, a plan sets out which class must be taken in which term.***

When students are picking and choosing their classes, many technologies are unable to provide an instant assessment on whether the student will complete their graduation requirements. With this approach, at any point in time, a student's enrollment records can be viewed as a whole. And because each record is marked complete/incomplete, one can immediately asses a student's progress towards their academic goals.

In creating a plan instead of picking individual classes, the administrator can ensure that students are meeting their various requirements for graduation. And by enrolling a student in a plan, the administrator ensures the student meets the requirements.

### Multiple Plans

There is no limit to the number of plans that may be created. This allows the PEMS to be deployed in a wide variety of educational systems or allow each school to effectively automate a high degree of customization without having to staff counselor roles.

##### ***By creating multiple compliant plans, a school can offer a great deal of customization in the program, while ensuring all requirements are met.***

***[![Screenshot 2024-03-13 131456.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/screenshot-2024-03-13-131456.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/screenshot-2024-03-13-131456.png)***

# Assessment Function

### Relevant Definitions

{{@90#bkmrk-curriculum-generall-}}

### The Assessment Function

An **assessment** checks how a student is performing academically. Assessment in PEMS are used to track how the school's academic program is delivering results. Where many schools simply track the performance level of a student, PEMS tracks performance improvements. PEMS is a system that monitors how the school is functioning in such a way that the school can constantly improve.

### Three Contributors to Student Performance

- **Curriculum** - did the curriculum, or Moodle course, provide a net improvement in academic scores.
- **Engagement** - did the student complete the course as planned.
- **Program** - does one set of courses provide better or worse outcomes than another set.

PEMS makes no assumptions about how the three factors above contribute to student academic performance. Certainly these factors are interrelated, a student that engages more in the course will most definitely show greater improvement.

Programs are created in the PEMS as a set of classes the student takes over a few years. Program placement, or the readiness of a student to complete the program is critical to the school's ability to tailor a program to a desired outcome. For example, it is generally believed that taking art classes may stimulate learning in broad areas of study. If this is true, then students will have better program-level outcomes if they are also taking art. Another example is the idea of writing-though-the-curriculum, which is an idea that if a student has writing assignments in every single class, learning outcomes will be superior. If this is true, then a program that focuses on copious writing assignments will produce better results.

Curriculum is created in Moodle and courses may differ in their level of intensity, once course may require more writing, another may only provide auto-graded quizzes. Some classes may have weekly teacher lectures, or weekly teacher check-in sessions. Other classes may require printout and hand writing, or proctored exams. There are a great many differences in curriculum.

Engagement is multifaceted, it includes the grade the student achieved in the course, the total time spent on the course, and how much of the course was completed on time. The environment a student studies in will also affect engagement, does the student do their work largely on campus or at home?

Every school will want to select what assessments matter to their own academic vision. In one school, they may only care about reading comprehension and math levels, in a different school they may prefer to test for spatial reasoning or artistic competence. In selecting what a school tests for, the school is setting the goals that their program will be trying to reach.


### Two Assessment Type Metrics

##### **Level Equivalent**

Students are assessed for their progress towards acquiring the knowledge and skills of a high school graduate, a student who completed 13 years of schooling. Given enough time and effort, all students can reach this standard. **Level equivalent** is an approach that assesses if a student is progressing faster or slower towards their graduation. If the student is progressing slower, they are behind their grade level, if the are progressing faster, they are above their grade level. PEMS allows users to define the grade level equivalent for each score. <span style="color: rgb(224, 62, 45);">As I understand it, this means that each school head can determine personally what it means to say be at a 6th grade level. Normally, how is the national grade level competency determined. Would most school heads go off a national standard determined by the Department of Education?</span>

PEMS uses hundreds/tens place pattern for its Level Equivalent scoring. The grade level in in the hundred's place, and the month is in the tens place. For example 840 is eight grade 4th month. Withing a grade year, this is a quick visual reference for improvement, 800 compared to 860 represents 6 months of academic progress. Parents and student readily understand this system and it is easy to explain. A student starts a grade at 800, then increased by ten for every month in school. After the ninth month, the student has achieved 890. Then the student takes summer off and starts 9th grade at 900. 890 is the same as 900 under this system. This issue becomes important when calculating grade level differences in grade level achievement in some cases.

##### **Percentile Ranking**

**Percentile ranking** is another method of assessing student performance. With this method, students are ranked against their peers in a larger population, either state-wide or nationally. Traditionally, a student's grade in a course can be considered percentile ranked, for example only 10% of students should receive and A in the class. Percentile Ranked assessments are similar but across a larger population of students. For these types of assessments, PEMS stores a raw score and a percentile rank in the assessment result record.


### Competency-Based Standards

**Competency based** tracking allows students to demonstrate mastery or competency in what they can do. The completion of a end of year essay with a passing grade of an B demonstrates the student can competently write an essay. Competencies may also be used to verify domain knowledge. A student may have a very high level of reading but very little domain knowledge of history for example.

Tracking Competencies allow schools to ensure students meet all their objectives. A student may score very high in reading competency, achieve a B in an English class, but has never turned in a reasonably well written essay. Alternatively, a student may archive a B in History with excellent knowledge of the Roman Empire, but with no domain knowledge of World War II. Good grades may not catch a lack of competency or domain knowledge in areas important the philosophy of the school requires.

When a school develops a competency list, the school is in fact developing their own, independent assessment system. Level Equivalent and Percentile ranking methods of assessment inherently compare the student to the greater world. Competencies are authored by the school itself and reflect the school's own academic standards. When well structured, competency tracking can reduce endless assessment. When a teacher grades an essay at A+, the writing competency is achieved and students do not need to take a writing exam. Regular day-to-day schooling reducing constant testing.

Competency tracking in PEMS is tightly integrated with Moodle. The school will develop a check list of competencies the student should be demonstrating at each grade level or grade span. In order for competency tracking to be effective, the school faces a rather intensive task of tagging activities across all the courses with the competency checklist. When a student passes the activity, they earn the competency.

<span style="color: rgb(224, 62, 45);">This whole section is pretty straight-forward and makes sense.</span>

# Teacher Certification Function

### Certifications

Teacher certifications are complex for any school to track. A teacher may be certified based on the State, subject, or grade level taught. The certification may or may not have an expiration date, and some specific classes may require higher certifications that other classes. Certification records include any process the teacher must go through in order to teach classes. Examples are college degrees, teaching exams, back-ground checks or any other security processes that have an expiration date. It is generally the case that any public funds will not be issued to schools if schools do not ensure teachers are properly certified and those certifications are maintained.

### Authorizations

Certifications may be combined to create authorizations and in some cases, one certification may provide multiple authorizations. An authorization is permission to teach a subject or class for a specific grade span. An authorization record is linked to multiple certifications as needed, such as the teacher credential, the Security back-ground check, or the required on-going professional training, so that all the factors that go into 'green-lighting' the teacher to teach that subject are understood.

*Note: Authorization records are linked to grade spans, not grade levels, so it is important to define grade spans in ways that reflect jurisdictional requirements for teacher certification. <span style="color: rgb(224, 62, 45);">Does grade span mean that a teacher can be authorized to teach 6th-8th grade Math, but not Elementary School level Math? Grade span would be something like being authorized to teach 6th-8th grade Math opposed to being authorized to teach 8th grade level Math? </span>*

PEMS tracks teacher authorizations, and provides alerting to expiring credentials which may put the authorization in jeopardy. In this way, the administrator is aware of any concerns with teacher authorizations which can affect legal reporting, accreditation, and funding sources.

<span style="color: rgb(224, 62, 45);">This is straightforward and makes sense.</span>

# Reference - PEMS Terminology

#### Letter Mark

**Letter Mark.** In the US, grades are usually awarded as letters, A, B, C, D and F. There is no grade of E. Other countries use a straight number system with a maximum of ten. It is normal to call letter marks just 'grades' in American English, but this can be confusing as a student's grade is also "kindergarten" or 6th grade. In other countries, this definition of grade is usually called a 'form', like the sixth form. Letter Mark refers the the letter given in the US for overall course scoring.

#### Grade Points

**Grade Points.** Because the US uses letter for marks, there needs to be a numerical system in order to determine how the student is doing over all. Grade points are awarded based on the letter grade. For example, 4 points are awarded for an A, 3 for a B, and so on.

#### Grade Point Average

**Grade Point Average (GPA).**  The Grade Point Average is the unit-weighted average of the student's grades. Each class has a number of units (also called credits) assigned. If a student earns an A in a class worth 5 units, the total points awarded for that class is 5 (units) x 4 (points) = 20 points. For a given term all the points are added, then divided by the total units to arrive at the students GPA. In this example, 20 (total points) / 5 (units) = 4.0 GPA.

#### Weighted GPA

**Weighted GPA.** students take more advanced courses, the grade points may be increased. For example, if a student earns a A in an advanced English class of 5 units, the student earns a 5 instead of a 4 for grade points for weighted GPA. The total points for that class is 5 (units) x 5 (points) = 25 points (total). Then divide this by totals (5) for a GPA of 5.0. The higher number of points are used to calculate the student's weighted GPA. Lower number of points (4 instead of 5 points) is used for unweighted GPA.

#### Academic Years

**Academic years** are the specific years the school is in operation. Academic years can be defined before the school is in operation. In this case the academic years are used to keep records on classes a student wants to transfer into the school that were taken at other schools prior to enrollment.

#### Terms

A **term** is the division of the academic year into grading periods. Terms may be semesters or quarters. The term record is a record that indicates the start and end date of each term. Multiple terms are related to academic years. Terms are also related to a Term Label record.

#### Term Labels

**Term Labels** are the names of the terms a school is running, like Spring, Fall, etc. The number of Term Label records indicates the number of terms the school operates. Term Labels indicate if that term is required or optional, like a summer term.

#### Student Terms

**Student Terms.** There is one term record for every term the school operates. A *<span style="text-decoration: underline;">student </span>term record* contains student-specific information about how the student performed academically in the term, such as the student's grade point average for that term. All the classes a student takes (enrollment records) are linked to the student term. A student has a term record created for each term they are in attendance.

#### Grade Level

A **grade level** is the student's year in school, first grade, second grade, third grade and so on. The term 'grade level is used to differentiate between the grade or mark a student received in a class and the year the student is in.

#### Grade Span

A **grade span** covers multiple years of school and can be defined by the administrator. A plan can not exceed a grade span. The purpose of defining grade spans is to help set academic goals and gates.

#### Schools

**Schools** refer to legal definitions in a jurisdiction of various grade levels. In the US this is Elementary School, grades K through 5, Middle School grades 6 through 8, and high school, grades 9 through 12.

#### Other Schools

**Other Schools** are the schools that student attend prior to starting at the school. Other schools will provide transcripts that must in incorporated into the student record. For this reason, each enrollment record on the transcript may be related to an 'other school' to show where the credit was transferred in from.

#### Classes

**Classes.**  The name of the Class appears on the student's transcript. Classes are sometimes called *courses.* However, PEMS does not use the term 'course' in any of its modules. In general, the word 'course' can refer to a specific class, like Algebra 1, or it may also refer to the set of classes that lead to a degree or certificate. For example, "I followed a course at the University in wine making" could mean a series of classes. The world "class" also has a secondary meaning. A student can be in the "second grade class" which would mean all students in a particular classroom. PEMS uses the word class to mean the subject of study for which units are earned, commonly called a course, such as "Algebra I"*.* <span style="color: rgb(224, 62, 45);">A class that is a subject of study for units can have different curriculum that fulfill it.</span>

#### Sections

In real life, **Sections** are a set of students taking a particular class. In a standard brick and mortar school, a sections are like the physical classroom. There may be multiple teachers teaching English 9 in a school, each with their own physical classroom number. There are no traditional sections in the PEMS universe since there is no needs to physically separate students into various classrooms. However, students from multiple learning locations can all be enrolled in the same Moodle Course, and only their own teacher should see their work. So PEMS uses the term **<span style="text-decoration: underline;">groups </span>**to refer to a set of students assigned to a specific teacher. **In Summary: 1)** PEMS does not use the term sections. **2)** Instead Moodle uses the term (virtual) groups.

<span style="color: rgb(224, 62, 45);">Sections: More important in traditional school as it meant multiple classrooms but same subject. In virtual school, the concept of sections is no longer applicable and groups is used instead.</span>

<span style="color: rgb(224, 62, 45);">Groups: Students taking different classes on Moodle, but have the same teacher? Is this is right conception of groups?  
</span>

#### Curriculum

**Curriculum** generally refers to the books and exercises used by the teacher to further the student's knowledge. In Moodle, the curriculum is a Moodle Course. Any class may be taught with multiple curriculum, or different text books, and so there are multiple Moodle courses that may be used to teach a Class.

#### Course

The term **Course** is not used in any technical sense in PEMS. Courses are created on the LMS (Moodle) platform for students to take online, but PEMS refers to courses as curriculum. For example, two different English teachers could be teaching English 9, but they assign different books to read. The class is the same as far as the school is concerned, the the material and activities the students turn in are slightly different, the classes use a different curriculum. If the teachers were making their own online courses, the activities would not be the same. Classes may use different Moodle courses to fulfill learning requirements, as they may use different curriculum.

#### Syllabus

The **Syllabus** is the outline of what a student will learn in the class our Moodle course. Usually this is handed out the first day of class and informs the students of the learning objectives. In the US, the course syllabus must be submitted to various regulatory organizations to gain approval. In PEMS, the class may have one syllabus, and the Moodle course may have a tailored syllabus for the specific curriculum. The administrator my use both or select one approach.

#### Subject

**Subjects** are families of classes. For example, Algebra I, Geometry, and Algebra II are all in the subject of Math. Schools can define any subjects they need, and identify any class as belonging to that subject area. Subjects are mainly used to assist the administration in checking the student is meeting requirements when creating a plan .

<table border="1" id="bkmrk-subject-class-course" style="border-collapse: collapse; width: 100%; height: 88.8px;"><colgroup><col style="width: 24.9629%;"></col><col style="width: 24.9629%;"></col><col style="width: 50.0494%;"></col></colgroup><tbody><tr style="height: 29.6px;"><td>**Subject**</td><td style="height: 29.6px;">**Class**</td><td style="height: 29.6px;">**Course/ Curriculum**</td></tr><tr style="height: 29.6px;"><td>Indian Literature</td><td style="height: 29.6px;">Vedas 1A</td><td style="height: 29.6px;">Samhitas</td></tr><tr style="height: 29.6px;"><td>Indian Literature</td><td style="height: 29.6px;">Vedas 1A</td><td style="height: 29.6px;">Brahmanas</td></tr></tbody></table>

#### Teacher of Record

The **Teacher of Record** is the 'official teacher' of the student for a specific class, or for multiple classes. Various regulatory agencies require the teach of record to be in possession of certifications and credentials. PEMS is designed for virtual schools and so all Teachers of Record are virtual teachers. The teacher of record is legally responsible to give the student their grades.

<span style="color: rgb(224, 62, 45);">Would we require all customers have their teachers be subject to regulatory certifications and credentials that traditional school teachers are subject to?</span>

#### Enrollment

The term enrollment has two meanings in the USA.

- Enrollment is used to describe the process where a student joins the school
- Enrollment is also used to describe when a student enrolls in a specific class in a specific term

The term **"Enrollment Process"** will refer to the processes that are triggered with a student decides to come to the school.

The term **"enrollments records"** will describe the table in the database the keeps information of which classes students are taking in which term.

**Enrollment** is the process of signing up for a class. An enrollment record in the PEMS is the class as student takes in a specific term, and stores the student's final grade. The set of completed enrollments is the information displayed on the student's transcript.

#### Transcript

A **transcript** is a report of completed enrollments. Transcripts are formatted in various ways to use the minimum amount of paper. A transcript shows the classes the student has taken at the school, the grades received and the units earned.

#### Plans

The **plans** are sometimes referred to as "Programs of Study." Plans are defined by the administrator as a series of classes taken across all subjects to meet an educational objective or graduation requirements over a grade span. Any number of plans may be developed, and a student may be assigned only one plan at a time. The plan contains the information needed to auto-enroll student in their classes (create enrollment records) in each term covered by the plan.

<span style="color: rgb(224, 62, 45);">Plans cannot go past a grade span and a grade span is determined by the administrator.</span>

#### Templates

**Templates** are records that specify the sequence of classes to be taken under the plan. One plan will have multiple templates associated to that plan, each representing a class that must be taken to meet the plan's requirements. A template is a model of a student enrollment record. A template record specifies the class name, the corresponding curriculum, and the term the course should be taken in. PEMS copies all the template records associated with the student's plan to create the enrollment records for that plan. Enrollment records are copies of the template records that are associated with a specific student term (who and when).

<span style="color: rgb(224, 62, 45);">As I understand it, a student plan can have multiple templates for various ways to achieve that plan? A student plant may have English and Math as a requirement while templates will have the sequences of classes (i.e. Old English, Shakespeare, Kipling) all required to meet the English portion of the plan?</span>

#### Subject Requirements

**Subject requirements** are the number of units in total required in a subject area by a regulatory organization. For example, the NCAA may require 4 years of English and 3 years of math. The University of California may require 4 years of English and 4 years of math. The NCAA subject requirement for math is 3 years, the University of California subject requirement for math is 4 years. For University of California, the <span style="text-decoration: underline;">subject requirement</span> is 4 years, the <span style="text-decoration: underline;">subject</span> is math.  *Note: sometimes requirements are described in 'years' of study, sometimes in credits, and sometimes in units.*

<span style="color: rgb(224, 62, 45);">Subject requirements of different collegiate organizations are important for students who wish to qualify for those colleges and/or certain activities like collegiate athletics or a conservatory.</span>

#### Compliance Tags

**Compliance tags** are used to help manage the different requirements of the various regulatory organizations. Not only do the regulatory organizations specify the subject requirements, they also must each approve the course description (syllabus). Students are not allowed to meet the subject requirements with any curriculum, they must meet the requirements with curriculum that has been submitted and approved to the organizations. The student's transcript must then show that the class &amp; curriculum has been approved by the various regulatory organizations. So compliance is a property of the Moodle Course. The Moodle Course list in PEMS is called the curriculum table. There is one record in the curriculum table for each course available in Moodle. PEMS lets the administrator tag certain curriculum records with a compliance tag. If a student takes a class, English 9A, and is enrolled in a specific curriculum, or Moodle Course, the compliance tag from the associated Moodle course will appear on the transcript. Compliance tags are deliberately short to fit on the transcript pages.

<span style="color: rgb(224, 62, 45);">Compliance tags populate on transcripts to show what collegiate regulatory body requirements the class has met.</span>

# Reference - Moodle Terminology

### General Moodle Terminology

#### Moodle Activity - DLP

A Moodle activity is basically an assignment give to a student where the student receives a grade upon completion. The Moodle "grade book" lists the students scores on all activities.

<table border="1" id="bkmrk-moodle-activity-grad" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>Moodle Activity</td><td>Gradebook</td></tr><tr><td>Algebra HW 1</td><td>100 (A+)</td></tr><tr><td>Algebra Quiz 1</td><td>90 (A-)</td></tr></tbody></table>

<p class="callout info">Studia Nova refers to an activity as a DLP (Daily Learning Plan) because all activities are developed to be completed in a one-day assginement.</p>

### Moodle Course Organization

#### Moodle Course ID

**Moodle Course ID** is a unique value assigned to each course developed in Moodle. Any actions triggered between the SIS and Moodle require matching on the Moodle Course ID. In PEMS the Moodle Course ID is stored in the Curriculum table "Code" field.

#### Moodle Category

Courses are organized into **categories** in Moodle. Moodle can perform various batch functions on all courses within a category.




### Moodle Student Groups

#### Moodle Groups

In Moodle, **[Groups](https://docs.moodle.org/403/en/Groups)** are used to break up groups of students enrolled in a course. Moodle can enroll hundreds of students in one course, but the teacher would be overwhelmed to grade all the work. Therefore Moodle provides the group option. When teachers and their students are enrolled in the same group, the teacher only sees their own students. In PEMS, Moodle groups are used to block teachers from seeing students that belong to a different location. However, Moodel groups are not defined at the system level in Moodle, they must be defined in each and every course. **In Summary: 1)** Moodle uses Groups to hide students enrolled in the same course from other teachers. **2)** Both the teacher and the student have to be in the same group. **3)** Groups <span style="text-decoration: underline;">MUST </span>be defined for each and every course, Groups can not be defined at the system level.

<table border="1" id="bkmrk-student-teacher-cour" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 24.9383%;"></col><col style="width: 24.9383%;"></col><col style="width: 24.9383%;"></col><col style="width: 24.9383%;"></col></colgroup><tbody><tr><td>Student</td><td>Teacher</td><td>Course</td><td>Group</td></tr><tr><td>Akash Singh</td><td>Gandhi</td><td>Indian Literature 1A</td><td>1</td></tr><tr><td>Jagdish Singh</td><td>Gandhi</td><td>Indian Literature 1A</td><td>1</td></tr><tr><td>Ishaan Vaidya</td><td>Nehru</td><td>Indian Literature 1A</td><td>2</td></tr><tr><td>Vivek Rao</td><td>Nehru</td><td>Indian Literature 1A</td><td>2</td></tr></tbody></table>

#### <span style="color: rgb(224, 62, 45);">The groups must be done manually in the course</span>

#### Moodle Cohorts

In real life, a **cohort** is a set of students at a specific grade level. All ninth graders in 2023 form a set of students, as they move through the various grade levels, we refer to those 2024 ninth graders as a cohort. In Moodle a **cohort** is a set of students and a teacher(s). Cohorts are primarily used in Moodle for batch enrollment. For the use case that all students in 4th grade should be enrolled in 4th grade math. In this case a Moodle user would define a cohort of 4th graders, then assign the cohort to a specific course. However, using cohorts for enrollment is not useful in PEMS because each student is following a unique program. The unique program is managed in the SIS. In PEMS, all fourth graders are *not* enrolled in fourth grade math. However, cohorts are still useful for reporting. So in PEMS, Moodle Cohorts are used to identify a set of students under the supervision of a particular teacher (proctor). In this use case, students can be at any grade level since PEMS is designed for mixed grade-level student management. *Unfortunately*, Moodle Cohorts can <span style="text-decoration: underline;">***not***</span> be used to block a teacher from seeing other student's work who are not in their own cohort. **In summary 1)** Moodle Cohorts are a set of students and their teachers (proctors) **2)** the students in the set can be any grade level  **3)** Cohorts are useful for reporting **4)** All teachers can see all students in any cohort.

<span style="color: rgb(224, 62, 45);">All students in one schoolhouse are in a cohort. What is the difference between a group and a cohort? Aren't they both just ways to delineate all the students under a particular teacher? </span>





### Moodle Competency Tracking

#### Moodle Competencies

[Moodle competencies](https://docs.moodle.org/403/en/Competencies) are specified in the activity settings, internal to a Moodle course by the course creator. Each activity may be tagged with pre-defined competencies. When the student completes the activity, they earn the competency. The competency list is created in the admin panel.

In the Moodle Competency record, the <span style="text-decoration: underline;">**ID number**</span> field uniquely identifies the competency. This field is used for integration with the SIS for tracking competency completion.

#### Moodle Competency Frameworks

[Moodle Competency Frameworks](https://docs.moodle.org/403/en/Competency_frameworks) are defined in the admin panel of Moodle. A framework is used only to organize the competencies and flow down settings. A framework can not be assigned to a student, each competency must be added to a template, then that template assigned to a student.

<span style="color: rgb(224, 62, 45);">Isn't a template a sequence of courses that fulfill a specific requirement of a plan? I assume based on the above, it includes a list of competencies as well?</span>

#### Moodle Learning Plans

In Moodle, a student can be assigned a [learning plan](https://docs.moodle.org/403/en/Learning_plans), which is a group of competencies that may span multiple courses. The student can view their progress towards the learning plan in their profile.

<span style="color: rgb(224, 62, 45);">Learning plan includes competencies and classes? Or is this different from student plan?</span>

#### Moodle Learning Plan Templates

Moodle allows the admin to define Learning Plans, which are sets of competencies. Learning Plan templates are use to assign learning plans in bulk to students. Templates may be assigned to a Cohort of students.

<span style="color: rgb(224, 62, 45);">This sounds like learning plan templates are different than student plan templates. Did I understand that correctly?</span>

# Platform Strategy

<div drawio-diagram="152"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-03/drawing-5-1710520661.png" alt=""/></div>


### School-In-A-Box

**Word Press**  - Website pre-configured website for online enrollment ans tuition payment.

**SuiteCRM** - CRM rto drive business and manage communication, contract and documentation workflow.

**Asterix PBX**  - dial from CRM, inter office phone numbers (TBD)

**Moodle** - LMS pre-configured with all Studia Nova classes, third party subscriptions priced separately but bundled with the solution.

**Big Blue Button** - Integrated with Moodle to provide teachers the option fro online, synchronous learning.

**PEMS** - fully integrated with Moodle for student Information management.

**BookStack App** - Pre-configured with required academic documentation for approvals (course syllabus) etc, shared book with master for technical documentation. Accreditation Work Flows, sample contract etc. With custom formatted export from HTML

**Keycloak** single sign on.

**Hosted Solution** - IONOS hosted solution, not a customer onsite deployed solution. Includes back ups and email.

**Next Cloud** - and Only Office - online files and productivity

**Accounting System** - TBD, multiple open source accounting systems will be evaluated.

# KEY WorkFlows

The workflows describe how the user will interact with PEMS.  Workflows integrate functions from multiple modules.

# New Client On Ramp

<table border="1" id="bkmrk-crm-enter-lead-into-" style="border-collapse: collapse; width: 100%; height: 320.36px;"><colgroup><col style="width: 18.4178%;"></col><col style="width: 81.5822%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">CRM</td><td style="height: 29.7969px;">Enter lead into CRM, assign a unique client ID</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">CRM</td><td style="height: 29.7969px;">Sign Contract and invoice</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Word Press</td><td style="height: 29.7969px;">Stand up Word Press Site</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Word Press</td><td style="height: 29.7969px;">Customize Website content with provided graphics.</td></tr><tr><td>Word Press</td><td>Customize forms that go into SIS so they all carry the Unique Client ID</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">Word Press</td><td style="height: 46.5938px;">Client enters proctor information on their website using the provided from - goes into SIS (like student enrollment form). </td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">SIS</td><td style="height: 29.7969px;">Proctor information information goes into the 'proctor' table as unapproved</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Moodle</td><td style="height: 29.7969px;">Once approved, proctor account is created in Moodle</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">Word Press</td><td style="height: 35.3906px;">Client enters location information on their website using the provided form -

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">SIS</td><td style="height: 29.7969px;">Home room location form is entered into homeroom table as 'unapproved'</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Word Press</td><td style="height: 29.7969px;">Once approved, then the location is available on the Word Press Site as an enrollment location option.</td></tr></tbody></table>

# New Student Intake

### Intake Steps

Intake represents all the steps required to get a student assigned their first courses in Moodle. In PEMS, the HOMEROOM Module is primary used to complete this workflow. However, communication like sending signed contracts to parents and invoicing clients is completed in the CRM module. The PEMS SIS does not provide any capability to store or send (pdf) documents to and from parents or schools. The CRM is used for this function.

The trigger to start the intake process is a parent submitting an enrollment form (gravity form) on the Word Press site. The completion of the process is the assignment of courses in Moodle.

### Part A - Parent Submits Form and is Accepted/Rejected into the SIS

Part A is triggered when a parent signs up for an account on a client(facility) Word Press website. The submitted enrollment form is reviewed and updated then accepted or rejected. Part A ends with the parent being prompted to pay tuition to the client (facility).

<table border="1" id="bkmrk-step-1-word-press-si" style="border-collapse: collapse; width: 114.074%; height: 2270.02px;"><colgroup><col style="width: 10.754%;"></col><col style="width: 12.1137%;"></col><col style="width: 12.979%;"></col><col style="width: 32.7565%;"></col><col style="width: 18.665%;"></col><col style="width: 12.7318%;"></col></colgroup><tbody><tr style="height: 46.5938px;"><td style="height: 46.5938px;">**Sequence**</td><td style="height: 46.5938px;">**Application**</td><td style="height: 46.5938px;">**Module**</td><td style="height: 46.5938px;">**Description**</td><td style="height: 46.5938px;">**TEST PLAN**</td><td style="height: 46.5938px;">**Known Issues**</td></tr><tr style="height: 124.953px;"><td style="height: 124.953px;">1</td><td style="height: 124.953px;">Word Press</td><td style="height: 124.953px;">  
</td><td style="height: 124.953px;"><span style="background-color: rgb(194, 224, 244);">USER</span> Parent makes Account on enrollment website, verified by email

</td><td style="height: 124.953px;">Sign up for new account, check email received, verify account, check its verified in WP

</td><td style="height: 124.953px;">Email for new site not configured

</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">2</td><td style="height: 63.3906px;">Word Press</td><td style="height: 63.3906px;">gravity forms</td><td style="height: 63.3906px;"><span style="background-color: rgb(194, 224, 244);">USER</span> Parent logs in and completes form on Word Press Site to enroll student</td><td style="height: 63.3906px;">Complete gravity form</td><td style="height: 63.3906px;">  
</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">3</td><td style="height: 63.3906px;">Word Press</td><td style="height: 63.3906px;">gravity forms</td><td style="height: 63.3906px;"><span style="background-color: rgb(194, 224, 244);">USER</span> Parent signs all legal forms to submit the forms, for both the enrollment client and Studia Nova</td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;">  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">4</td><td style="height: 46.5938px;">SIS</td><td style="height: 46.5938px;">HOMEROOM</td><td style="height: 46.5938px;"><span style="background-color: rgb(191, 237, 210);">INTEGRATION</span> - Form is entered into <span style="text-decoration: underline;">**applicants table** </span>in the SIS</td><td style="height: 46.5938px;">Check form in SIS</td><td style="height: 46.5938px;">  
</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;">5</td><td style="height: 80.1719px;">SIS</td><td style="height: 80.1719px;">HOMEROOM</td><td style="height: 80.1719px;"><span style="background-color: rgb(194, 224, 244);">USER </span> reviews the form on the dashboard - clicking the form opens the "applicant record"

</td><td style="height: 80.1719px;"></td><td style="height: 80.1719px;"></td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">5.1</td><td style="height: 63.3906px;"><span style="color: rgb(126, 140, 141);">asterix</span></td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px; padding-left: 40px;"><span style="background-color: rgb(194, 224, 244);">USER </span> to validate all information received in form by <span style="text-decoration: underline;">**calling** </span>parent (make mobile phone required)</td><td style="padding-left: 40px; height: 63.3906px;">  
</td><td style="padding-left: 40px; height: 63.3906px;">  
</td></tr><tr style="height: 108.172px;"><td style="height: 108.172px;">5.2</td><td style="height: 108.172px;">SIS</td><td style="height: 108.172px;">HOMEROOM</td><td style="height: 108.172px; padding-left: 40px;"><span style="background-color: rgb(194, 224, 244);">USER </span> selects correct previous school ([other school](https://cs.studianova.org/admin/otherschools)) in the SIS record. (WP does not have select menu, user types in previous school)</td><td style="padding-left: 40px; height: 108.172px;">  
</td><td style="padding-left: 40px; height: 108.172px;">  
</td></tr><tr style="height: 124.969px;"><td style="height: 124.969px;">5.3</td><td style="height: 124.969px;">SIS &amp; CRM</td><td style="height: 124.969px;">HOMEROOM&amp; CRM Accounts</td><td style="padding-left: 40px; height: 124.969px;"><span style="background-color: rgb(194, 224, 244);">USER </span> - If other school is not in SIS table, user enters new record and then selects the correct school in the **SIS record <span style="color: rgb(224, 62, 45);">before accepting the student. </span>**<span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);">See <span style="color: rgb(35, 111, 161);">*[Suite CRM Integration](https://bsa.lynops.com/books/personal-education-management-system/page/suite-crm-integration "Suite CRM Integration").*</span></span></span></td><td style="padding-left: 40px; height: 124.969px;">  
</td><td style="padding-left: 40px; height: 124.969px;">  
</td></tr><tr style="height: 147.375px;"><td style="height: 147.375px;">5.4</td><td style="height: 147.375px;">SIS</td><td style="height: 147.375px;">HOMEROOM</td><td style="padding-left: 40px; height: 147.375px;"><span style="background-color: rgb(194, 224, 244);">USER </span> selects the correct Homeroom from menu (*the parent selects location in the WP gravity form, but the location name in WP may not be exact same as homeroom name, therefore allow the user to select correct name*)</td><td style="padding-left: 40px; height: 147.375px;">  
</td><td style="padding-left: 40px; height: 147.375px;">  
</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">6</td><td style="height: 63.3906px;">SIS</td><td style="height: 63.3906px;">HOMEROOM</td><td style="height: 63.3906px;"><span style="background-color: rgb(194, 224, 244);">USER </span>- Accept / reject the Student</td><td style="height: 63.3906px;">Check WP status is approved or disapproved.</td><td style="padding-left: 40px; height: 63.3906px;">  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">7</td><td style="height: 46.5938px;">SIS</td><td style="height: 46.5938px;">STUDENT</td><td style="height: 46.5938px;"><span style="background-color: rgb(236, 202, 250);">AUTOMATION</span> - create the student record in SIS from the applicant record.</td><td style="height: 46.5938px;">  
</td><td style="padding-left: 40px; height: 46.5938px;">  
</td></tr><tr style="height: 108.172px;"><td style="height: 108.172px;">8</td><td style="height: 108.172px;">SIS</td><td style="height: 108.172px;">STUDENT</td><td style="height: 108.172px;"><span style="background-color: rgb(236, 202, 250);">AUTOMATION </span>- create all the student term records needed for the student until the end of their current grade span. [3. Create Student Term Records](https://bsa.lynops.com/books/personal-education-management-system/page/3-create-student-term-records "3. Create Student Term Records")</td><td style="height: 108.172px;">  
</td><td style="height: 108.172px;">  
</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">9</td><td style="height: 63.3906px;">Word Press</td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;"><span style="background-color: rgb(191, 237, 210);">INTEGRATION</span> - Parent is notified student is accepted, status is changed in the Parent's WP account.</td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;">  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">10</td><td style="height: 46.5938px;">Word Press</td><td style="height: 46.5938px;">PayPal integration</td><td style="height: 46.5938px;"><span style="background-color: rgb(194, 224, 244);">USER </span>Parent is able to pay with paypal the <span style="text-decoration: underline;">client </span>(facility account).</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;"> </td></tr></tbody></table>

###  

### Part B - Gather Required Documents from Parents or Other Schools - Mainly CRM functions

Trigger - a new opportunity record is made in Suite when the student is accepted in the SIS. This function alerts the CRM user to start getting the required documentation from parents and schools to support the enrollment. Suite is also used to send invoices to the client(facility), ensuring that every students is billed for. Part B ends with a status change to the student record that allows the student to be provided log-ins to Moodle.

<table border="1" id="bkmrk-sequence-application" style="border-collapse: collapse; width: 114.074%; height: 2270.02px;"><colgroup><col style="width: 10.754%;"></col><col style="width: 12.1137%;"></col><col style="width: 12.979%;"></col><col style="width: 32.7565%;"></col><col style="width: 18.665%;"></col><col style="width: 12.7318%;"></col></colgroup><tbody><tr style="height: 46.5938px;"><td style="height: 46.5938px;">**Sequence**</td><td style="height: 46.5938px;">**Application**</td><td style="height: 46.5938px;">**Module**</td><td style="height: 46.5938px;">**Description**</td><td style="height: 46.5938px;">**TEST PLAN**</td><td style="height: 46.5938px;">**Known Issues**</td></tr><tr style="height: 107.141px;"><td style="height: 107.141px;">1</td><td style="height: 107.141px;">CRM</td><td style="height: 107.141px;">  
</td><td style="height: 107.141px;"><span style="background-color: rgb(191, 237, 210);">INTEGRATION</span> - When the student is accepted, Suite CRM records are created. The parent is a contact record the student is an opportunity . See [Suite CRM Integration](https://bsa.lynops.com/books/personal-education-management-system/page/suite-crm-integration "Suite CRM Integration").</td><td style="height: 107.141px;">  
</td><td style="height: 107.141px;">  
</td></tr><tr style="height: 124.938px;"><td style="height: 124.938px;">2</td><td style="height: 124.938px;">CRM

*add $$ sig module to SUITE*

</td><td style="height: 124.938px;">(no dev required)

</td><td style="height: 124.938px;"><span style="background-color: rgb(194, 224, 244);">USER</span> sends Parent an e-sign document to dis enroll student from previous school and enroll in Studia Nova *(contract pdf template in Suite)*</td><td style="height: 124.938px;">  
</td><td style="height: 124.938px;">  
</td></tr><tr style="height: 87.5469px;"><td style="height: 87.5469px;">3</td><td style="height: 87.5469px;">CRM</td><td style="height: 87.5469px;">(no dev required)</td><td style="height: 87.5469px;"><span style="background-color: rgb(194, 224, 244);">USER</span> Once above document is signed, an invoice is sent to the <span style="text-decoration: underline;">client </span>(facility account) for the new student, and/or notification based on billing terms. </td><td style="height: 87.5469px;">  
</td><td style="height: 87.5469px;">  
</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">4</td><td style="height: 63.3906px;">CRM</td><td style="height: 63.3906px;">(no dev required)</td><td style="height: 63.3906px;">After the parent esigns the document request, the pdf is emailed to the other school to request transcripts.</td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;">  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">5</td><td style="height: 46.5938px;">SIS</td><td style="height: 46.5938px;">STUDENT</td><td style="height: 46.5938px;"><span style="background-color: rgb(194, 224, 244);">USER</span> (or future <span style="background-color: rgb(191, 237, 210);">INTEGRATION) </span>updates the student record as active.</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">6</td><td style="height: 29.7969px;">SIS</td><td style="height: 29.7969px;">HOMEROOM</td><td style="height: 29.7969px;"><span style="background-color: rgb(194, 224, 244);">USER</span> creates student logins</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 169.734px;"><td style="height: 169.734px;">7</td><td style="height: 169.734px;">Word Press</td><td style="height: 169.734px;">  
</td><td style="height: 169.734px;"><span style="background-color: rgb(191, 237, 210);">INTEGRATION</span> - Update word press site with student logins so that they may be provided to the <span style="text-decoration: underline;">proctor</span> who provides them to the student.

Also make the logins known to the parent account in the wordpress site.

</td><td style="height: 169.734px;"></td><td style="height: 169.734px;"></td></tr><tr style="height: 80.1875px;"><td style="height: 80.1875px;">8</td><td style="height: 80.1875px;">SIS</td><td style="height: 80.1875px;">  
</td><td style="height: 80.1875px;"><span style="background-color: rgb(236, 202, 250);">AUTOMATION </span>- Auto-assign the first course that provides students directions on how to use Moodle, and have them complete their initial assessment.</td><td style="height: 80.1875px;">  
</td><td style="height: 80.1875px;">  
</td></tr></tbody></table>

### PART C - Assessment and Course Assignment

Part C intakes the student's initial academic assessment scores and allows the admin user to select the correct program of study based on the student's assessment scores.

<table border="1" id="bkmrk-sequence-application-1" style="border-collapse: collapse; width: 114.074%; height: 333.75px;"><colgroup><col style="width: 10.754%;"></col><col style="width: 12.1137%;"></col><col style="width: 12.979%;"></col><col style="width: 32.7565%;"></col><col style="width: 18.665%;"></col><col style="width: 12.7318%;"></col></colgroup><tbody><tr style="height: 46.5938px;"><td style="height: 46.5938px;">**Sequence**</td><td style="height: 46.5938px;">**Application**</td><td style="height: 46.5938px;">**Module**</td><td style="height: 46.5938px;">**Description**</td><td style="height: 46.5938px;">**TEST PLAN**</td><td style="height: 46.5938px;">**Known Issues**</td></tr><tr style="height: 96.9844px;"><td style="height: 96.9844px;">1</td><td style="height: 96.9844px;"><span style="color: rgb(224, 62, 45);">Moodle or other???</span></td><td style="height: 96.9844px;"><span style="color: rgb(224, 62, 45);">  
</span></td><td style="height: 96.9844px;"><span style="color: rgb(224, 62, 45);">Students use the Edwiser in Moodle from to self-enter their scores from IXL. Use the Edwiser activity. Or there may be another way to do this. Make the proctor do this??</span></td><td style="height: 96.9844px;"><span style="color: rgb(224, 62, 45);">  
</span></td><td style="height: 96.9844px;"><span style="color: rgb(224, 62, 45);">  
</span></td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">2</td><td style="height: 63.3906px;">SIS</td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;"><span style="background-color: rgb(194, 224, 244);">USER </span>- Admin reviews assessment data, makes determination on which program to assign.</td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;">  
</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">3</td><td style="height: 63.3906px;">SIS</td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;"><span style="background-color: rgb(236, 202, 250);">AUTOMATION</span> - Based on the assigned program, SIS <span style="color: rgb(224, 62, 45);">automatically creates the student's enrollments.</span></td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;">  
</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">4</td><td style="height: 63.3906px;">SIS</td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;"><span style="background-color: rgb(191, 237, 210);">INTEGRATION </span>- After review of enrollments, the admin triggers the enrollments in courses in Moodle</td><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;"> </td></tr></tbody></table>

### Student Intake UI

#### PART A - Applicant record to Student Record

<div drawio-diagram="139"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-03/drawing-5-1710024182.png" alt=""/></div>

#### PART B &amp; C - Enroll Student in Courses

<div drawio-diagram="166"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-03/drawing-5-1711819240.png" alt=""/></div>

#### PART C VIEW P - Assign program:

Show:

- Student Name, grade level, first student term name
- Assessment data history:

Select:

- Program of Study \[  *programs menue* \]

*based on the selected program, list template records below:*

<table border="1" id="bkmrk-term-1---grade-x-ter" style="border-collapse: collapse; width: 100%; height: 388.36px;"><colgroup><col style="width: 31.8912%;"></col><col style="width: 10.136%;"></col><col style="width: 46.3555%;"></col><col style="width: 11.6173%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">term 1 - grade x term x</td><td style="height: 29.7969px;">button</td><td style="height: 29.7969px;">*&lt;no student term found&gt;*</td><td>  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; padding-left: 40px;">template 1</td><td style="height: 29.7969px;">***<span style="color: rgb(53, 152, 219);">enroll&gt;</span>***</td><td style="height: 29.7969px;">*create enrollment record based on template*</td><td>*delete/edit*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; padding-left: 40px;">template 2</td><td style="height: 29.7969px;">***<span style="color: rgb(53, 152, 219);">enroll&gt;</span>***</td><td style="height: 29.7969px;">  
</td><td>  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; padding-left: 40px;">template 3..</td><td style="height: 29.7969px;">***<span style="color: rgb(53, 152, 219);">enroll&gt;</span>***</td><td style="height: 29.7969px;">  
</td><td>  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">term 2 grade x term x</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">student term 1</td><td>  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; padding-left: 40px;">template 1</td><td style="height: 29.7969px;">***<span style="color: rgb(53, 152, 219);">enroll&gt;</span>***</td><td style="height: 29.7969px;">  
</td><td>  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; padding-left: 40px;">template 2</td><td style="height: 29.7969px;">***<span style="color: rgb(53, 152, 219);">enroll&gt;</span>***</td><td style="height: 29.7969px;">  
</td><td>  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; padding-left: 40px;">template 3..</td><td style="height: 29.7969px;">***<span style="color: rgb(53, 152, 219);">enroll&gt;</span>***</td><td style="height: 29.7969px;">  
</td><td>  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">term 2 grade x term x</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">student term 2</td><td>  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; padding-left: 40px;">template 1</td><td style="height: 29.7969px;">***<span style="color: rgb(53, 152, 219);">enroll&gt;</span>***</td><td style="height: 29.7969px;"> </td><td>  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; padding-left: 40px;">template 2</td><td style="height: 29.7969px;">***<span style="color: rgb(53, 152, 219);">enroll&gt;</span>***</td><td style="height: 29.7969px;">  
</td><td>  
</td></tr><tr style="height: 30.7969px;"><td style="height: 30.7969px; padding-left: 40px;">template 3..</td><td style="height: 30.7969px;">***<span style="color: rgb(53, 152, 219);">enroll&gt;</span>***</td><td style="height: 30.7969px;">  
</td><td>  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td>  
</td></tr></tbody></table>

<span style="background-color: rgb(251, 238, 184);">**SAVE PROGRAM**</span>

- When the user changes the program, change the list on the left side.
- If the user makes enrollment records, then changes the program, always show all enrollment records made on the left side
- Allow the user to delete/edit the enrollment record.

#### PART B View M - Moodle Enrollment UI - per Student View

<div drawio-diagram="142"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-03/drawing-5-1710025871.png" alt=""/></div>

- User can click each M button to enroll the student in the courses in Moodle, or the user can enroll on in a batch process.

####  

#### PART B View M - Moodle Enrollment UI - All Students View

Show same as above but all student enrollments for current term

#### T - Enter Transcript -TBD

# Advancement



# Adjust Program of Study



# Student Close Out

# Homeroom

Home rooms are groups of students and teachers that form a private group in the same Moodle Instance.

# Homeroom Module Overview

### Relevant Topics

{{@126#bkmrk-the-studia-nova-busi}}

{{@126#bkmrk-virtual-learning-all}}

### Terminology

{{@185#bkmrk-a-cohort-is-a-group-}}

{{@90#bkmrk-sections-are-a-set-o}}

{{@185#bkmrk-sections-are-used-to}}

{{@90#bkmrk-in-summary%2C-enrollme}}

<span style="color: rgb(224, 62, 45);">Why is the text for Relevant Topics and Terminology showing up in that code when it is in editing mode? Not that it's ultimately a big deal.</span>

<span style="color: rgb(224, 62, 45);">From the definition, cohorts and groups can be easily confused. They seem to have the same definition. </span>

<span style="color: rgb(224, 62, 45);">Problem of teachers being able to see the record of students who aren't in their cohort can be changed manually right? If so, that should be mentioned.</span>



### The Homeroom

**Homerooms** are a group of students under the supervision of a proctor. Homerooms are also Studia Nova's B2B clients. The [Freedom Library Club](https://www.freedomlibrary.club/) (FLC) is the first homeroom client. [Nova Schools](https://novaschools.org/) is a second client.

An organization, club, or business may have multiple locations, but the client is provided a single recruitment website. Each physical location must identify at least one proctor to supervise the on-site students. Homerooms are the individual locations. the group of students under an identified proctor.

On the partner's enrollment site, prospective students complete an enrollment form. In that enrollment form, the submitter selects a location. This location in the enrollment is considered a **homeroom** in PEMS. When a club or organization adds new location, a new homeroom record must be added to the PEMS homeroom table.

*In summary, homerooms are locations where students gather under the supervision of a proctor. The proctor grades the assignments submitted only by their students.*

<span style="background-color: rgb(255, 255, 255); color: rgb(224, 62, 45);">I'm tracking that proctors can only be assigned to one homeroom, and can review the work of students in their group. Teachers still have more administrative power, and proctors in the definition sound like a version of a TA; helping take load off of teacher.</span>

### Proctors

Where teachers are the qualified and certificated individuals that overlook many virtual students, PEMS allows **proctors** to supervise students and review their work in Moodle, helping to keep students on track. Proctors are not allowed any access to the SIS, but they are provided limited access to Moodle, and in this way, only see the work of their own group of students. Proctors may be volunteers working in a tutoring club setting, or may simple be a home school parent managing their own student's progress. A homeroom can have multiple proctors, but a proctors may only be assigned to one homeroom.

*In summary, a proctor should only grade the assignments of their own students. A proctor does not required teacher certifications.*

### Groups

The Moodle Groups function is the only option to provide the capability to block teachers from seeing students that do not belong to them. Therefore, when the SIS enrolls a student in the Moodle Course, the SIS must have all the information required to create the Moodle Group at the course level, then add that student to the group.

To accomplish this requirement, the SIS has a groups table that mirrors the Moodle Groups. A Moodle course has multiple groups (one group for each homeroom). When a student is enrolled in the course, the student is assign to the group that corresponds to the student's homeroom.

### Data Relationships

<div drawio-diagram="173"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-03/drawing-5-1711915910.png" alt=""/></div>

<span style="color: rgb(224, 62, 45);">*Note: above diagram shows one to many for proctors to Home rooms - this should be many to many.*</span>

The organization is provided a Word Press recruitment website, which allows students to enroll on their branded website. The website may have multiple locations. Each location from all the recruitment websites correspond to one homeroom record.

For every homeroom record there is a corresponding Moodle cohort. A Moodle cohorts do not limit proctors from seeing other student, but Moodle does provide cohort-level reporting, and so reporting for proctors is easier with cohorts.

<span style="color: rgb(224, 62, 45);">^Confusing sentence about Moodle cohorts not limiting proctors from seeing other students. Other students from different groups, cohorts?</span>

Each homeroom must have at least one Proctor. A homeroom is allowed multiple proctors, but a proctor may only be assigned to one homeroom.

Students are assigned to only one homeroom, there can be multiple students in a homeroom.

Only the <span style="text-decoration: underline;">Moodle Groups</span> feature is able to limit which students a proctor can review. Groups must be defined in each and every course. The SIS Group table directly corresponds to Moodle Groups.

For example, a homeroom name might be FLC-Placerville, for a location run by the FLC organization. If there are 40 curriculum records, there will be 40 SIS Group records with the name of FLC-Placerville, but each SIS group record is linked to a unique curriculum record. While the groups and cohorts have the exact same name, they are very different types of records.

<span style="color: rgb(224, 62, 45);">Reading up to this point, group vs cohort is still a little confusing for reader.</span>

The SIS creates an enrollment record for each Moodle Course a student takes. With the implementation of the Homeroom Module, each enrollment record has a SIS group record identified. When that student is enrolled in the Moodle course, the enrollment record communicates to Moodle which group to put the student in.

### Homeroom Module Workflow

When a new client is on-boarded, homeroom records are created for their launch locations. When they add a location, the client submits a form to the SIS, once approved, a new homeroom record is created.

As the client operates, the client adds and deletes proctors. The client submits a form to add a proctor and when approved, the SIS adds the proctor to the proctor table.

When new students are enrolled into the school, their student record is linked to the homeroom record that is specified in their enrollment form.

When students are assigned their classes, PEMS creates enrollment records in the SIS, one enrollment record for each class they take. The enrollment record specify the curriculum (Moodle Course) and is associated to the student term, which is linked to only one student.

When it is time to enroll students in their Moodle courses, the administrator triggers their enrollment based on their enrollment records. The enrollment record includes the name of the SIS Group, and so the student is assigned to the correct group in Moodle in the correct course.

<span style="color: rgb(224, 62, 45);">So students in the same virtual school who are taking different classes can have the same teacher? The students in the same school, but taking different curriculums to fulfill the same requirement would be in different groups but the same cohort?</span>

### Action Items JAN 2024

<p class="callout danger">1-MVP | HOMEROOM | Move the 'define groups' table from the school module to the Homeroom module</p>

# Homeroom and Proctor Tables

### Homeroom Fields

Homeroom Name - the name of the location.

Website code - name that matches how the location is displayed in the partner website.

Homeroom code - an abbreviation for the site that is used to match to Moodle **Cohort ID.**

CRM Client ID - client ID uniquely identifies the organization that operates the homerooms in the CRM.

Enrollment website - the link to the provided enrollment site.

### Proctor Fields

CRM Contact ID - the unique ID record in the CRM for the Proctor.

Contact detail: first. middle, last name, email address, physical address, cell phone number from CRM

Select homeroom - only one may be selected.

### CRM Workflow

When a new contract is signed in CRM, an associated homeroom record is created for the client. The client ID is tracked in the homeroom record. As a clients adds or deletes locations contracts are updated and homeroom records are correspondingly updated.

In CRM, proctors are the client's employees, or contacts that are associated to the organizations. The client completes a form on their enrollment website to add a proctor. Once submitted the form creates/updates the CRM. The new contact record in CRM triggers the creation of a proctor record in SIS.

### Action Items JAN 2024

<p class="callout danger">1-MVP | HOMEROOM | Proctor and Homeroom tables do not exist yet, make tables in the homeroom module.</p>

# Groups Table

**[Groups Table](https://cs.studianova.org/admin/groups)**

### Groups Overview

PEMS must provde a means to limit a proctor's access to view other student work in Moodle. In Moodle, this feature in only available using Moodle Groups. Moodle Groups allow teachers (proctors) to see only their assigned students. A Moodle Group needs to be created for each course. Then the students and the teacher are assigned to that group during the enrollment process. If properly implement, a proctor will only see work from students in the same group as them in that particular course.

Using the Moodle interface, this is a tedious and error-prone process so this function will be driven by the SIS enrollment workflow.

In a virtual school, an unlimited number of students may take any online course at anytime. However, the teacher of record is still responsible for grade student work and assign final grades. Too many students in a course can overwhelm any online teacher, especially as some organizations have a requirement for the student to have virtual, synchronous lessons or for the teacher to hold office hours. Group management is used to track and limit the number of students a teacher-of-record must look after.

### Data Relationships

<div drawio-diagram="174"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-03/drawing-5-1711915976.png" alt=""/></div>

Each curriculum record will be associated to multiple groups, as many groups as locations in operation. A location will have multiple student grade levels, any combination of K through 12 students, so the groups are *not restricted* to any specific grade level.

The groups are related to the homeroom. A group can have only one homeroom.

Each student enrollment records is related to one SIS Group record. Note there is no direct relationship between students, proctors, and Teachers, the relationship is created only through the SIS group record.

<span style="background-color: rgb(251, 238, 184);">As a location (Homeroom) is allowed multiple proctors, multiple proctors need to be associated to the group. There is a many to many relationship between proctors and SIS groups, because multiple proctors review multiple courses.</span>

The proctor does not fulfill the regulatory requirements of the teacher of record. There can be only one teacher of record for any class a student takes, so there is only one teacher of record for a group. The teacher of record may be related to multiple groups (for other classes the teacher teaches). The teacher of record is not related to the curriculum record, the teacher is only related to the SIS group record. In relating the teacher to the group record, SIS can better manage the reporting on which specific students took the course under what teacher.

<span style="color: rgb(224, 62, 45);">*The number of SIS Group records equals the number of (active) Curriculum records times the number of homerooms (locations.)*</span>

### Fields

**Group Name** - Concatenate the Homeroom and Moodle Course ID.

**Capacity** - the maximum number of students allowed in the group, default to 40.

#### Action Items JAN 2024

<p class="callout danger">1-MVP | HOMEROOM | Add Many to Many relationship to Proctor to current groups table.</p>

<p class="callout danger">1-MVP | HOMEROOM | Add Select one teacher of record in the group record</p>

<p class="callout danger">1-MVP | HOMEROOM | Add Select one Homeroom in the group- record</p>

<p class="callout danger">1-MVP | HOMEROOM | Add the ability to select one group in the enrollments record.</p>

<p class="callout danger">1-MVP | HOMEROOM | Add the field to indicate the Teacher of Record Authorization Status - options are "clear, unauthorized, expiration risk, temporary authorization" (same as the current sections table which will be deprecated)</p>

<p class="callout danger">1-MVP | HOMEROOM | Deprecate the Sections table in the teacher module, its function is replaced by this group table.</p>

# Applicants Table

tbd

<p class="callout danger">1-MVP | HOMEROOM | Add the enrollment data from the word press site to a 'Applicants table' in the homeroom module. </p>

# Suite CRM Integration

Suite CRM is used primary to transmit the necessary documentation required to process a student's enrollment. The application is also used to track new 'homeroom' customers, or new businesses that want to open classrooms. Because we want to market the PEMS as a stand alone product, see the [Product Marketing Strategy](https://bsa.lynops.com/books/personal-education-management-system/page/platform-strategy). This integration must be structured as optional.

The approach is used to map the data architecture between PEMS and Suite CRM.

<div drawio-diagram="136"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-03/drawing-5-1710021340.png" alt=""/></div>

#### Homeroom (classroom location)

PEMS can enter the homeroom directly when the Suite CRM is not used, but if Suite CRM is implemented, then the homeroom comes from Suite into PEMS.

***The master list of homerooms is managed in PEMS. However, the homeroom record first enters the software universe through Suite CRM because a homeroom is a potential client of the School.***

The homeroom is an opportunity record with type = homeroom. The opportunity record represents a classroom location linked to an account record with type = facility. A facility can run multiple homerooms, or multiple opportunity records.

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/azBimage.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/azBimage.png)

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/nRhimage.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/nRhimage.png)

***The homeroom record is created in PEMS when an opportunity record with type = "homeroom" is closed.***

#### Proctor

There is little need to have the proctors in the Suite CRM. Proctors are employees of the facilities. However a proctor can be an a one-person operation that is both the client and the employee, operating as a small business.

Proctors need to be in PEMS because they must be added to the Moodle Groups in order to view only their assigned students. Like homerooms, proctors begin as records in Suite CRM, if a CRM is being used.

However, a proctor is an account record with contact PEMS type = Proctor.

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/GQUimage.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/GQUimage.png)

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/AD5image.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/AD5image.png)

A proctor is a contact record that should be linked to the homeroom opportunity record and the facility account record. When the opportunity is closed, the proctor record should be made in PEMS.

When a new proctor is added to the closed opportunity record for the homeroom, the proctor is added to PEMS.

If the proctor contact record which is linked to the closed opportunity record for the homeroom is deleted, de-linked, in Suite CRM, the status of the proctor is updated in PEMS. (status fields are TBD).

#### Student (Enrollment)

PEMS sends the information from an ***enrolled student*** to Suite CRM. Student leads go into PEMS from the website, but untill the student is accepted, there is to transmission of information to Suite CRM.

Opportunities records in Suite CRM represent student enrollments in PEMS. They are created only <span style="text-decoration: underline;">after</span> the enrollment form submitted on the website.

Student Name &gt; Opportunity Name

The opportunity type for a student enrollment being entered from PEMS is "Enrollment." The opportunity TYPE field and options are shown below:

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/dSRimage.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/dSRimage.png)

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/image.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/image.png)

The remaining terms is imported in to Suite CRM so that the total revenue from the enrollment may be calculated. The customer field "Remaining Terms" has been created in Suite CRM.

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/LBkimage.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/LBkimage.png)

Parents are contacts in SuiteCRM, so when a new student is entered from PEMS into Suite, the primary parent in only created if a contact record is not found.


#### Other Schools (Previous School)

In order to create an esign pdf from SuiteCRM, the previous school must also be an account record in Suite CRM. A contract record is created that is linked to the previous school account, the parent contact, and the student opportunity. From this contract, the data in the records request can be entered into the merge pdf.

The list of Previous Schools ([Other Schools](https://cs.studianova.org/admin/otherschools)) in PEMS must be synchronized with the set of Account records that are type of registrars.

PEMS is to be sold as an add-on module to Moodle, and it should not require a CRM to function. Therefore, the list of previous schools must be self-contained in PEMS. When the student is accepted in PEMS, the user must select the correct name from the other schools table based on the text field completed in the enrollment form. The other school record must be entered in the enrollment process in PEMS before the student may be accepted.

When the SuiteCRM integration point is implemented, when every and opportunity record is created for a new student record, then the new other school must also be created as an account record with type = "Registrar". If the record exists already in Suite CRM, then no new other school record will be created.

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/nRhimage.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/nRhimage.png)

The following fields are in the PEMS for other schools and should be mapped into the respective SuiteCRM fields.

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/kZUimage.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/kZUimage.png)

The Name is mapped to the Suite CRM Account Name.

The Registrar name is mapped to the Suite CRM custom text field "Registrar Name"

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-03/scaled-1680-/gzGimage.png)](https://bsa.lynops.com/uploads/images/gallery/2024-03/gzGimage.png)

The address is mapped to SuiteCRM Shipping address.

The email is added as the primary email (email1).

# School Module

Building your school to reflect your mission and vision

# Schools

### Definitions

{{@90#bkmrk-schools-refer-to-leg}}

{{@90#bkmrk-the-student%27s-year-i}}

### Schools Table

A "School" is a span of grade levels. The schools table is a list of the names of the various jurisdictional schools in a region. There are no additional fields in this table as the other data entities use this primarily as a reference.

To customize the PEMS, the administrator edits the list of schools. Out of the Box, the solution comes with Elementary, Middle, and High School defined.

# Term Labels

**[Term Labels](https://cs.studianova.org/admin/termlabels)**

### Relevant Definitions

{{@90#bkmrk-the-names-of-the-ter}}

### Term Label Table

The term label table contains a record for each term the school operates. If a school operates two terms, the Fall and Spring Semester, then the Term Label table contains only two records. To operate a summer term, the school can add another term label record.

If a school operates on a quarter system, the administrator will create 4 term label records. There is no configuration of 'semester system' or 'quarter system', there is only the number of records in the term label table.

Term label records are generalized without a specific start or end date, they linked to every actual term record to give the term its name and configuration parameters.

### Fields

There is no automation for entering Term label records, the user manually sets all data.

The name field is the general name for the term, usually aligned with the season, such as Fall, Spring, Winter, etc.

Sometimes a letter is also used to refer to the sequence of terms in a school year, like semester A or B, and C if on the quarter system.

The sequence field specifies the order of the terms, Fall would be 1, Spring would be 2, and so on.

The term may be optional or required, for example summer term is usually an optional term while Fall and Spring are mandatory.

An active/deactivated field is provided so that the administrator does not have to delete terms to remove them from the planning processes.

Start month and end month are fields the user specifies to indicate the month the term <span style="text-decoration: underline;">usually </span>starts/ends in. Start day and end day are the fields the user specified to indicate the day the term <span style="text-decoration: underline;">usually </span>starts/ends in.

### Connection to other Modules

The [Calendar Module](https://bsa.lynops.com/books/personal-education-management-system/chapter/calendar-module "Calendar Module") calculates the number of school days in a term. The Excluded days field allows the user to specify which regular days of the week should not be counted as a school day.

The [Programs of Study Function](https://bsa.lynops.com/books/personal-education-management-system/page/programs-of-study-function "Programs of Study Function") uses information from the term label table to determine in which student term the student should be enrolled in the planned classes.

The Flag field notes if the term starts an academic year or ends and academic year.

End in same year - this radio button field is used to indicate if the term runs over the New Year, for example the Fall term may start in September of 2020 but end in January 2021.

The [Assessment Function](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-function "Assessment Function") relates student assessment results to the actual test date. If the actual test date is within a term, then then the function relates the assessment result to that term.

The Assessment Window field allows the administrator to specific a window of time that would mark a type of assessment as 'beginning of term' or 'end of term.' For example if the window is 2 weeks, then the assessment dates that fall within a two-week window of the actual term start date are marked 'beginning of term' results.

### Action Items JAN 2024

<p class="callout danger">|4-MVP | ADVANCEMENT | Excluded days multi-select (for recurring weekend days) does not allow the user to select options that are not listed one after the other. User must be able to make any selection of combination of days.</p>

# Grade Levels

**[Grade Levels](https://cs.studianova.org/admin/gradelevels)**

### Relevant Definitions

{{@90#bkmrk-the-student%27s-year-i}}

{{@90#bkmrk-a-grade-span-covers-}}

### Grade Level Table and Fields

Grade levels are specified by creating records for the grade levels the school teaches. The records have a name, which could be "sixth" or "6th" or any user-entered name. The user must also assign a grade level number, such as 6 for the 6th grade, The records are sequenced to know which grade comes before which so that the name does not have to reflect the order of the grade levels.

The grade span of a grade level is determined from the grade span table, which indicates the start and end grade of the span. This is completed through automation.

### Action Items JAN 2024

<p class="callout danger">3-MVP | INTAKE | Confirm that the Grade Span Field in the Grade level table is being done by automation.</p>

# Grade Spans

### Relevant definitions

{{@90#bkmrk-a-grade-span-covers-}}

{{@90#bkmrk-a-student-term-recor}}

{{@90#bkmrk-schools-refer-to-leg}}

### Grade Span Table

The grade span is used as a planning horizon for students. PEMS aims to automate enrollment in courses by assignment of a [Program of Study](https://bsa.lynops.com/books/teacher-qualifications/page/program-of-study "Program of Study"). A program of study can not exceed the student's grade span.

Based on the student's grade level, the student is associated with only one grade span. Based on the grade span, PEMS creates past, current, and future school terms. PEMS does not create all future school terms for the student until graduation, but only until the end of the assigned grade span. These future term records are required in order to create future enrollment records for future classes.

Grade spans should not run over the end of a 'school' If an elementary school is defined as K6, and middle school defined as 6-8, then a grade span should not run from grade 4 to grade 6. Grade spans are subgroups of schools, or may be the exact same length of time as a school.

### Fields

Grade Span name - any name the user would like to call the grade span.

Start grade and end grade are entered by the user. Based on the term label records, the user will specific the number of terms in the span. Only required terms should be entered in this field as other parts of the PEMS expects this value to exclude optional terms.

The school is selected as a drop down menu based on the records defined in the school table. There can be multiple grade spans per school, but there can only be one school per grade span.

# Marks System

**[Mark System](https://cs.studianova.org/admin/marksystem)**

### Relevant Definitions

{{@90#bkmrk-in-the-us%2C-grades-ar}}

{{@90#bkmrk-because-the-us-uses-}}

{{@90#bkmrk-if-students-take-mor}}


### Marks System Table

The marks system table is used to configure the schools grading system. A record is entered for each type of mark (grade) that may be given to a student. If student are received and A-, the A- must be defined as well as the A. For each letter grade, the user must specify the grade points to be assigned for the letter grade.

If the school is not using letter grades and is on the 1-10 system, then 10 records must be defined. If the school is using a numerical system that include 9.5 for example, then a record of 9.5 must be created.

### Fields

Letter Mark - letters grade like those used in the US system

Grade Points - numerical grades used, corresponding to letter grades if US or just numbers if international.

Weighted Grade Points - if the class is advanced and a letter grade assigned, the weighted grade points would be the additional points allowed for the advanced class, which is almost always plus 1.

Alternate Grade Points - grade points in the event a different grading system is used

Alternate Weighted Grade Points - alternate weighting if a different grade system is used.

### Action Items JAN 2024

<p class="callout danger">| CLEANUP | Spelling error "Alternet" is spelled Alternate</p>

### Next Version

<p class="callout warning">Add an association of the marks system records to the school, so that marks systems may be defined for each school</p>

# Other Schools - TBD

In PEMS, the term "schools" refers to the general grade levels like elementary school, middle school, and high school. "Other Schools" are the schools where students transferred in from or transfers to. There is a need to maintain the contact information to request transcripts or to forward transcripts and other student records.

A key part of the student intake process is to email an document that has been electronically signed by the student's legal guardian to the other school's registrar email address. Students are not dis-enrolled from their previous school unless the current school sends this request.

### Fields

The user enters the official school name. A school has a 'registrar' which is an individual person who is identified as responsible from student records. The email of the registrar will be where the student records request is sent. The physical address is where the student records are forward to.

### Action Items JAN 2023 - update actions after CRM

<p class="callout danger">When the enrollment form is received from the external website to the SIS dashboard, the form contains a typed-in name for the previous school. When the enrollment form is approved, the user should link the student to the other schools record as the student's previous school. If the record in not in the other schools table, then the user should add the record during the student's intake.</p>

<p class="callout danger">The workflow to automate emailing the electronically signed document needs to be addressed. The third party website can collect a esigned form, but the specific school name and registrar email is maintained in the SIS. When the previsous school is determined from the typed-in other school name, the form from the third party website needs to be sent to the associated registrar email from Studia Nova.</p>

<p class="callout danger">[See Page 4 of Enrollment Workflow Specification](https://docs.google.com/presentation/d/1d4u5Vw2SQZkoSjA0SdqseolZS47BvDYB788QTwXT548/edit?usp=sharing)</p>

# Calendar Module



# Academic Years Table

**[Academic Years](https://cs.studianova.org/admin/academicyears)**

### Calendar Module Data Relationship

<div drawio-diagram="41"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1705461466.png" alt=""/></div>

### Academic Years Table

An Academic Year record represents a single year the school is in operation. It has a calendar start date and end date. There is one record for each year in operation. The [Programs of Study](https://bsa.lynops.com/link/89#bkmrk-page-title) module requires sufficient academic year records to plan out the courses students will take until they graduate.

When a student transfers into Studia Nova, the student's previous records need to be [articulated](https://bsa.lynops.com/link/176#bkmrk-page-title), which means the process that one school goes through to award credit to the student for taking classes at another school. Therefore, there needs to be sufficient past academic years so that any new student's previous classes can be entered in the year they took them.

<p class="callout info">Future academic years are required.</p>

<p class="callout info">Past academic years are required.</p>

Academic Years have a status field with options of past, future, or current. Also, based on the total number of vacations days, the academic year record calculates the total days in the academic year. This is important since there are many regulations that specify the total number of days in an academic year.

### Fields

- The user enters year name, start year, end year, start date, end date, and sequence.
- PEMS calculates school days, vacation days.
- PEMS updates the status of the year based on the calendar.


### Action Items JAN 2024

<p class="callout danger">4-MVP | ADVANCEMENT | Automatically create a new academic year record on the promotion date (school configuration variable)</p>

<p class="callout danger">4-MVP | ADVANCEMENT | Automatically update current and next academic year status.</p>

{{@99#bkmrk-calendar-not-started}}

# Terms Table

**[Terms Table](https://cs.studianova.org/admin/terms)**

### Relevent Topics

{{@90#bkmrk-a-term-is-the-divisi}}

{{@90#bkmrk-the-names-of-the-ter}}

### School Terms (Terms)

Academic terms may be semester, quarters, or any division that the school determines to break up a grading period of the academic year. A record is required for every term the school operates, and for past academic years in order to properly enter the a transfer student's transcripts.

Every class a student takes in taken is a specific academic term. Academic terms are related to the academic years, so they can not be created if there is no academic year in the system.

<span style="color: rgb(224, 62, 45);">In manual operation, The user links the term record to an academic year record by selecting the record. PEMS will implement automation so that school term records are auto-created.</span>


### School Terms Actual Start/End Dates

The user specifies a start date and end date for every academic year. In the **term label** record, the user specifies the general day and month that each term is starts and ends. Based on this information term school records are created. After these school term records are created, the user can adjust the specific days of each school term. Future records that have not been updated are considered estimated start days.

### Data Relationships

<div drawio-diagram="111"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1706383353.png" alt=""/></div>

The term record is related to a term label record. A term label record stores the name of the term, fall, spring and the attributes common to all terms.


### Fields

**Start year**, **end year** are the same as the academic year the term is related to, auto-entered by PEMS.

The **start date** and **end date** mark the actual dates the term starts and end. When new term records are automatically created The start date of the first term of the year is the same as the start date of the related academic year.

Using the term label record and the year of the term start date, the PEMS concatenates the **Term name**, "Fall 2020"

The **ordinate** is user-entered and is the order the terms take place in aggregate.

**Calendar days** and **school days** are calculated based on the vacation day records.

**Flag** is inherited from the term label record and is needed to help PEMS determine if the term is the first term of the year or the last term of the year. This is used in other algorithms in PEMS.

### Action items JAN 2024

<p class="callout danger">4-MVP | ADVANCEMENT| Auto-**create term records** every time a new academic year record is created per 1.3 Automatically Create School Term Records </p>

{{@99#bkmrk-calendar-functions-n-1}}

# Vacation Days Table

**[Vacation Days](https://cs.studianova.org/admin/vacationdays)**

A Vacation Day record is made for each and every day that school is not in session during any term the school is in operation. Vacation days are not events with a start date and end date, they are specific days. For example, the Christmas holiday may be one school break, but there may be up to ten regular school days not in session, so this required ten records to be entered.

A vacation day record is created for all reasons that school is not in session, having no bearing on why.

Week ends of days that school is not normally in session do not need to be entered as vacation days.

### Fields

**Day** - user enters the date of the vacation day.

**Status** - user selects activated or deactivated. This status allows users to turn off vacation days in the planning process with out deleting the information.

**Occasion** - user provides a description of why the day is off, such as thanks giving, etc.

**Term** - the vacation day to the term in which the vacation takes place.

### Action Items JAN 2024

<p class="callout danger">4-MVP | ADVANCEMENT | First, Victoria to enter vacation day records, there is no data in the system to perform calculations.</p>

<p class="callout danger">4-MVP | ADVANCEMENT | Related the school term to the vacation day record automatically based on its date and term dates.</p>

<p class="callout danger">4-MVP | ADVANCEMENT | Status - set default to 'activated'</p>

### Next Version

<p class="callout warning">Occasion - change from text enter field to drop down list so that days associated with an occasion may be grouped.</p>

<p class="callout warning">Upload a spreadsheet of Federal Holidays and/or update from an online database.</p>

<p class="callout warning">Create a calendar view like outlook to create vacation day records.</p>

# Programs of Study Module



# Program of Study Concept

The image below shows a program of study, typically laid out in a Word Table. This program of study plans out the classes a student needs to take to earn a high school diploma and be prepared to take science and engineering classes in College.

In the left, grey-colored column are the subjects. For each subject, a number of units of course work are required. Units are also called credits and are assigned to each course. Sometimes these requirements are just describes as "years" of a subject. Across the header row are the years of study. High School is a 4-year degree, starting with 9th grade. Each year is broken in to two terms, or grading periods. The specific classes the student must take are shown in the rows as green or blue blocks. This table is able to show in which term the class must be taken, as many classes have a sequence. The planning process aims to distribute the work load rather evenly over the multiple years.

Above each row where the classes are shown is the text description of the requirements. For example, the "a-g" requirement is 4 years of English and the "NCAA" requirement is 4 years of English. "a-g" is a short way to describe college entrance requirements, and NCAA is a short way to describe college sports league requirements. In the US there are multiple organizations that establish high school graduation requirements that are above and beyond what is established by the jurisdiction. Depending on a student's future college or career plan, their high school degree must be able to meet their specific needs. One student may not need to meet any of theses requirements if they are not planning to go to college, another may need to only meet "a-g" if they are planning to go to college but not play sports, another may need to also meet NCAA if they want to go to college and play sports.

The complexity of meeting these requirements for each individual student falls to the school counselors. School counselors meet with students individually, understand the objectives, and help them plan their classes. Then the student selects their courses for the term. The counselor must then monitor compliance, ensuring students are completing to the plan. This is very labor intensive. PEMS is designed to automate these processes and reduce the need for the school counselors.

<span id="bkmrk--1" style="font-weight: normal;"><span style="font-size: 11pt; font-family: Arial, sans-serif; color: rgb(0, 0, 0); background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; white-space-collapse: preserve;"><span style="border-width: initial; border-style: none; display: inline-block; overflow: hidden; width: 655px; height: 747px;">![](https://lh7-us.googleusercontent.com/NUVULiDFq2_6nvVZulN5BfHPm8nRH_xmKZ2QKsM2vHyK9Sw1ShZHF8Oyg72I5bMgmcuAb8ZmTPfz2pGD-437pnkVMeYiqTmFZgvbkM0sZuXQSQokTEc77S5zu3TU-CPKrlaZ7znsz6K7c8AV34puJQ8)</span></span></span>

<span style="background-color: transparent; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal;"><span style="border-width: initial; border-style: none; display: inline-block; overflow: hidden; width: 655px; height: 747px;"><span style="color: #000000; font-family: Arial, sans-serif;"><span style="font-size: 11pt; white-space-collapse: preserve;">At the bottom of the image you see a table showing the total years in each subject area. The </span><span style="font-size: 14.6667px; white-space-collapse: preserve;">various</span><span style="font-size: 11pt; white-space-collapse: preserve;"> organization requirements are totaled. If a student completes this course plan, then the student will have complied with the various organization's requirements.</span></span></span></span>

# PEMS Programs Module Overview

### Relevant Definitions 

{{@90#bkmrk-this-is-the-list-of-}}

{{@90#bkmrk-curriculum-generall-}}

{{@90#bkmrk-subjects-are-familie}}

{{@90#bkmrk-a-transcript-is-a-re}}

{{@90#bkmrk-the-plans-are-someti}}

{{@90#bkmrk-the-names-of-the-ter}}

{{@90#bkmrk-in-summary%2C-enrollme}}


### Specific Definitions for the Programs of Study Module

{{@90#bkmrk-templates-are-record}}

{{@90#bkmrk-subject-requirements-1}}

{{@90#bkmrk-not-only-do-the-regu}}

### Data Relationships

<div drawio-diagram="67"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1705886680.png" alt=""/></div>

The diagram above shows the relationships for just one plan. A plan will have multiple subject requirements, the number of classes that must be taken in a subject area.

#### **Templates contain information needed for auto-enrollment**

The user creates a Plan record, then adds template records to the plan. The template records contains all the information needed to auto-enroll the student in the correct Moodle Course at the right time while ensuring the student's transcript reflects the correct classes. Each template record is also related to one term label record. This information is used to know in which term of the academic year the student should be enrolled in the Moodle Course, and in which term the corresponding class appears on the student's transcript.

- A template record relates the class that appears on the transcript, "English 9A" to the Curriculum list (Moodle Course), "American Literature".
- The class record contains the number of units required for that class, and so the transcript record 'knows' how many units the class has.
- The class is related to one subject, so the template 'knows' the subject of the class.
- The template record is related to one term label record, so the template knows in which term the student should take the class.

#### **Templates contain information needed to determine compliance with the plan**

Each template is related to one just class, which is related to just one subject. The template is related to one subject requirement record. The units associated with the set of template records all with the same subject requirement tell us how many of the required units are in the plan. PEMS determines if there are enough classes to meet the requirements of the plan.

Template records create a 'model enrollment' profile for a student according to a specific plan. The student chooses the plan, the model enrollment records (templates) are used to create the student's actual enrollment records.

# Programs Table

**[Programs Table](https://cs.studianova.org/admin/subjects)**

The Program of Study Table contains the plan records. There can be any number of plans created in PEMS, however none of the plans allow any selection of classes. For example, to enter University of California, students need to follow the "a-g" plan, with a specific list of classes that must be taken. The University does not care if the foreign language requirement is met with a course of Spanish or French. Two plans must be create, one that enrolls the student in the Spanish option,, and one that enrolls the student in the French option, with all other classes the same.

Plans can not be associated with any specific academic year or term. So the plan specified what grade year / grade level the student begins the plan, for example, the plan begins in 9th grade and is completed in the 12th grade. Each plan must be linked to only one grade span, and the plan can not exceed the grade span.

When defining the grade spans, schools must consider the maximum duration of a plan. For high school, many plans are 4-year plans as the student has all 4 years to meet the requirements. So the grade span for high school must be 4 years.

Plans are tagged with the same compliance tags as the individual curriculum records. If all approved courses are taken the plan should meet all compliance requirements.

### Data Relationships

<div drawio-diagram="58"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1705869845.png" alt=""/></div>

### Fields

**Build status** shows whether the administrator has completed building and quality controlling the plan. The administrator will want to ensure all courses are approved and completed in the LMS before marking the plan published. The plan should not be available for selection or assignment is not published.

**Start and end grade** - numeric values of the grade levels where the plan begins and ends. For example a high school plan begins at grade 9 and ends at grade 12.

**Total Terms** - the total terms under the plan, which would default to the total number of required school terms. The administrator can edit the total terms to include optional summer terms. Once summer terms are added to the plan, they are no longer optional for the student in order to be compliant with the plan.

**Max Classes** - the total number of classes as student may take in this plan. Some schools limit workload. If to many classes are assigned to the plan, the user interface is meant to reflect the maximum has been reached.

The **Units Planned** is the total sum of units so far added to the plan via template records (units are in the class associated with the template record).

The **Units Required** is the units the plan requires. Plans may exceed the number of units required by the various regulatory agencies, but the units planned is less than the units required, the user interfaces should alert the administrator.

### Action Items JAN 2024

<p class="callout danger">3-MVP | INTAKE | No logic to filter for only published plans has been specified in any of the user interfaces.</p>

<p class="callout danger">NV | PLAN UI | Max classes is not operational in any user interface.</p>

<p class="callout danger">NV | PLAN UI | Units planned and units required is not operational .</p>

# Subject and Subject Requirements Tables

**[Subjects](https://cs.studianova.org/admin/subjects) | [Subject Requirements](https://cs.studianova.org/admin/subjectrequirement)**

### Relevant Definitions

{{@90#bkmrk-subjects-are-familie}}

{{@182#bkmrk-subject-requirements-1}}

{{@90#bkmrk-templates-are-record}}

### Data Relationships

<div drawio-diagram="114"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1706546770.png" alt=""/></div>

Note that subjects are not associated directly with plans. The subject requirement is the table that links the various subject to the plan and also specifies the number of units in that subject the plan requires.

The template records are linked to the subject requirements when the subject requirement is selected in the template record. The number of units in the template's associated class record contributes to the total required in the subject requirement record. It will take multiple templates to complete a subject requirement.

### Subjects Table

The subjects table has only the name field. The administrator can enter unlimited subjects. However, a class record may only be linked to one subject record. Curriculum records are not linked to subject records. A curriculum may be used to fulfill different subjects depending on the plan.

#### **Use Case | Environmental Science - one class may fulfill two different subject requirements**

For example, Environmental Science may be frequently used to meet the Biological Science requirement or the Physical Science requirement, but not both. There would be two class records. One called Environmental Science that is linked to the subject of biology and another that is linked to the subject of physical science. However there is just one Moodle course, so there is just one curriculum record. The curriculum therefore does not specify a subject, and is not related to subject records.

### Subject Requirements Table

The subjects requirement table specifies how many units must be completed under the plan in a particular subject area. Subject requirements are related to only one plan. A Template record fulfills a subject requirement, so it may be related to only one plan.

<span style="color: rgb(224, 62, 45);">*Note: The use case where a template was able to fulfill multiple subject requirements has been deprecated as it is marginal and there are other ways to address this situation.*</span>

<span style="color: rgb(224, 62, 45);">*See [Templates Table](https://bsa.lynops.com/books/personal-education-management-system/page/templates-table "Templates Table"):*</span>

<span style="color: rgb(224, 62, 45);">*{{@172#bkmrk-a-student-may-take-a}}*</span>

**Units required** - the number of units required for the associated subject under the associated plan.

**Name** - concatenation of subject, plan, and unit information.

**Units Planned** - the number of units in the plan that meet this subject requirement.

**Transcript name** - the subject requirements are listed in the transcript to create the block of information discussed in the [Programs of Study Function](https://bsa.lynops.com/books/personal-education-management-system/page/programs-of-study-function "Programs of Study Function"). The transcript name is how the subject requirement should appear on the document, as the concatenation name is not convenient for printing.

### Action Items JAN 2024

<p class="callout danger">1-MVP | TRANSCRIPT| Victoria to manually update transcript names in all data. (Add automation that upon new record, auto-enter data for transcript names from subject name, allow user to manually update - low priority). </p>

<p class="callout danger">1-MVP | TRANSCRIPT | REDUNDANT | The Subject Requirement CURRENTLY allows multi-select from the template table. ONLY ONE template should be linked to ONLY ONE subject requirement. REMOVE multi-select and allow only one record to be selected.</p>

<p class="callout danger">1-MVP | TRANSCRIPT| After updating the data relationship to single select, for each subject requirement record, find all related template records. Sum the Units field from the related class record in the template records and enter into the subject requirement Units planned field. (*Note, this will not directly affect the transcript since the transcript uses only the units required field from the subject requirement, but this in includes as part of the module.)*</p>

*MEANS TEMPLATE UNIT = SUBJECT REQ. UNIT PLAN? DONE, WHEN SUBJECT REQ IS SELECT IT WILL FETCH THAT UNIT TO UNIT PLAN(if not null) OF TEMPLATE.*

# Classes Table

**[Class List](https://cs.studianova.org/admin/classlist)**

### Relevant Definitions

{{@90#bkmrk-subjects-are-familie}}

{{@90#bkmrk-a-grade-span-covers-}}

{{@90#bkmrk-in-summary%2C-enrollme}}

{{@90#bkmrk-curriculum-generall-}}

{{@90#bkmrk-this-is-the-list-of-}}


### The Class List

The class list is a set of records that represent all the 'transcript' classes a student will take at the school. The names of the classes are the exact names that appear on the student's transcript.

### Data Relationships

<div drawio-diagram="109"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1706285801.png" alt=""/></div>

#### ***Classes are linked to multiple enrollment records.***

As many students will take the same class, many student enrollment records are associated to the same class record. A list of all students who ever took that class may be reported on.

#### ***Classes are linked to multiple template records.***

1\) there may be multiple curriculum (Moodle Courses) that will have all the same name on the transcript, such as two different Algebra I courses using different curriculum, but essential both just Algebra.

2\) There will be multiple plans that all required the same class. For example the University preparation will require English 9, but so with the basic diploma.

Each class may only have one assigned subject. Some classes can be dual purpose, this use case is is described in [Subject and Subject Requirements Tables](https://bsa.lynops.com/books/personal-education-management-system/page/subject-and-subject-requirements-tables "Subject and Subject Requirements Tables").

{{@168#bkmrk-for-example%2C-environ}}

#### ***A class record may be associated to only one subject record.***

Per above, should a class fulfill multiple subject requirements, separate class records must be created.

#### ***Classes are not associated to Curriculum***

In the use case above, we see why the classes are not directly associated with the curriculum. Either the template or the enrollment record contains the additional information needed to determine which requirements the combination of class and curriculum fulfill.

#### ***A class record may be associate to one grade span.***

This feature may be used to filter and down select the relationships when creating the records. Additional logic may be added to prevent students from being enrolled in classes outside their gran span, but this feature has not yet been determined necessary.

### Fields

The **class name** is the name of the course exactly as it is to appear on transcripts.

The **units** the school gives for the class in only stored in the class record. There are no units associated with the various curriculum (Moodle Courses).

**NCES, State, and Local code** - these are various Class coding systems used by various regulatory organizations. The local code is used for all school business, the NCES and State codes are informational.

**NCES rigor** is a specific requirement for hte NCES organization in the US. It specifies the difficulty level of the class.

**Syllabus** - a field is provided so that the administrator can link an official syllabus to the class.

This **Pre-requisite** field reserved to add logic to prevent enrollments to be created where courses are out of sync. This is not needed when plans are enables since the planning processes specifies the order.

**Carnegie units** - this is an alternate unit system used in the US based on the number of hours of the course.

**Exclude GPA** - this field is a flag to exempt the class from various GPA calculations. The administrator may choose to exempt the Class from the standard GPA calculation, an alternate GPS calculation, both, or neither. The use case for this is that the State of Claifornia's student financial aid organization does not consider Physical Education when calculating the student's GPA for the purpose of student loans.

### Action Items JAN 2024

<p class="callout danger">1-MVP | TRANSCRIPT | Victoria to tag all correct classes with the exclude GPA field so that this function may be included in the GPA calculations. DONE</p>

# Curriculum Table

**[Curriculum](https://cs.studianova.org/admin/curriculum)**

### Relevant Definitions

{{@90#bkmrk-the-term-course-is-n}}

{{@90#bkmrk-curriculum-generall-}}

{{@90#bkmrk-the-syllabus-is-the-}}

### Moodle Terminology

{{@185#bkmrk-moodle-course-id-is-}}

{{@185#bkmrk-courses-are-organize}}

### Curriculum Table

The curriculum table is a list of courses that are created and available in Moodle. The integration between this table and Moodle is based on the **"code"** field, which must be an exact match with the Moodle's Course ID value. In PEMS, when ever the curriculum record is selected, this is noted the specific Moodle course.

It is important to note that the curriculum is what is approved by the various regulatory agencies. While multiple Moodle courses may satisfy a class requirement, maybe only one of those courses has been approved for a specific plan.

### Data Relationships

<div drawio-diagram="60"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1705872712.png" alt=""/></div>

The curriculum record is allowed to be linked to one subject record. This function is added only to allow planners to more quickly identify curriculum that satisfies the class requirements. This field may be used as a filter on drop-down menus for example.

It is important to point out that the 'official' subject for the student's program of study is determined by the class record alone. So if an enrollment record is linked to a class with subject of math, and then linked to a curriculum record with subject English, the student will get math credit for the course.

Transcript tags are the same as compliance tags, and the administrator may select the compliance tags the should be associated to the curriculum. The transcript shows enrollment records, which are associated to the curriculum record, and so will show all associated transcript tags.

Enrollment records are linked to the Moodle Course and provide additional information about when the student should start the course (which term and which grade level), the enrollment record triggers auto-enrollment in the Moodle course from PEMS.

Curriculum records are linked to template record in the program of study planning process. One curriculum record may be used in many different templates depending on the program of study.

It is important to note that Curriculum is not directly associated with the Class. This association, and the nature of the association is accomplished only through template and enrollment records.

### Fields

**Course** - the name of the Moodle class as it appears in Moodle. No logic is based on the name.

**Code** - the key to integration with Moodle, the code must exactly match the Moodle Course ID value.

**Top Category** - the category the course is filed under in Moodle, not used for any logical purpose at this time. Moodle has specific functions that may be triggered based on the Course Category, these fields are included in the event these activities will be triggered from the SIS.

**Sub category 1** - the sub category the course is filed under in Moodle, not used for any logical purpose at this time.

**Sub category 2** - the second sub category the course is filed under in Moodle, not used for any logical purpose at this time.

**Course Link** - the link to the Moodle course

**Syllabus** - a link to a Syllabus document, and external link.

### Fields to Deprecate JAN 2024

<p class="callout danger">2-MVP | HOMEROOM | Deprecate Fill percent threshold 1 and 2, and automate sections (low priority clean up) </p>

Note: These fields intended to manage over-enrollment in courses. This information was meant to trigger [Moodle Groups](https://bsa.lynops.com/books/personal-education-management-system/page/reference-moodle-terminology "Moodle Terminology") creation. However, an alternate method is being developed that groups students by locations, which will be Moodle cohorts, The cohorts will drive the creation of groups.

### Action Items JAN 2024

<p class="callout danger">1-MVP | TRANSCRIPT | Transcript tags - fFeld allows multi-select but tags must be next to each other in the list, we need to select multiple list values independently.</p>

# Transcript Tag Table

**[Transcript Tag Also Called Compliance Tag Table](https://cs.studianova.org/admin/compliancetags)**

### Relevant Definitions

{{@90#bkmrk-if-students-take-mor}}

{{@90#bkmrk-because-the-us-uses-}}

{{@90#bkmrk-not-only-do-the-regu}}

### Compliance /Transcript tag

Throughout PEMS transcript tag and compliance tag are the same table. Curriculum or Moodle Courses are 'tagged' with these notes which appear on the student's transcript. These notes demonstrate to colleges and organizations the the courses taken were approved by the various organizations. Because a course must be approved before getting this 'tag', they are called compliance tags. Because they appear on the transcript, in various places they are called 'transcript' tags.

### Data Relationships

<div drawio-diagram="61"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1705881320.png" alt=""/></div>

Curriculum may be tagged with multiple compliance tags. When the curriculum is tagged, this information flows to the student's Transcript through the related enrollment record.

In the context of plans, transcript tags are called compliance tags. If a plan meets all curriculum and sequence requirements, then the entire plan may be compliance and 'earn the tag'

### Fields

**Description** - an brief summary of the compliance organization.

The **name** used to make associations in PEMS

**Transcript tag** - a very short maximum three-letter code that will appear on the transcript.

**Weight GPA** - based on the agency that has approved the curriculum, higher than normal GPA points may be awarded to the student. If the tag confers the option to increase the GPA of the grade, then this field is selected to be yes. AP stands for Advanced Placement, and courses with this note must have been fully approved by tan organization called "college board.' For example, if the course is and AP course, then the transcript says 'AP' and instead of 4.0 point for an A, the student receives a 5.0.

*Enrollments which are linked to curriculum which has at least one tag with weight GPA tag = yes field will be awarded weighting points in the GPA calculation.*

### Next Version

<p class="callout warning">NV | CLEANUP | Align the names Transcript Tag and Compliance Tag, we should not be using two different names for same idea</p>

# Templates Table

**[Templates Table](https://cs.studianova.org/admin/templates)**

### Relevant Topics

Topics for this page include a review of **[PEMS Programs Module Overview](https://bsa.lynops.com/books/personal-education-management-system/page/pems-programs-module-overview "PEMS Programs Module Overview")**

### Templates Overview

Templates are records that specify the sequence of classes to be taken in the plan. They link a class record to a grade level and term label. This information creates a template for the enrollment records for the student. The enrollment records are create to match the template in the plan.

To create a plan, the administrator makes a Plan record, then adds templates as child records to the plan. The template links a class from the class list to a grade level and term label. For example, a template contains the information that the student will take *Algebra 1A* in the *first term* of *ninth grade*.

When the Student is enrolled in the plan, the PEMS reads the templates associated with the plan and creates a *set* of enrollment records linked to the appropriate student term. An enrollment record links the student term, the class from the class list, and also contains the student's final grade in the class. The completed enrollment records are displayed on the student's transcript. The status of an enrollment reflects if the course is planned, completed or in progress.

"Template" is short for "Enrollment Template" because these records are essentially copied to create the enrollment records for each student.

### Data Relationships

<div drawio-diagram="66"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1705885663.png" alt=""/></div>

Each template brings together the curriculum, the class, and the subject requirement that that template enrollment should fulfill. Each plan has multiple templates.

The subject requirement record brings together the subject, the plan, and the plan's requirement for units per subject. Subject requirement records are unique to each plan, and so if multiple plans require 20 units of English, then multiple subject requirement record for 20 units of English are need.

The template may be linked to multiple subject requirements, as described in the use case below:

The template is not linked directly to the subject, instead the user selects the subject requirement record. A filter can be used to decrease the options to only those subject requirements that are associated with the plan, and eventually business logic added to prevent any subject requirement record being associated to the template that is not already associated to the same plan as the template.

The term label relations specifies in which academic term the course should be taken. For example, English 9A will be taken in the Fall and English 9B in the Spring term.

### Fields

**At Grade** - the grade level of the student when the template enrollment beings. For example, the honors high school diploma program begins in 9th grade. The **At Grade** field and the **term label** pinpoint in which student term to enroll the student in the associated Moodle course.

### Fields to Deprecate JAN 2024

<p class="callout danger">4-MVP | ADVANCEMENT| Deprecate Set, Options, Curriculum Option - these fields were going to be used to allow the student to select between options. Instead, the administrator will create multiple plans to fit every scenario. The number of options are in fact a very limited use case. (low priority clean up).</p>

<p class="callout danger">4-MVP | ADVANCEMENT | Deprecate Subject, total units in this subject - by linking instead to the subject requirement, there is no need to store the subject in the template record.</p>


### Action Items JAN 2024

Per [Subject and Subject Requirements Tables](https://bsa.lynops.com/books/personal-education-management-system/page/subject-and-subject-requirements-tables "Subject and Subject Requirements Tables") Action Item: {{@168#bkmrk-no-automation-has-be}}

<p class="callout danger">1-MVP | TRANSCRIPT | The subject requirements field is currently multi-select, change this to single select so there is only one subject requirement record linked to any template. There is a minor use case that would require one class to fulfill multiple subject requirements under a plan. This use case will be eliminated as there may be a work around with how the plans are crafted. </p>

#### **Use Case | Multi-select subject requirements - Deprecate**

A student may take an elective course to satisfy both science requirements and elective total units. For example, programming is not required, this course may be used to satisfy science requirements, but also be used to fulfill general electives. In this case the template for Programming would fulfill 5 units of science AND 5 units of general elective. The alternative is to simple reduce the number of electives required under the plan.

# Program Planner View

**[Program Planner](https://cs.studianova.org/admin/programplanner)**

The program planner view allows the administrator to add subject requirement records in a nested table to the plan. The subject requirements are regulatory driven and represent industry knowledge. The next step should be to add the template records under the subject requirements.

This step may only be implemented only **AFTER** the relationship between template and subject requirements has been updated to one subject requirement to many templates, removing the many to many relationship. Per the following action item:

{{@172#bkmrk-the-subject-requirem-1}}

{{@172#bkmrk-a-student-may-take-a}}

### Action Items JAN 2024 Program Planner View

<p class="callout danger">4-MVP | ADVANCEMENT | The planner view is currently a two-level nested table. This view should be adapted to a three-level nested view where the templates are being added to the subject requirement records. If necessary, reduce how much data is loaded by having the use select the 'school' for a shorter list or the plan itself.</p>


###  

### Action Items JAN 2024 Subject Requirements Records

<p class="callout danger">4-MVP | ADVANCEMENT | REDUNDANT | Sum the associated units in the template (from the associated class) that are linked to a subject requirement in the Units Planned Record.</p>

<p class="callout danger">4-MVP | ADVANCEMENT | Show units planned field field on the Program planner view</p>

<p class="callout danger">4-MVP | ADVANCEMENT | Selecting the curriculum and course work requires sifting through long lists. Filter the classes and curriculum by the subject field of the subject requirement parent record.</p>

### Action Items JAN 2024 Plan Record

<p class="callout danger">4-MVP | ADVANCEMENT | Look up and enter school into the plan record based on associated grade span.</p>

<p class="callout danger">4-MVP | ADVANCEMENT | Sum the units required in all the associated subject requirements to the plan level.</p>

<p class="callout danger">4-MVP | ADVANCEMENT | Calculation the Units Planned in the Plan record by Summing the units from the associated template records, the units are determined by the class record associated to the template.</p>

### Next Version

<p class="callout warning">Develop a graphical user interface to drag and drop classes on the list, allowing users to set filters on displayed records.</p>

# Assessment Module



# Assessment Module Overview

### Relevant Definitions

Please review [Assessment Function](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-function "Assessment Function").

### Assessment Code

PEMS tracks any number of assessments and relates each assessment to programs, subjects, curriculum selection, grade level and grade span. The assessment are defined in the **assessment code** table, and they may be linked to any combination of the above records. The assessment code is a plan to asses a student for an indicator, it is not the actual student result.


### **Assessment Type**

The assessment Type field has the three options for the different types of assessments that PEMS supports.

- Level Equivalent - assessment determines what grade level the student is actually performing at in the subject
- Percentile Rank - assessment determines the ranking against a larger population of students at the same grade level
- Competency - assessment is recording a student has completed a required competency for the grade span

### **Assessment Code and the Subject**

Each assessment code record may only link to one subject, assessments codes may not be defined for multiple subject areas in one code. When students take one exam that tests the student on multiple subjects, the school must create an assessment code record for each of the subjects the single test addresses. When the test results are records, the user must create multiple assessment result records for such a test. In General, tests that cover multiple subject areas provide individual scores for each of the tested areas. Because an assessment code record only allows one score, multiple assessment code records are needed to record all available data.

The school does have the option to define subjects as very high level, in doing this one one assessment code record may be created for the high-level subject.

#####   


### Marks Matrix

The marks matrix table allows the the administrator to interpret the raw scores of each assessment in a consistent manner. Multiple marks matrix records are created for each assessment code record are used to specify a range of scores. Each mark matrix record specifies a low mark and high mark. If the raw score stored in the assessment result record falls inside the range of a specific marks matrix record, then the parent assessment result record will read the 'normalized' score from the mark matrix record and update the assessment result record.

#### Level Equivalent

For Assessment codes with type = level equivalent, the normalized score will be the level equivalent field from the matching marks matrix record. Recall the definition of Level Equivalent:

{{@112#bkmrk-students-are-assesse}}

#### Percentile Rank

For assessment codes with type = percentile rank, the normalized score will be the percentile rank score from the matching marks matrix record. recall the definition for percentile rank:

{{@112#bkmrk-another-method-of-as}}

#### Competencies

The marks matrix table is not used for competency based assessments since these assessments are either passed or not passed, they are not comparative in nature.

# Assessment Result Calculations

### Assessment Results Calculations

An assessment result has limited value if the administrator can not see a trend over time in how the student is performing. Therefore, the difference in academic performance between a previous assessment result must be calculated, but the <span style="text-decoration: underline;">difference in time</span> must also be calculated in order to obtain a trend. The following terminology is used when making these calculations.

When there are multiple assessment result records associated with the one assessment code, the student is being tested multiple times on the subject area. The set of assessment results records creates a picture of how the student performs over time.

Each of theses assessment result records can "look back in time" and calculate improvement since the last assessment result record associated to that same assessment code.

These calculations are performed on records in the [Assessment Results Table - TBD](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-results-table "Assessment Results Table - TBD") in the [Students Module](https://bsa.lynops.com/books/personal-education-management-system/chapter/students-module "Students Module"). They are not performed on any table in the Assessments Module.

### Level Equivalent Assessments Calculations

{{@112#bkmrk-pems-uses-hundreds%2Ft}}

The level equivalent assessment measures the academic performance in terms of grade levels. Regular, expected grade level performance means that a student' level equivalent increases 1 grade level per 1 academic year, so a regular student's average improvement rate is 1.

For example, a student's assessment result record is linked to the assessment code record names "IXL basic arithmetic". At the beginning of the term, September 4, 2023, the student scores 720. This score means 7tth grade second month. An assessment result record is made with date and score, linked to the assessment code, "IXL basic arithmetic" Four months later on January 5, 2024, the student scores a 840. This score means 8th grade 4th month.

- 4-SEP-2023 720 IXL Arithmetic
- 5-JAN-2024 840 IXL Arithmetic
- The difference in scores is: 840-720 = 120 in improvement = 1.2 grade years of progress
- The difference in time is 5-Jan 2024 - 4-SEP 2023 = about 19 weeks = 1 term or half a school year.
- The student's improvement rate is 1.2/0.5 = 3.4 grade levels per year (or 3.4 times the expected rate)


#### Naming Convention

- AP stands for Academic Performance, in the example above, AP is 720 and 840.
- The letter "D" stands for difference, just like delta or the 'd' in calculus.
- DT stands for the Difference in Time frame. Time is measured in terms, grade spans, and grade levels. In the example above, the difference in time is 19 weeks, but the difference in <span style="text-decoration: underline;">time frame</span> is 0.5 academic years.


#### Examples

AP = Academic Performance, D stand for Difference, therefore:

- DAP = different in Academic Performance values between two assessment result records that are associated to the same assessment code record. In the example above, DAP = 840 - 720 = 120.

DT = the difference in time as measured in academic years, therefore:

- DTterm = the difference over a term
- DTGrade = the difference over the year
- DTSpan = the difference over the a grade span


#### Rate Calculations

DAPDTerm is the difference in academic performance divided by the corresponding difference in time. This is the near term outlook, looking at how the student is progressing term by term.

DAPDTGrade is the difference in academic performance divided by the corresponding difference in time. This value looks at how the student performed in a giver academic year.

DAPDTSpan is the difference in academic performance divided by the corresponding difference in time. This value takes the widest look at progress over a longer horizon.


#### Time is always measured in portion of academic years

At any one point in time the student may not have completed a whole term, a whole grade level, or a whole grade span. Time is between assessment results is always measured in units of academic years. The DT or "delta time" is derived from the difference of the assessment result in days divided by the number of days in an average academic year.


#### Selecting the correct DAP - which assessments results to use

A student may take an assessment at anytime in the academic school year. When calculating time frame differences, PEMS selects the most relevant historical assessment record.

- For the term time frame, PEMS finds the oldest assessment within the current term.
- For the Grade time frame, PEMS find the oldest assessment result at the students current grade level.
- For the Grade Span time frame, PEMS find the oldest assessment result within the grade span.

For a new student that has only two similar assessments, the all values above are the same. The values are only different as more assessments are taken. In the second term the DAPDTGrade uses the very first record, while the DADTerm uses a more recent record to make the calculation.


### Percentile Rank

A percentile rank stores a student's score relative to a wider population of students. However, a raking is always against a similar grade level. For example, a student may be in top 90% of sixth graders if in sixth grade.

Because percentile rank is still measured against grade level, the calculations are no different. The student in one term may increase from 60% rank to 65% rank in 0.5 years. The student's rate of progress is (65-60)/0.5 years or 10% climb per year. For the grade span calculation, If the student climbed from 60% rank to 85% rank over 2.5 years, then the rate is (85-60)/2.5 or 10% per year.

Note: Because the student transitioned from being ranked against 6th grades to being ranked against 8th graders is not material since the student's own grade also advances.


### Calculations Workflow

When ever a new assessment result record is entered, each result is associated to an assessment code.

 PEMS searches for prior assessment result records, and calculates the difference in academic performance between assessment result records and the difference in time frames. Then PEMS calculates all the various parameter explained herein.

There is no need for this algorithm to be triggered on the event, the algorithm can run nightly to update all assessment result records.

 Once entered, these values are <span style="text-decoration: underline;">never</span> recalculated.

# Assessment Codes Table

**[Marks Matix](https://cs.studianova.org/admin/marksmatrix)**

An assessment code record is created for every time of assessment presented to students. The school should create separate assessment codes for different test vendors as no vendors will every be completely the same. A unique code is given to each type of assessment. When a student takes that assessment, the results are recorded and associated with the assessment code. All student scores per code may be reported on.

### Data Relationships

<div drawio-diagram="78"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1705980430.png" alt=""/></div>

There are multiple tables that may be linked to an assessment code record. Not all are required. Subject is required as the school should not be assessing students in subjects it does not teach. If the student takes a single test with multiple subjects at one time, multiple code records will need to be creates, each with a unique subject. Then when the students assessments results are input, multiple student assessment results will also be required.

Assessment codes may be linked to plans to determine the effectiveness of the plan. A plan may have many assessment codes.

Assessment codes may be further linked to a curriculum in that plan if the effectiveness of the curriculum should be assessed.

Assessment codes may be linked to a grade level for example if that assessment is an important 'gate' before embarking of a course of study.

When a student takes an assessment, the results are input into the student assessment code table, one student will have multiple student assessment results records associated with one assessment code over time. For example, a student may take the SAT multiple times, these scores may be input and linked to the same SAT assessment code record.

### Fields

**Assessment name** - should contain the name of the vendor if third party test is uses.

**Code** - an short a unique abbreviation for the assessment.

**Type** -how the student is being measured.

- Level Equivalent - the student score reflects where they stand against what the larger world expects from a student at that grade level.
- Percentile Rank - the test ranked the students against other students in the same grade level.
- Competence - an yes/no determination if the student can perform the to the standard.

Normalize Scores - toggle this to yes to use the Marks Matrix table to normalize the student's raw test scores to fit one of the selected types.

### Action Items JAN 2024

<p class="callout danger">NV | ASSESSMENT | Implement Mark Matrix logic to normalize scores for assessments that are not already level equivalent.</p>

# Marks Matrix

PEMS provide the capability to normalize any test score into the types provides, level equivalent and percentile rank. If a student takes a test and earns a raw score of 525, what does that mean? The school administrator can specify the ranges of the scores that would map to a grade level equivalent or a percentile rank.

### Data Relationships

<div drawio-diagram="79"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1705981701.png" alt=""/></div>

There are many Marks Matrix records associated to the Assessment Code record. The student's assessment results are linked to the code record, and will use the information in the Marks Matrix table to convert the raw score the a level equivalent of percentile rank.

### Fields

Low Mark - the low value in the range - user input

High Mark - the high value in the range - user input

Mark Range - calculate the different between high and low mark

Level Equivalent - 3 digit number with grade level in hundreds place, month in tens place - user input

Equivalent Year - the grade year portion of the level equivalent - calculate

Equivalent Month - the grade month portion of the level equivalent - calculate

Percentile Rank - the ranking that a score in the range would be equivalent to.

### Action Items Jan 2023 - TBD

# Competency Assessment Integration

### Relevant Topics

Please review: [Assessment Function](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-function "Assessment Function")

{{@112#bkmrk-tracking-competencie}}

{{@185#bkmrk-moodle-competencies-}}

{{@185#bkmrk-in-moodle%2C-a-student}}

{{@185#bkmrk-moodle-allows-the-ad}}

{{@185#bkmrk-a-cohort-is-a-group-}}

### Proposed Integration of Competencies and Assessment Codes

In the SIS, assessment codes may be defined with type = competency. This information is entirely driven by students completing activities (assignments) in Moodle. Competency tracking requires tight synchronization between PEMS and Moodle and is not useful unless Moodle has been configured to use competencies and Learning plans, as students may only demonstrate they meet the competencies through completing certain assignments in various Moodle courses.

Competencies are defined in Moodle in the admin panel. All Moodle competencies have an<span style="text-decoration: underline;"> **ID Number**</span> field, which is unique. For synchronization between SIS and Moodle, the admin must define a corresponding Assessment Code record and set the <span style="text-decoration: underline;">**Code** </span>field to the exact value as the Moodle Competency <span style="text-decoration: underline;">**ID Number.**</span> This is similar to how the curriculum table is used to reflect Moodle courses in the SIS.

The **Assessment Code** records in PEMS must have the exact same text string as the **Competency Code** field in Moodle.

When a Moodle Activity is configured to demonstrate a competency, Moodle marks this competency complete in Moodle. Moodle makes a yes/no determination on competency, there is no score. A set of Moodle activities can also be configured to complete one competency.

#### Update workflow

The event trigger for Moodle to update the SIS takes place whenever a student earns a competency. Moodle completes the competency for a student, an assessment result record need to be created, linking the assessment code record in SIS to the student, and recording the date the competency was earned and the yes/no outcome from Moodle.

- In SIS, the list of competencies are stored as Assessment Code records with "Code" set equal to Moodle Competency "ID number"
- In Moodle the exact same list of competencies are stored as competency records. 
    - In Moodle activities are linked to competencies.
    - In Moodle Students are assigned a set of competencies, which may be assigned based on cohort.
- Moodle determines if the competency has been achieved
- When achieved, an <span style="text-decoration: underline;">**assessment result record**</span> is created for the student with date of achievement 
    - no records are created in SIS if the student has failed the competency in Moodle

#### **Hierarchy of Competencies**

Moodle offers unlimited hierarchies in competencies, when all sub competencies are completed, Moodle checks off the higher level competency as completed. PEMS does not duplicate the hierarchy and has only a flat file of competency records. If the school wants to reflect the hierarchy in Moodle in PEMS, the best approach is to use an agreed convention in the name field of the Assessment Code record. Regardless of how Moodle checks of a competency when it is checked off an Assessment Result record is created in PEMS.

Assessment Code records may be linked to subject and grade level.


### Learning Plans In Moodle and Programs of Study

In Moodle, a student can be assigned a learning plan, which is a group of competencies that may span multiple courses. The student can view their progress towards the learning plan in their Moodle profile.

Learning plan templates, the set of competencies that comprise the student's assigned learning plan, have a unique **I<span style="text-decoration: underline;">D number</span>** field.

All learning plans should be developed to support the objectives of the program of study. Each plan in PEMS should be linked to the learning plan in Moodle. The learning plan in Moodle tracks he competences required by that plan.

#### Proposed Integration of Learning Plan and Programs of Study

The SIS's Program of Study table should add a field called "Moodle Learning Plan". The Moodle learning plan field value in the plan record stores the exact match of the learning plan template ID number in Moodle that reflects the objectives of the plan.

When the plan is assigned to the student, this will also trigger Moodle assigning the learning plan to that student based since the plan is linked to the Moodle learning plan template ID number. As the student completes the Moodle courses in the plan, the student will earn the competencies, and Moodle will then create assessment result record to demonstrate the competencies.

#### Data Structure Conflict

When assessment code records are linked to Plans, they may see the learning plan template ID number. An assessment code record may only be associated with one plan. This differs from Moodle where the same competency may be linked to multiple learning plans. Consequently, multiple assessment code records must be created in SIS where the is only one competency ID in Moodle. The name of the competency should roughly the same for the same competency in Moodle.

<div drawio-diagram="77"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1705971242.png" alt=""/></div>

The assessment codes do not need to be linked to the plans to 1) make records of completed Moodle competencies or 2) auto-enroll a cohort with the program of study's specified learning plan. However if SIS is to track and report of student progress towards the competencies, then the total set of competencies must be known, and the gaps between completed and incomplete reported on.

# Teachers Module - TBD

Tracking and managing teacher certifications

# Teacher Module Overview

**[Teachers Table](https://cs.studianova.org/admin/teachers)**

### Relevant Topics

{{@90#bkmrk-the-student%27s-year-i}}

{{@90#bkmrk-schools-refer-to-leg}}

{{@90#bkmrk-subjects-are-familie}}

{{@121#bkmrk-teacher-certificatio}}

{{@121#bkmrk-certifications-may-b}}

### A Teacher's Authorization to Teach.

In the US, teachers obtain credentials that allow them to teach specific subject, or grade levels. The specif rules vary through all grade levels and across all the various States.

The authorization to teach a certain grade level a certain subject usually has a duration, there is a date where the teacher is no longer authorized to teach the class.

When a teacher is identified as the "teacher of record" or in other words, the student's official teacher, PEMS manages if the assigned teacher is correctly authorized and if that authorization is still valid and not expired.

### Action Items JAN 2024

<p class="callout danger">7 - NV | TEACHERS | Depreciate the Sections table, this has been replaces by the groups table in the Homeroom module.</p>

# Authorizations

**[Authorizations](https://cs.studianova.org/admin/authorizations)**

Authorizations allows a teacher to teach a subject area at a grade level for a duration of time. Authorizations can be comprised on multiple credentials.

<p class="callout success">Delete the CredAuthorizations table - DONE</p>

<p class="callout warning">7- NV | TEACHERS | For Authorizations, add a <span style="text-decoration: underline;">multi-select </span>pick list that allows users to select from the credential table.</p>

<p class="callout success">Add an expiry date field to authorizations - DONE</p>

<p class="callout warning">7-NV | TEACHERS | For the authorization expiry date, find the soonest expiry date of all linked credentials</p>

# Students Module

Managing student classes and grades

# Student Module Overview

[View Students Module](https://cs.studianova.org/admin/students)

### Relevant Topics

{{@90#bkmrk-a-grade-span-covers-}}

{{@90#bkmrk-the-student%27s-year-i}}

{{@90#bkmrk-schools-refer-to-leg}}

{{@90#bkmrk-a-term-is-the-divisi}}

{{@90#bkmrk-in-summary%2C-enrollme}}

{{@90#bkmrk-the-plans-are-someti}}

{{@188#bkmrk-on-the-partner%27s-enr}}

### Student Module Overview

The primary function of the SIS is to track student information, so the student table is the heart of the solution. One record is created for each student during the registration process.

### Data Relationships

<div drawio-diagram="103"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1706234408.png" alt=""/></div>

Students are assigned to one homeroom. This homeroom is used to place the student in the correct group in Moodle so that only approved people can see their Moodle progress.

Each student is assigned a program of study, which outlines the classes and the curriculum each student should take in which term, using enrollment template records. As a student completes a plan, they will be assigned a new plan, therefore a student can have multiple related plan records.

Each student is in a grade level, they may enter a number 0 through 12. The grade level is a field in the student record, which allows PEMS to look up and auto-enter the student's school and and grade span.

For every term the student attends the school, PEMS creates a student term record. For example, the school term may be names Fall 2023, but the student term would be Fall 2023 SVG, including the student initials to indicate the record pertains only to that one student.

For every term the student attends the school, the student takes classes or rather, Moodle courses. An enrollment record is created for each class the student takes. The enrollment record specifies the class name that appears on the transcript, the specific curriculum which is the Moodle Course, and in which student term the student is taking that class, and the grade level of the student.

When student take assessments, their results are stored in the assessment results table.

Students require log-ins to the platform. One login record is created to store all logins. The student login records are used to create the Moodle login and Key Cloak SSO user.

# Students Table

**[Student Table](https://cs.studianova.org/admin/students)**

A student record is made from the enrollment form submitted from the Word Press site, after the administrator approved the enrollment. Fields in the enrollment form are mapped to the student record.

### Fields

**Name** - first, middle and last name from the enrollment form.

**Start date** - the date the student starts at the school, originally from the enrollment form, then updated as the student completed registration at the school.

**Graduation Date** - the last day of school the of the last grade level the school offers, calculated by PEMS and updated as the student progresses.

**Birth Date** - from the enrollment form.

**Gender** - from the enrollment form.

**Dis enrollment date** - the last day of school for the student who has transferred out of the school, blank if still enrolled.

**Remaining years** - PEMS calculates the number of years left to complete all years the school offers.

**Enrollment Year Terms** - students transfer in anytime during the school year, this is the number of terms the student may complete in their first year of enrollment. For example a school that offers two required terms, fall and spring. A student transfers to the school after the spring term starts. The student completes only one term in the Enrollment year.

**School Start Term** - a link to the school term in which the student begins at the school.

**Current grade level** - the grade level of the student which increased every year, unless they are not promoted (failed the year).

**Promotion** - default to promote. Select repeat if the student's grade level should not be promoted at the end of the academic year.

**Student Code** - The code is automatically assigned by PEMS and can not be changed by the user. The code is the student ID.

Status - planned for students who have registered but not yet started classes; active for currently enrolled and taking classes, disenrolled for students who have left the school; graduated if graduated, expelled if the student left involuntarily, suspended if the student has their access to the platform suspended with intention to re-instate.

**GPA -** overall GPA for the grade span the student is currently in.

**Weighted GPA** - overall weighted GPA for the grade span the student is currently in.

**Alternate GPA -** overall GPA for the grade span the student is currently in.

**Alternate Weighted GPA** - overall weighted GPA for the grade span the student is currently in.

**Notes** - long text field for discretionary use.

**Student First Term** - link to the student's first student term record.

**Current Program** - the active plan the student is currently following.

<p class="callout danger">11 FEB - there is no lookup of the current program field, hence the student is not linked to the program plan, which is necessary for the transcript view</p>

### Workflow

Based on Start Date and Start Grade Level, the student's first term, graduation date, remaining year, enrollment year terms, and total remaining terms are automatically calculated. These fields are updated when there are any changes to the input fields.

The student's current grade level is increased every year on the date specified by the school administration. Unless the user selects the Promotion field to be "repeat" all students are automatically promoted to the next grade level.

The grade span field represents a planning horizon. In general, students are assigned a specific plan that specifies classes to be taken for the entire grade span. The grade span is determined and updated based on the student's current grade level.

All new student records have status = planned.

When the student is updated to active, the start date is set to the day the status field is changed, and student accounts are made throughout the system so that the student is granted full access to the system.

The current program is the active plan the student is working on. Plans may be assigned, and deactivated, but PEMS still keeps track of any plan the student worked whether or not that plan was completed. Once the student has a plan assigned, PEMS auto-enrolls the student in all the classes specified under that plan.

### Student Record GPA Logic

There are four GPA fields to calculate in the student record. Calculate them all the same, recalculate when ever there is a change in the fields. Student GPAs are calculated at the close of a term. The school term status will change to past triggering the GPAs from the student terms to be included here.

If a student term status changes to past, recalculate all these fields.

For each student term, multiply the Grade Points field times the Student Term | Units Earned field

Sum all the values above

Sum all the units earned field from associated student terms.

Divide: (Grade Points x Units Earned ) / Units Earned

Enter into the respective GPA field in the student term record.

### Action Items JAN 2024

<p class="callout danger">| 1-MVP | TRANSCRIPT | Add the fields alternate GPA and alternate Weighted gpa - COMPLETED. Link student record to program plan table with look-up field - REMAINING. Implement GPA calculation logic - REMAINING</p>

<p class="callout danger">2-MVP | HOMEROOM| Remove link to Group record - enrollments specify group, not student records</p>

<p class="callout danger">2-MVP | HOMEROOM | Add link to Homeroom record</p>

<p class="callout danger">3-MVP | INTAKE | Complete auto-calculation of grade span, school, student code, graduation date, remaining years, enrollment year terms, total remaining terms, and link to school start term. Per [2. Student Intake Functions](https://bsa.lynops.com/books/personal-education-management-system/page/2-student-record-intake-functions "2. Student Intake Functions")</p>

<p class="callout danger">3-MVP | INTAKE | deleted</p>

# Student Terms Table

**[Student Terms](https://cs.studianova.org/admin/studentterms)**

### Relevant Topics

{{@90#bkmrk-a-term-is-the-divisi}}

{{@90#bkmrk-the-names-of-the-ter}}

{{@90#bkmrk-a-student-term-recor}}

{{@90#bkmrk-in-summary%2C-enrollme}}


### Student Terms Table Overview

Student terms are records created for each student for each term they are enrolled in the school. Where there is one school term record with a specific start and end date, there are multiple student term records with the same start and end date that are related to each individual student. Student Term records are child records to term, and also the student. They describe the many to many relationship between students and terms.

The student term records provide information on the student's academic performance in each school term, and stores the GPA achieved for that term.

<span id="bkmrk--0" style="font-weight: normal;"><span style="font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: 400; font-style: normal; font-variant: normal; white-space: pre-wrap;"><span style="border-width: initial; border-style: none; display: inline-block; overflow: hidden; width: 648px; height: 431px;">![](https://lh4.googleusercontent.com/zRWccIqJFrjRG0mecBEUvXz-73QYgWlmNfH6gCflJonNfVmEW_Gg1bl7y1BUftt_SPj-5k4QuaZWPa72UsjHQC4297jjtnA_tryvButYGmGpD1kssyrwLBTMNiabOV6fCkndP16HRZ3x4ntI1HwuEA)</span></span></span>

#####   


#####   


### Data Relationships

<div drawio-diagram="93"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1706149836.png" alt=""/></div>

### Fields

**At Grade** - the grade the student is in for that specific term. Student terms can be in the past or made for the future, so the At Grade is different that the student's current grade level.

**Student Sequence** - the order of the terms the student takes the term.

**Term GPA** - the calculated GPA for all the courses taken in that term. The term GPA appears on the student's transcript.

**Term Weighted GPA** - the calculated weighted GPA for all the courses taken in that term. The term GPA appears on the student's transcript.

*<span style="color: rgb(224, 62, 45);">JAN 2024 the following fields are not created:</span>*

<span style="background-color: rgb(251, 238, 184);">**Alternate Term GPA** - the calculated alternate GPA for all the courses taken in that term. The alternate term GPA appears on the student's transcript.</span>

<span style="background-color: rgb(251, 238, 184);">**Alternate Term Weighted GPA** - the calculated alternate weighted GPA for all the courses taken in that term. The alternate term GPA appears on the student's transcript.</span>

**Student Program** - the program/plan the student was assigned during that term.

**Units attempted** - the number of units of the courses enrolled in during the term.

**Units earned** - total units the student earned during the term, summed from the courses the student did not drop or fail.

**Name** - concatenate of Student ID and school term name

**Other School** - if the term represents coursed taken at a different school, and these courses are recorded in the SIS for the purpose of the Transcript, then the user enters the Other School

*<span style="color: rgb(224, 62, 45);">JAN 2024 the following field is not created:</span>*

<span style="background-color: rgb(251, 238, 184);">**Student Term Status** - update the status of the student term based on the school term status.</span>

### Student Terms Automation

PEMS automatically creates student term records for the student up to the <span style="text-decoration: underline;">end of the student grade\_span. </span> The student's grade span is determined by the student' s grade level.

When the student is completes registration, the student term records are created for the student for the <span style="text-decoration: underline;">entire grade span.</span>

However, if a student enters in the middle of a grade span, student term records are *<span style="text-decoration: underline;">not automatically created for the past terms </span>*of the grade span.

All enrollments are child records to the student term record, and so no enrollments can be made unless there are first student term records created.

### Student Term GPA Logic 

See [6. Transcript GPA Calculation](https://bsa.lynops.com/books/personal-education-management-system/page/6-transcript-gpa-calculation)

<table border="1" id="bkmrk-there-are-four-gpa-f" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr><td>There are four GPA fields to calculate in the student term record. Calculate them all the same, recalculate when ever there is a change in the fields.</td></tr><tr><td>If enrollment status is complete and if there is a change to any enrollment grade point field, then:</td></tr><tr><td>For each enrollment, multiply the Grade Points field times the Units Earned field</td></tr><tr><td>Sum all the values above</td></tr><tr><td>Sum all the units earned field from associated enrollments.</td></tr><tr><td>Divide: (Grade Points x Units Earned ) / Units Earned</td></tr><tr><td>Enter into the respective GPA field in the student term record.</td></tr></tbody></table>

### Action Items JAN 2024

<p class="callout danger">1-MVP | TRANSCRIPT | Add Student term Status, Alternate GPA and Alternate Weighted GPA fields to student term table.</p>

<p class="callout danger">1-MVP | TRANSCRIPT | Calculate all GPAs for the Transcript using the GPA Logic. Update student terms status based on school term status.</p>

# Student Plan Table

**<span style="color: rgb(0, 0, 0);">[Students Table](https://cs.studianova.org/admin/students)</span>**

<span style="color: #e03e2d;">*Note: student <span style="text-decoration: underline;">plan </span>and student <span style="text-decoration: underline;">program </span>are used to mean the exact same table*</span>

The student plan table keeps track of what plans have been assigned to the student over time. Student Plan records specify the program of study and keep track of the start date, end date, and status of the plan.

The “Student Program” table keeps the history of what program(plan) the student was completing over the years of study. Every time the current program field in the student record is changed, a record is created in the “student program” table. The “student program” record stores the program(plan) name as well as the planned start and end dates of the program. The student program table acts like a log file of changes made to the ”current program” field in the student record.

<span style="font-weight: 400;">The </span>**student programs** <span style="font-weight: 400;">table also stores the start and end dates of the plan. For example, if the student was assigned the plan half-way through the term, the exact date the student was assigned the plan is recorded. </span>

### Data Relationships

<div drawio-diagram="94"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1706154703.png" alt=""/></div>

### Fields

**Program Status**

*Active Plans -* There can only be one active student plan at any given time.

*Suspended Plans* - Students may change plans before they are completed, in this case the plan is suspended and a new student plan record created/activated.

*Completed Plans* - when a student completes all the classed under that plan, the plan is marked completed.

*Future* - Student plan records may be made for future grade spans. If the student has a future plan already created, then the student will be auto-enrolled in the next set of classes without any need for user involvement.

**Units Required -** The student plan is associated to the plan record, the plan record requires a total number of units to complete the plan.

**Units Completed -** The units from the related completed enrollment records are summed to determine how many units have been completed under this plan.

**Adherence -** As the student is completing the enrollment records on schedule, then the student is in compliance with the plan. If the student is not completing the enrollment records, then the plan adherence is "below plan." If the student is completing the plan, and adding extra classes, or is completing the plan early, the Adherence is above "plan."

**Plan GPA** - the running GPA of all the enrollments linked to the student plan, updated as the students earn grades.

**Program start date** - the date the plan was started, calculated from the date of the first enrollment record was activated.

**Program end date** - the date the program was completed, calculated from the last enrollment record or when the status was changed by the administrator.

**Program start term** - a link to the school term in which the student began the plan.

### Action Items JAN 2024

<p class="callout danger">1-MVP | TRANSCRIPT| In the Student Plan record, deprecate Units Attempted</p>

<p class="callout danger">6-NV | ASSESSMENT | Calculate Units completed under the student plan when enrollments are complete, update units completed in the student plan record.</p>

<p class="callout danger">6-NV |ASSESSMENT |Calculate adherence by comparing the units completed in the enrollments to the student plan's template records to find if the student is staying on the plan. </p>

<p class="callout danger">6-NV | ASSESSMENT | Calculate the plan GPA from the completed student term data. NOTE, this GPA does not appear of the student transcript and is for decision making on which plan to assign in the future. There is no need to track 'other' GPAs in the student plan record in the MVP.</p>

<p class="callout danger">6-NV | ASSESSMENT | Calculate the student plan start and end dates from the status of the enrollment records.</p>

# Enrollments Table

**[Enrollments](https://cs.studianova.org/admin/enrollments)**

### Relevant Topics

{{@90#bkmrk-this-is-the-list-of-}}

{{@90#bkmrk-curriculum-generall-}}

{{@90#bkmrk-the-term-course-is-n}}

{{@90#bkmrk-in-summary%2C-enrollme}}

{{@90#bkmrk-a-student-term-recor}}

{{@185#bkmrk-moodle-course-id-is-}}

{{@185#bkmrk-sections-are-used-to}}

### Enrollments Table Overview

The enrollment record is key to tracking the courses a student takes, when they take them, and what grade the received in the course. The enrollment record is created and managed in the SIS, but controls all the information needed to automate the enrollment of the student in the correct Moodle course. The enrollment record also contains the correct information to be displayed on the student transcripts.

### Data Relationships

<div drawio-diagram="106"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1706235569.png" alt=""/></div>

Enrollment records are created by mapping information from the template records associated with the assigned plan. They are not linked to the template records. Enrollment records are also linked directly to the <span style="text-decoration: underline;">student plan</span> record. The student plan records functions as a historical log of what plan the student took and when the enrollment was taken.

*<span style="color: rgb(224, 62, 45);">Note: Jan 2024 the enrollment is incorrectly linked to the Program plan record, not the student plan record.</span>*

### Fields

**Status** - the status of the student in the class. Active is enrolled in Moodle Course and working towards completion, completed is the end of the term after the grade has been entered from Moodle, planned is an enrollment record that was made for a future enrollment, suspended if the student was suspended from school, dropped if the student dropped the enrollment after starting the class. Plan change drop if the reason for the drop was an assignment of a new plan.

- "Not selected" option is no longer required and should be deprecated.

**Letter Grade** - The letter grade is selected from a pick list created and updated from the [Marks System](https://bsa.lynops.com/books/personal-education-management-system/page/marks-system "Marks System") table - 'Letter Mark' field' in the schools module. There is no need to link to the Marks System table, this field just uses a list from the defined records.

**Numeric Grade** - If letter grades are not used, then numeric grades can be typed in. Numeric grades do not need to use the mark system table. <span style="background-color: rgb(251, 238, 184);">Change the name of this field to Grade Points.</span>

<span style="background-color: rgb(251, 238, 184);">**Weighted Points** - entered from the Marks System table according to <span style="background-color: rgb(251, 238, 184);">Marking Rules</span> described below.</span>

<span style="background-color: rgb(251, 238, 184);">**Alternate Grade Points** - entered from the Marks System table according to <span style="background-color: rgb(251, 238, 184);">Marking Rules</span> described below.</span>

<span style="background-color: rgb(251, 238, 184);">**Alternate Weighted Grade Points** - entered from the Marks System table according to <span style="background-color: rgb(251, 238, 184);">Marking Rules</span> described below.</span>

**Grade Import** - the raw grade imported from Moodle.

**At grade** - the grade level the student is at when taking the course.

**Units Attempted** - the number of units this course will award. The class record has the number of attempted units for this enrollment.

**Units Earned** - the number of units earned. A passing grade is required for all units.

**Actual Start Date** - sometimes students start coursed mid-term. The actual start date is the day the student was granted access in Moodle to the course.

### Grading Workflow Summary

To mark the enrollment complete, the user fetches the grade from the associated Moodle course, then sets the status to complete in the enrollment status field. The student's dis-enrollment from the Moodle course is then triggered.

All completed enrollment records appear on the student's transcript.

### Create Enrollment Records Workflow Summary

When a student is assigned a plan, the enrollment records are created from information in the template records associated to the assigned plan. By creating all future as well as current term enrollments, the student can be auto-enrolled in Moodle courses without further user action. The user selects the student’s plan, and then the enrollment records are created.

This approach allows the user to easily see what classes the student *has left* to take in order to complete the program by looking at all incomplete enrollments. Student progress towards graduation is very difficult to assess with most traditional Student Information Systems.

For the current term, the students are auto-enrolled in Moodle. Students are not enrolled in Moodle courses for any future terms.

Enrollment records can only be created if there are student term records and a student plan assigned. To create the enrollments, a plan has to be selected for the student.

### Enrollment Grade Points Marking Rules

<table border="1" id="bkmrk-all-the-grade-points" style="border-collapse: collapse; width: 100%; height: 262.766px;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr style="height: 46.5938px;"><td style="height: 46.5938px;">All the grade points fields are entered based on the fields corresponding to the letter grade field in the Marking System table.</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">The transcript tag on the curriculum related to the enrollment record indicates whether the GPA can be increased (weighted). If it can be increased, then the weighted GPAs are from the Marks System Table are entered into the weighted points fields.</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">If the curriculum does not specify to weight the grade points, then the unweighted grade points from the Marking System table are entered into the enrollment weighted fields.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">The class record controls whether the GPA should be excluded from the standard calculation or the alternate calculation.</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">If the class is to be excluded, then the grade points are zeroed. There are two types of exclusions, one for the standard and one for the alternate GPA. Both exclusions must be selected to exclude from both types of calculations.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><span style="color: rgb(35, 111, 161);">To complete the logic - a student term level exclusion will need to be applied, where the term is excluded base on at\_grade. This has not been specified yet, but will be added after above logic is implemented and vetted.</span></td></tr></tbody></table>

### Action Items Jan 2024

<p class="callout danger">1-MVP | TRANSCRIPT | Create the fields: Weighted Grade Points, Alternate Grade Points, and Alternate Weighted Grade Points in the enrollment record. Change the name of numerical grade field to Grade Point. This will simplify creating the transcript. Change link in enrollment record to student plan, not programs of study.</p>

<p class="callout danger">1-MVP | TRANSCRIPT | Build Marks Rules to input all GPAs based on letter grade.</p>

<p class="callout danger">4-MVP | ADVANCEMENT | In the enrollment table - student plan field is linked to "Program of Study" This field should link to the <span style="text-decoration: underline;">**student plan table.** </span>This issue does not affect transcript.</p>

<p class="callout danger">4-MVP | ADVANCEMENT | Status field - remove the option " not selected " (low priority clean up)</p>

<p class="callout danger">2-MVP | HOMEROOM | Deprecate link to Section - this has been replaced with SIS group (clean up)</p>

<p class="callout danger">4-MVP | ADVANCEMENT | Deprecate Curriculum Option, Class Option, Preference and Set (clean up)</p>

<p class="callout danger">2-MVP | HOMEROOM | Add association to SIS Group table, one group per enrollment, groups can be linked to multiple enrollments</p>

# Business Rules for Student Terms and Enrollments

### Launching the Enrollment Process

A new student record is made in the Student Table when the enrollment form has been approved. The status of all new student records in the SIS student table is "planned." The start\_date field is the student's first day of class. The start\_date may change after a new student record has been created as students sometimes start earlier or later than originally planned. However, once the student status has been changed to "active", the start date may no longer change. Also, if the start date has passed, it will be assumed that it will not longer change.

### Creating a Set of Student Term Records

A **start date** and the student's **start grade level** is all that is required to make the student term records. The grade level determines the student's grade span. Student term records are created for the student through the end of the grade\_span. Student term records are created with new student record is created and these two essential fields are not empty.

If a new student record is made that does not have a start date or does not have a current grade level, the student records will not be made automatically. For this reason, the UI provides the user a manual option to create student term records.

### Starting Mid-Grade Span

Many students will start school in the middle of a term but also in the middle of a grade span. In this case, student term records are only made for current and future terms, they are not made for past terms in the grade span that a student was not in attendance.

### Selecting a Plan

When the student status is either "planned" or "active", the student's program (plan) can be selected. Making the decision on what plan to assign to the student in is an important process, it involves discussions with the student and family as well as interpretation of assessment tests that may be taken prior to first day of school, or in the first few days of active school participation.

Enrollment Records are created for the duration of the plan, not just fo the next term. So if a student is assigned plan that spans two academic years, the enrollment records are planned out for the next two years, and there are no decisions to be made on classes over this time period.

Based on the enrollment records, the PEMS integration with Moodle will auto-enroll the student in the Moodle courses. The student will not be enrolled in Moodle courses until the beginning of the term. Enrollment records in the PEMS are created for the full duration of the plan, however, Moodle course enrollment is only term by term.

### Mid Plan Enrollment

Each plan specifies a starting grade level and a starting term. So a student who joins the school late in the school year may be assigned a plan that has started in the previous term or even the previous year. These students will not complete the full plan as they will start the plan mid-way through. We do not want to create enrollment records for terms the student never attended at the school.

PEMS creates enrollment records according to the template, but skips enrollments that required for past terms. Enrollment records are created only for the current term and future terms of the plan.

### Triggering the Plan

When the student record is created, all the student terms are created until the end of the grade span. Then, when the program plan is selected, the enrollment records are automatically created.

### Changing The Plan Prior to Start Date

Changing the plan prior to start date is straight forward, all the previous plan's enrollment records are deleted and the new plan's enrollment records are created.

### Changing plans very shortly after courses started

A student may start the plan and decide the courses are not at all appropriate. A new plan must be selected. In a user-determined time frame, like less than two weeks for example. The plan may be changed, causing all related enrollment records to be deleted, and all corresponding Moodle Course enrollments to be deleted, and starting over with a new plan, new enrollment records and new Moodle course enrollments. None of the student's previous work will be saved or credit given. The user interface should require a reason for a plan being changed so soon after the student started the plan.

*note: whenever there is a plan change, the plan change begin and end dates (how long the student was enrolled in that plan) is stored so that plan history may be viewed.*

### Changing plans after courses started and some completed

Once the courses have been started, changing plans is more complicated since the the student will have completed some of the plan's courses. but not others. So enrollment records that have not yet started will be deleted, but enrollment records the student has already completed will not be deleted.

# Business Rules for Managing Enrollments

### Dis-enrollment

When a student is to be dis-enrolled, the administrator will trigger the action by changing the student status field in the student record.

The date of dis-enrollment will be entered in the student record.

All enrollment records will be marked complete, and the graded fetched from Moodle. Students will be dropped from any Moodle courses.

Student access will be suspended in Key cloak.

The current transcript will be created and emailed to the email of the guardian on record.

### End of Term Grading

The admin triggers fetching the grades from Moodle. The numerical values are updated in the enrollment numerical grade field.

Enrollments are linked to groups, which are linked to the teacher of record. Provide the teacher of record a table of all newly graded enrollments from Moodle. In this panel, teacher may change the grades. If the student has a poor grade, the teacher may choose the option to continue the enrollment, see below.

After reviewing all enrollments, the teacher must submit all grades, after which the teacher may no longer change them. Admins can change grades at any time during the students participate in the school.

When the grades have been submitted, and the student's enrollment is marked completed, the Moodle courses enrollment is also updated.

If all the students enrollments are marked completed, PEMS changes the status of the next term's enrollment records and to current and triggers the enrollment in the Moodle courses.

If any of the student's enrollment records were marked continued, then the administrator must manually change the status in the next term's enrollment records.

### Continue Enrollment Workflow

Sometimes students do not complete all the assignments in a course, and so it makes no sense to promote them to the next course. PEMS provides teachers the ability to continue enrollment, awarding an appropriate grade but not all the units in the linked class record. If the the teacher select to continue the enrollment, PEMS will not dis enroll the student from the Moodle course.

### Promoting Students

After grading is completed for the last term of the school year, all students who have completed a user-defined percent of the attempted units for the year will be automatically promoted to the next grade level.

Student who did not complete all the attempted units, because they dropped classed or revived a failing grade will not be automatically promoted.

The admin will be provided a means to review these students before choosing to promote the student to the next grade level. It may be a good idea to provide a user-defined field for the minimum percent of units completed to be automatically promoted.

### Promotion to New Grade Pan

When a student's current grade level changes, then the student may be entering a new grade span. If a student is entering a new grade span, then new student term records will be made.

### Completing a plan

If a student is entering a new grade span, a new plan will need to be assigned. Also, when a student completes a plan withing a grade span, the a new plan will need to be assigned. After grade promotion and the creation of all requisite student term records, provide the administrator the ability to assign a new plan.

# Assessment Results Table

### Assessment Results Overview

The administrator defines what the school will assess for in the Assessment Module, the assessment results table is in the Student module since an assessment result is the student's record on the assessment.

Every time the student takes and assessment, an assessment result record is entered and related to the student. Assessment codes allow the administrator to string together student assessment results. Based on the code, the assessment result record can be analyzed to better understand how a student is performing over time.

This table is fully described in [Assessment Result Calcuations.](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-result-calcuations "Assessment Result Calcuations")

# Student Logins Table

**[Student Login](https://cs.studianova.org/admin/studentlogin)**

The student logins table stores student login information for Keycloak and other technologies that the school provides their students.

Create a new record, enter information, then use the GENERATE PASSWORD button to create the login. Workflow is triggered to create the student in KeyCloak and Moodle.

### Data Relationships

<div drawio-diagram="98"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1706219661.png" alt=""/></div>

Only one student login record is created per student.

### Fields

**User name** - concatenate the first and last name of the student.

**Password** - administrator sets the password when creating the record.

**SSO True/False** - If true then on save KeyCloaks and Moodle users will be created.

**Is IXL True/False** - If true an IXL login with same user/name password will be create - PLEASE UPDATE NOT SURE

**Is GrokAcademy** True/False - If true a Grok login with same user/name password will be create - PLEASE UPDATE NOT SURE

**Active True/False** - If true then the account will be managed by Key Cloak PLEASE UPDATE NOT SURE

**website** - the website that the student account information will be shared with. Note: This logic may be updated based on the implementation of the homeroom module.

**emailid** - PLEASE UPDATE THIS FIELD DESCRIPTION

Class True/False - If true... PLEASE UPDATE THIS FIELD

### Action Items Jan 2024

<p class="callout danger">2-MVP | HOMEROOM| Dharm to Complete documentation of this table, VG does not completely understand it.</p>

<p class="callout danger">2-MVP | HOMEROOM| Evaluate login creation logic, in particular the website field, given the new homeroom module.</p>

# Student Term Planner UI

[Student Term Planner UI](https://cs.studianova.org/admin/studenttermplanner)

The Student term planner UI was created to help the administrator review the terms the student attends the school and to manually update student terms as needed.

The Student Term Planner UI is a two-level nested table with the student on the primary row. Using the plus button PEMS add a related student term record.

The following Student information is mapped to the student term record: Student Name.

Student Program is not mapped because the different student terms have potentially different programs

When the user selects the school term, PEMS concatenated the name of the student term name field, so the student term name is not directly entered by the user.

# Student Programs UI

**[Student Planner UI](https://cs.studianova.org/admin/studentplanner)**

The student programs UI is used to assign students a plan. The UI is a 2-level nested table with the student at the primary record and the student plans shown below the student.

A plus button is provided to create a related record and student name is mapped from the student record to the student plan record.

Filters are provides to sort by School and grade span.

### Action Items JAN 2024

<p class="callout danger">4-MVP | ADVANCEMENT | Add more filters to the header, filter by homeroom once that module is built.</p>

# Student Enrollment UI

**[Student Enrollment UI](https://cs.studianova.org/admin/studentenrollment)**

The Student Enrollment UI is used to create enrollment records for students and to trigger student enrollment in the Moodle Courses.

The student's name must be selected from the filter at the top, this was implemented to reduce how much data is loaded in the view.

The view is a two-level nested table. The primary row is a student term. When the student is selected in the filter, the associated student term records are loaded.

The secondary row is the enrollment record. When the user clicks the plus sign, a pop-up window appears and the user may select from a set of template records.

As of JAN 2023, all template records are displayed. In this view, template records should only be displayed if they are linked to the same plan as the student.

If the user clicks the button next to the template, then an enrollment record is created and the information from the template is mapped to the enrollment record.

# Transcript UI

**[Transcript View](https://cs.studianova.org/admin/transcript/view)**

### Relevant Concepts

[Student Records (SIS) Function](https://bsa.lynops.com/books/personal-education-management-system/page/student-records-sis-function "Student Records (SIS) Function") provides an overview of what a typical transcript requires. This is the most important aspect of the SIS.

{{@90#bkmrk-a-transcript-is-a-re}}

{{@90#bkmrk-a-student-term-recor}}

{{@90#bkmrk-this-is-the-list-of-}}

{{@90#bkmrk-curriculum-generall-}}

{{@90#bkmrk-in-summary%2C-enrollme}}

{{@90#bkmrk-subject-requirements-1}}

{{@90#bkmrk-not-only-do-the-regu}}

{{@90#bkmrk-the-grade-point-aver}}

{{@90#bkmrk-if-students-take-mor}}

### Data Relationships

<div drawio-diagram="108"><img src="https://bsa.lynops.com/uploads/images/drawio/2024-01/drawing-5-1706236387.png" alt=""/></div>

### Show Enrollments

The transcript shows the student's enrollment records, and the grades in each class. The enrollment records should be organized by student term. The transcript should display all the enrollments associated to the student term.

The enrollment record is linked to a curriculum record. The curriculum record has multiple transcript tags defined. Display the transcript tags next to the enrollment record.

### Show Progress to Plan

The transcript must also show progress towards completing [subject requirements](https://bsa.lynops.com/Subject%20and%20Subject%20Requirements%20Tables). The student record is associated with only one Program of Study record (plan) at any given time, the active/current plan. That plan is linked to a set of subject requirements.

The subject requirements are always determined from the active plan, the active plan is the one that is linked to the student record. Students are linked to multiple student plan records, but student plan records are not used in the transcript view.

Each enrollment is linked to one class, which is linked to one subject. Therefore each enrollment has a known subject.

The student is linked to one plan, which has a set of subject requirements. The subject requirements are displayed in the transcript using the 'transcript name' in the subject requirement record. (which is really the same as the linked subject).

The following method is used to find the units earned towards a subject requirement:

##### \*For each subject requirement record, Sum the Units Earned field from the Enrollments that are linked to a class that is linked to the same subject as the subject requirement record.

The following information should be displayed on the bottom of the transcript.

<table border="1" id="bkmrk-list-subject-require" style="border-collapse: collapse; width: 100%; height: 135.375px;"><colgroup><col style="width: 28.0593%;"></col><col style="width: 27.0749%;"></col><col style="width: 24.3466%;"></col><col style="width: 20.5192%;"></col></colgroup><tbody><tr style="height: 63.3906px;"><td style="height: 63.3906px;">**List subject requirements for student's current plan\***</td><td style="height: 63.3906px;">**Required**</td><td style="height: 63.3906px;">**Earned**</td><td style="height: 63.3906px;">**To Go**</td></tr><tr style="height: 71.9844px;"><td style="height: 71.9844px;">[Subject Requirement ](https://cs.studianova.org/admin/subjectrequirement): Transcript Name</td><td style="height: 71.9844px;">[Subject Requirement ](https://cs.studianova.org/admin/subjectrequirement): Units required</td><td style="height: 71.9844px;">\*sum units earned for [enrollments ](https://cs.studianova.org/admin/enrollments)with same subject</td><td style="height: 71.9844px;">Required - Earned, use zero if negative number</td></tr></tbody></table>

*\*The current plan is linked in the student record. This field should link to a school 'program of study' not the student's own plan log. <span style="color: rgb(224, 62, 45);">As of 21 FEB 2024, there is no link at all in the field, this is only a text field. <span style="color: rgb(0, 0, 0);">Alternatively, we can choose to select a current plan from the student plan log.</span></span>*

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-02/scaled-1680-/ly5image.png)](https://bsa.lynops.com/uploads/images/gallery/2024-02/ly5image.png)

### GPA Calculations Reference Information

<table border="1" id="bkmrk-view-%C2%A0googlesheet-ex" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.8765%;"></col></colgroup><tbody><tr><td>View [GoogleSheet Example Calculations](https://docs.google.com/spreadsheets/d/1mtVqaVWClRSZG9bTI8TkSPrs_d2aHzWQ87NbP9RRWks/edit?usp=sharing) of GPA</td></tr><tr><td>The [6. Transcript GPA Calculation ](https://bsa.lynops.com/books/personal-education-management-system/page/6-transcript-gpa-calculation) page describes detail on how to make GPA calculations.</td></tr><tr><td>The [Enrollments Table](https://bsa.lynops.com/books/personal-education-management-system/page/enrollments-table "Enrollments Table") describes the rules to update all the various Grade point fields in the enrollment record. This must be completed in order to run the transcript.</td></tr><tr><td>The [Student Terms Table](https://bsa.lynops.com/books/personal-education-management-system/page/student-terms-table "Student Terms Table") describes the rules to calculate GPA fields for the student term record. This must be completed in order to run the transcript.</td></tr><tr><td>The [Transcript UI ](https://bsa.lynops.com/books/personal-education-management-system/page/transcript-ui "Transcript UI")describes how to display Student Terms table GPA calculations as well as the student table GPA calculations on the Transcript.</td></tr><tr><td>The List of transcript tags to be displayed on the transcript is described in [Programs Table](https://bsa.lynops.com/books/personal-education-management-system/page/programs-table "Programs Table").</td></tr><tr><td>The [Marks System](https://bsa.lynops.com/books/personal-education-management-system/page/marks-system "Marks System") table describes how this table is used to allow users to customize the GPA calculations.</td></tr></tbody></table>

### Action Items JAN 2024

<p class="callout danger">1-MVP | TRANSCRIPT | Victoria to complete data set for plans, link plan to student, create a subject requirement under every plan, and complete Marx matrix so that GPAs may be calculated. - DONE</p>

<p class="callout danger">1-MVP | TRANSCRIPT | Complete all other transcript actions in all other pages of the document - see action item summary for complete list.</p>

<p class="callout danger">1-MVP | TRANSCRIPT | Verify the method of calculating student progress is as described.</p>

<p class="callout danger">1-MVP | TRANSCRIPT| Complete the transcript page.</p>

<p class="callout danger">1-MVP | TRANSCRIPT| Provide a means to export to pdf.</p>

<p class="callout danger">1-MVP | TRANSCRIPT| Add filters to top of transcript to filter for only completed student terms, or include all terms. </p>

### FEEDBACK 11 FEB 2024

<p class="callout danger">[Google Sheet Feedback](https://docs.google.com/presentation/d/1f7o0i_BrwRiJxqoUwv4Crv2w-Hq4LyeL1FYaR0xnbjQ/edit?usp=sharing)</p>

# Functions

Specific logic used by PEMS for automation

# 1. Calendar Functions

<table border="1" id="bkmrk-calendar-not-started" style="border-collapse: collapse; width: 99.7531%; height: 450.516px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.1363%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Calendar Functions](https://bsa.lynops.com/books/personal-education-management-system/page/1-calendar-functions-complete-ready "Calendar Functions")</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 1.0 Calculate field Values for Calendar Tables

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*After the user enters vacation days, and configures start dated, PEMS calculates the number of days in a term.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Trigger*</td><td style="height: 46.5938px;">*Recalculate anytime there is a change to any records used to make these calculations upon save*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*Initial configuration was completed.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*These functions may be run anytime there is a new school term record.*

<p class="callout warning">*need some way to limit how many times this is recalculated.*</p>

</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;"> </td><td style="height: 80.1719px;">Step 1</td><td style="height: 80.1719px;">For each new [School Term](https://cs.studianova.org/admin/terms) record, calculate the number of calendar days between the start and end dates, excluding the days specified in the associated [Term Label](https://cs.studianova.org/admin/termlabels) record. Enter result in [School Term](https://cs.studianova.org/admin/terms) calendar days.

</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 2</td><td style="height: 35.3906px;">For each [School Term](https://cs.studianova.org/admin/terms), count the number of associated [Vacation Days](https://cs.studianova.org/admin/vacationdays) records with status = activated.</td></tr><tr style="height: 35.375px;"><td style="height: 35.375px;">  
</td><td style="height: 35.375px;">Step 3</td><td style="height: 35.375px;">Calculate [School Term](https://cs.studianova.org/admin/terms) school days by subtracting the number of vacation days found above from the school days, enter as [School Term](https://cs.studianova.org/admin/terms) calendar days</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 4</td><td style="height: 29.7969px;">[Academic Year](https://cs.studianova.org/admin/academicyears) school days is the sum of the associated [School Term](https://cs.studianova.org/admin/terms) school days.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 5</td><td style="height: 29.7969px;">[Academic Year](https://cs.studianova.org/admin/academicyears) calendar days is the sum of the associated [School Term](https://cs.studianova.org/admin/terms) calendar days.</td></tr><tr><td>END</td><td>  
</td><td>  
</td></tr></tbody></table>

<table border="1" id="bkmrk-calendar-functions-n" style="border-collapse: collapse; width: 99.7531%; height: 513.281px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.1363%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Calendar Functions](https://bsa.lynops.com/books/personal-education-management-system/page/1-calendar-functions-complete-ready "Calendar Functions")</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 1.1 Automatically Create Academic Years Past and Future

</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;">*Purpose*</td><td style="height: 63.3906px;">*Automate creating new academic future academic records when the user-defined promotion date has been reached. This reduces the need for users to add a year every time they complete one.*</td></tr><tr style="height: 38.7969px;"><td style="height: 38.7969px;">  
</td><td style="height: 38.7969px;">*Trigger*</td><td style="height: 38.7969px;">*Promotion Date (school configuration) = actual date*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*Initial configuration was completed.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function must run before more school terms can be created.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;"> </td><td style="height: 46.5938px;">Step 1</td><td style="height: 46.5938px;">Find the academic year record the farthest in the future, the <span style="text-decoration: underline;">**"last record"**</span></td></tr><tr style="height: 38.375px;"><td style="height: 38.375px;">  
</td><td style="height: 38.375px;">Step 2</td><td style="height: 38.375px;">Create one more academic year record</td></tr><tr style="height: 169.734px;"><td style="height: 169.734px;">  
</td><td style="height: 169.734px;">Step 3</td><td style="height: 169.734px;">Set field values:

Sequence = last record sequence + 1

Start year = last record start year + 1

End year = last record end year + 1

Academic year name - concatenate start year - end year

start date = last record start date + 1 year

end date = last record end date + 1 year.

set status = future

</td></tr><tr style="height: 26.375px;"><td style="height: 26.375px;">END</td><td style="height: 26.375px;"> </td><td style="height: 26.375px;"> </td></tr></tbody></table>


<table border="1" id="bkmrk-calendar-functions-n-1" style="border-collapse: collapse; width: 100%; height: 288.781px;"><colgroup><col style="width: 17.5525%;"></col><col style="width: 11.9901%;"></col><col style="width: 70.4574%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Calendar Functions](https://bsa.lynops.com/books/personal-education-management-system/page/1-calendar-functions-complete-ready "Calendar Functions")</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 1.2 Automatically Update Status of Academic Years.

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*Academic Year records have a status of current, past, or future, update the status of the records automatically when the user-defined promotion date has been reached.*</td></tr><tr style="height: 38.7969px;"><td style="height: 38.7969px;">  
</td><td style="height: 38.7969px;">*Trigger*</td><td style="height: 38.7969px;">*Managed by the Promotion WorkFlow*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*There can be only one current year.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Sequence*</td><td style="height: 46.5938px;">*This step is best triggered after the next future record has been made and in accordance with the PROMOTION workflow.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 1</td><td style="height: 29.7969px;">Set previous current academic year status to 'past'</td></tr><tr style="height: 10px;"><td style="height: 10px;">  
</td><td style="height: 10px;">Step 2</td><td style="height: 10px;">Set next year, based on ordinate to current.</td></tr><tr><td>END</td><td>  
</td><td>  
</td></tr></tbody></table>

<table border="1" id="bkmrk-calendar-functions-n-2" style="border-collapse: collapse; width: 100%; height: 970.939px;"><colgroup><col style="width: 17.5525%;"></col><col style="width: 11.9901%;"></col><col style="width: 70.4574%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Calendar Functions](https://bsa.lynops.com/books/personal-education-management-system/page/1-calendar-functions-complete-ready "Calendar Functions")</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 1.3 Automatically Create School Term Records

</td></tr><tr style="height: 39.375px;"><td style="height: 39.375px;">  
</td><td style="height: 39.375px;">*Purpose*</td><td style="height: 39.375px;">*Automate student term records creation as new academic years are added.*</td></tr><tr style="height: 38.7969px;"><td style="height: 38.7969px;">  
</td><td style="height: 38.7969px;">*Trigger*</td><td style="height: 38.7969px;">*When a new academic year is added.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Sequence*</td><td style="height: 46.5938px;">*This step is best triggered after the creation of a new academic year record. Term records must be made before students can have their plans updated.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 1</td><td style="height: 29.7969px;">Find the first term label record with Flag = official start term.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 2</td><td style="height: 29.7969px;">Create a new school term record</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;">  
</td><td style="height: 80.1719px;">Step 3</td><td style="height: 80.1719px;">Set Term Start Year and Start Date

Academic year: start date =&gt; term: start date

Academic year start year =&gt; term: start year

</td></tr><tr style="height: 214.516px;"><td style="height: 214.516px;">*calculate estimated dates, terms may run over an calendar year*</td><td style="height: 214.516px;">Step 4</td><td style="height: 214.516px;">Calculate Term End Year, Term End Date

If Term Label "End in same year" = true then:

Term End Year = term: <span style="text-decoration: underline;">start yea</span>r

Term End Date = Term: <span style="text-decoration: underline;">start yea</span>r; Term label:end month: Term Label End day

If Term label "End in same year" = False then:

Term End Year = term: <span style="text-decoration: underline;">start yea</span>r + 1

Term End Date = Term: <span style="text-decoration: underline;">end year</span>; Term label:end month: Term Label End day

</td></tr><tr style="height: 145.719px;"><td style="height: 145.719px;">  
</td><td style="height: 145.719px;">Step 4</td><td style="height: 145.719px;">Set other term field values:

Name - concatenate term label name and term: start year

status = future

term label =&gt; related term label record

academic year =&gt; related academic year record

term label flag =&gt; term flag

</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">Step 5</td><td style="height: 46.5938px;">If term label: flag not equal to "official end term" then go to the next term label record, increase term label: sequence by one.</td></tr><tr><td>  
</td><td>Ste 6 </td><td>Set Term Start Year and Start Date

If <span style="text-decoration: underline;">previous </span>term label record (sequence -1) end month **&lt;/= (LESS THAN OR EQUAL TO)** term label start month, term start year = <span style="text-decoration: underline;">previous </span>term (ordinate -1) end year

Else term start year = <span style="text-decoration: underline;">previous </span>term (ordinate -1) end year + 1

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 6</td><td style="height: 29.7969px;">Continue to the next Term Label record (sequence + 1), stop when sequence + 1 can not be found (note we must continue past 'official end term' into optional terms.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 7</td><td style="height: 29.7969px;">Set other term fields per step 4</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">END</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">**[Review 1.3 Use Case Test](https://bsa.lynops.com/books/personal-education-management-system/page/1-calendar-functions-complete "Review Use Case Test")**</td></tr></tbody></table>


#### Use Case Test 1.3 Automatically Create School Term Records


<table border="1" id="bkmrk-classic-semesters-i-" style="border-collapse: collapse; width: 100%; height: 1483.48px;"><colgroup><col style="width: 13.1026%;"></col><col style="width: 10.2596%;"></col><col style="width: 10.2596%;"></col><col style="width: 10.754%;"></col><col style="width: 8.77627%;"></col><col style="width: 19.1595%;"></col><col style="width: 6.42769%;"></col><col style="width: 15.3276%;"></col><col style="width: 5.93325%;"></col></colgroup><tbody><tr style="height: 66.8281px;"><td style="height: 66.8281px;">##### **Classic Semesters I**

</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td></tr><tr style="height: 96.9844px;"><td style="height: 96.9844px;">  
</td><td style="height: 96.9844px;">**Term Label Start Month**</td><td style="height: 96.9844px;">**Term Label End Month**</td><td style="height: 96.9844px;">**Term Label Flag**</td><td style="height: 96.9844px;">**Term Label End in Same Year**</td><td style="height: 96.9844px;">**School Term start year**</td><td style="height: 96.9844px;">  
</td><td style="height: 96.9844px;">**School Term end year**</td><td style="height: 96.9844px;">  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">**Academic Year**</td><td style="height: 46.5938px;">9-2023</td><td style="height: 46.5938px;">5-2024</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td></tr><tr style="height: 96.9844px;"><td style="height: 96.9844px;"><span style="color: rgb(224, 62, 45);">**Fall**</span></td><td style="height: 96.9844px;"><span style="color: rgb(224, 62, 45);">9</span></td><td style="height: 96.9844px;"><span style="color: rgb(224, 62, 45);">1</span></td><td style="height: 96.9844px;"><span style="color: rgb(224, 62, 45);">Official Start Term</span></td><td style="height: 96.9844px;"><span style="color: rgb(224, 62, 45);">false</span></td><td style="height: 96.9844px;">flag = official start term start year so start year = academic start year = 2023</td><td style="height: 96.9844px;">pass</td><td style="height: 96.9844px;">"end in same year" = false so term end year = term start year + 1 = 2024</td><td style="height: 96.9844px;">pass</td></tr><tr style="height: 147.375px;"><td style="height: 147.375px;">**Spring**</td><td style="height: 147.375px;">1</td><td style="height: 147.375px;">5</td><td style="height: 147.375px;">Official End Term</td><td style="height: 147.375px;">true</td><td style="height: 147.375px;"><span style="text-decoration: underline;">previous </span>term label record (sequence -1) end month **&lt;/=** term label start month, so term start year = <span style="text-decoration: underline;">previous </span>term (ordinate -1) end year = 2024</td><td style="height: 147.375px;">pass</td><td style="height: 147.375px;">"end in same year = true so term end year = term start year = 2024</td><td style="height: 147.375px;">pass</td></tr><tr style="height: 147.375px;"><td style="height: 147.375px;">**Summer**</td><td style="height: 147.375px;">6</td><td style="height: 147.375px;">8</td><td style="height: 147.375px;">  
</td><td style="height: 147.375px;">true</td><td style="height: 147.375px;"><span style="text-decoration: underline;">previous </span>term label record (sequence -1) end month **&lt;/=** term label start month, so term start year = <span style="text-decoration: underline;">previous </span>term (ordinate -1) end year = 2024</td><td style="height: 147.375px;">pass</td><td style="height: 147.375px;">"end in same year = true so term end year = term start year = 2024</td><td style="height: 147.375px;">pass</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 66.8281px;"><td style="height: 66.8281px;">##### **Classic Semesters II**

</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">**Academic Year**</td><td style="height: 46.5938px;">8-2023</td><td style="height: 46.5938px;">5-2024</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td></tr><tr style="height: 96.9844px;"><td style="height: 96.9844px;">**Fall**</td><td style="height: 96.9844px;">8</td><td style="height: 96.9844px;">12</td><td style="height: 96.9844px;">Official Start Term</td><td style="height: 96.9844px;">true</td><td style="height: 96.9844px;">flag = official start term start year so start year = academic start year = 2023</td><td style="height: 96.9844px;">pass</td><td style="height: 96.9844px;">"end in same year" = true so term end year = term start year = 2023</td><td style="height: 96.9844px;">pass</td></tr><tr style="height: 147.375px;"><td style="height: 147.375px;"><span style="color: rgb(224, 62, 45);">**Spring**</span></td><td style="height: 147.375px;"><span style="color: rgb(224, 62, 45);">12</span></td><td style="height: 147.375px;"><span style="color: rgb(224, 62, 45);">5</span></td><td style="height: 147.375px;"><span style="color: rgb(224, 62, 45);">Official End Term</span></td><td style="height: 147.375px;"><span style="color: rgb(224, 62, 45);">false</span></td><td style="height: 147.375px;"><span style="text-decoration: underline;">previous </span>term label record (sequence -1) end month **&lt;/=** term label start month, so term start year = <span style="text-decoration: underline;">previous </span>term (ordinate -1) end year = 2023</td><td style="height: 147.375px;">pass</td><td style="height: 147.375px;">"end in same year" = false so term end year = start year + 1 = 2024</td><td style="height: 147.375px;">pass</td></tr><tr style="height: 147.375px;"><td style="height: 147.375px;">**Summer**</td><td style="height: 147.375px;">6</td><td style="height: 147.375px;">7</td><td style="height: 147.375px;">  
</td><td style="height: 147.375px;">true</td><td style="height: 147.375px;"><span style="text-decoration: underline;">previous </span>term label record (sequence -1) end month **&lt;/=** term label start month, so term start year = <span style="text-decoration: underline;">previous </span>term (ordinate -1) end year = 2024</td><td style="height: 147.375px;">  
</td><td style="height: 147.375px;">"end in same year" = true so term end year = start year = 2023</td><td style="height: 147.375px;">pass</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 66.8281px;"><td style="height: 66.8281px;">##### Classic Semesters III

</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td><td style="height: 66.8281px;">  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">**Academic Year**</td><td style="height: 46.5938px;">8-2023</td><td style="height: 46.5938px;">5-2024</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td></tr><tr style="height: 96.9844px;"><td style="height: 96.9844px;">**Fall**</td><td style="height: 96.9844px;">8</td><td style="height: 96.9844px;">12</td><td style="height: 96.9844px;">Official Start Term</td><td style="height: 96.9844px;">true</td><td style="height: 96.9844px;">flag = official start term start year so start year = academic start year = 2023</td><td style="height: 96.9844px;">pass</td><td style="height: 96.9844px;">"end in same year" = true so term end year = term start year = 2023</td><td style="height: 96.9844px;">pass</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">**Spring**</td><td style="height: 29.7969px;">1</td><td style="height: 29.7969px;">5</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">true</td><td style="height: 29.7969px;"><span style="text-decoration: underline;">previous </span>term label record (sequence -1) end month **NOT** **&lt;/=** term label start month, so term start year = <span style="text-decoration: underline;">previous </span>term (ordinate -1) end year + 1 = 2024</td><td style="height: 29.7969px;">pass</td><td style="height: 29.7969px;">"end in same year" = true so term end year = term start year = 2024</td><td style="height: 29.7969px;">pass</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">**Summer**</td><td style="height: 46.5938px;">6</td><td style="height: 46.5938px;">8</td><td style="height: 46.5938px;">Official End Term</td><td style="height: 46.5938px;">true</td><td style="height: 46.5938px;"><span style="text-decoration: underline;">previous </span>term label record (sequence -1) end month **&lt;/=** term label start month, so term start year = <span style="text-decoration: underline;">previous </span>term (ordinate -1) end year = 2024</td><td style="height: 46.5938px;">pass</td><td style="height: 46.5938px;">"end in same year" = true so term end year = term start year = 2024</td><td style="height: 46.5938px;">pass</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td></tr></tbody></table>

<table border="1" id="bkmrk-calendar-functions-n-3" style="border-collapse: collapse; width: 100%; height: 288.781px;"><colgroup><col style="width: 17.5525%;"></col><col style="width: 11.9901%;"></col><col style="width: 70.4574%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Calendar Functions](https://bsa.lynops.com/books/personal-education-management-system/page/1-calendar-functions-complete-ready "Calendar Functions")</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 1.4 Automatically Calculate Vacation Days In Terms and Academic Years

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*Academic Year records have a status of current, past, or future, update the status of the records automatically when the user-defined promotion date has been reached.*</td></tr><tr style="height: 38.7969px;"><td style="height: 38.7969px;">  
</td><td style="height: 38.7969px;">*Trigger*</td><td style="height: 38.7969px;">*Managed by the Promotion WorkFlow*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*There can be only one current year.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Sequence*</td><td style="height: 46.5938px;">*This step is best triggered after the next future record has been made and in accordance with the PROMOTION workflow.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 1</td><td style="height: 29.7969px;">Set previous current academic year status to 'past'</td></tr><tr style="height: 10px;"><td style="height: 10px;">  
</td><td style="height: 10px;">Step 2</td><td style="height: 10px;">Set next year, based on ordinate to current.</td></tr><tr><td>END</td><td>  
</td><td> </td></tr></tbody></table>

# 2. Student Record Intake Functions

<table border="1" id="bkmrk-calendar-functions-n" style="border-collapse: collapse; width: 99.7531%; height: 470.203px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.0124%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Student Fields](https://bsa.lynops.com/books/personal-education-management-system/page/2-student-intake-functions "Student Fields")</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 2.0 Set Intake Value Defaults - <span style="background-color: rgb(251, 238, 184);">COMPLETED</span>

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*Based on the student start grade level, enter the student's current grade level.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Trigger*</td><td style="height: 29.7969px;">*Runs only one time, when the student record is first entered, never updated.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*requisite fields are not empty.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function runs after the student record is created.*</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;"> </td><td style="height: 57.75px;">Step 1</td><td style="height: 57.75px;">Set [Student](https://cs.studianova.org/admin/students) current grade level equal to [Student](https://cs.studianova.org/admin/students) start grade.

</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;">  
</td><td style="height: 57.75px;">Step 2</td><td style="height: 57.75px;">Set [Student](https://cs.studianova.org/admin/students) promotion equal to "promote".

</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;">  
</td><td style="height: 57.75px;">Step 3</td><td style="height: 57.75px;">Set [Student](https://cs.studianova.org/admin/students) status equal to "planned".

</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;"><s>Step 4</s></td><td style="height: 35.3906px;"><s>Set [Student](https://cs.studianova.org/admin/students) cohort = linked homeroom record</s>

Creating student logins will be done in a separate step after student record created.

</td></tr><tr style="height: 38.375px;"><td style="height: 38.375px;">END</td><td style="height: 38.375px;">  
</td><td style="height: 38.375px;"> </td></tr></tbody></table>

<table border="1" id="bkmrk-student-fields-not-s" style="border-collapse: collapse; width: 99.7531%; height: 474.094px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.0124%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Student Fields](https://bsa.lynops.com/books/personal-education-management-system/page/2-student-intake-functions "Student Fields")</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 2.1 Enter Student's Grade Span and School

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*Reduce data entry by automatically finding the student grade span based on current grade level.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Trigger*</td><td style="height: 46.5938px;">*When new student record is entered <s>or when the student's current grade level changes.</s>*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*requisite fields are not empty.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function runs after the student record is created.*</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;"> </td><td style="height: 80.1719px;">Step 1</td><td style="height: 80.1719px;">Find the [Grade Span](https://cs.studianova.org/admin/gradespans) with start grade greater than or equal to the [Student](https://cs.studianova.org/admin/students) <s>current</s> <span style="text-decoration: underline;">start</span> grade level AND [Grade Span](https://cs.studianova.org/admin/gradespans) with end grade after of equal to the [Student](https://cs.studianova.org/admin/students) current: *grade span start grade **≤** student start grade **≤** grade span end grade*

</td></tr><tr style="height: 57.7812px;"><td style="height: 57.7812px;">  
</td><td style="height: 57.7812px;">Step 2</td><td style="height: 57.7812px;">Associate the [Grade Span](https://cs.studianova.org/admin/gradespans) record found above to the [Student](https://cs.studianova.org/admin/students) record with the [Student](https://cs.studianova.org/admin/students) grade span field.

</td></tr><tr style="height: 57.7812px;"><td style="height: 57.7812px;">  
</td><td style="height: 57.7812px;">Step 3</td><td style="height: 57.7812px;">Find the [School](https://cs.studianova.org/admin/schools) record associated to the [Grade Span](https://cs.studianova.org/admin/gradespans) record found above and associate to the [Student](https://cs.studianova.org/admin/students) record with the [Student](https://cs.studianova.org/admin/students) school field.

</td></tr><tr style="height: 38.375px;"><td style="height: 38.375px;">END</td><td style="height: 38.375px;">  
</td><td style="height: 38.375px;"> </td></tr></tbody></table>

<table border="1" id="bkmrk-student-fields-not-s-1" style="border-collapse: collapse; width: 99.7531%; height: 672.453px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.1363%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Student Fields](https://bsa.lynops.com/books/personal-education-management-system/page/2-student-intake-functions "Student Fields")</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 2.2 Calculate Graduation Date and Remaining Years

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*By finding the last day of school and how many years left in the school, PEMS helps admins estimate future enrollment.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Trigger*</td><td style="height: 46.5938px;">*When a new student record is entered <s>and every time a student completes a year. If a student 'skips' a grade level then their future date will change.</s>*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*requisite fields are not empty.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function runs when the student record is created.*</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;"> </td><td style="height: 80.1719px;">Step 1</td><td style="height: 80.1719px;">[Student](https://cs.studianova.org/admin/students) remaining years = [School Configuration](https://cs.studianova.org/admin/crmfields) highest\_grade\_level - [Student](https://cs.studianova.org/admin/students) <s>current</s> <span style="text-decoration: underline;">start </span>grade level.

*note: remaining years does not include the student's enrollment year/current year*

</td></tr><tr style="height: 52.1875px;"><td style="height: 52.1875px;">  
</td><td style="height: 52.1875px;">Step 2</td><td style="height: 52.1875px;">Find the<s> current (status = current) </s>[Academic Year](https://cs.studianova.org/admin/academicyears) sequence of <span style="text-decoration: underline;">start year based on start and end dates.</span></td></tr><tr style="height: 52.1875px;"><td style="height: 52.1875px;">  
</td><td style="height: 52.1875px;">Step 3</td><td style="height: 52.1875px;">Add [Student](https://cs.studianova.org/admin/students) remaining years to <span style="text-decoration: underline;">start year</span> <s>current (status = current)</s> [Academic Year](https://cs.studianova.org/admin/academicyears) sequence.</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;">  
</td><td style="height: 80.1719px;">Step 4</td><td style="height: 80.1719px;">Find the Academic year with the sequence value found above, this is the graduating academic year. There is no field for the graduating academic year.

<span style="text-decoration: underline;">Find the grad year end date.</span>

</td></tr><tr style="height: 57.7812px;"><td style="height: 57.7812px;">  
</td><td style="height: 57.7812px;"><s>Step 5</s></td><td style="height: 57.7812px;"><s>Find the last [School term](https://cs.studianova.org/admin/terms) associated with the Academic year found above. The last School term has an associated [Term Label](https://cs.studianova.org/admin/termlabels) record with flag = official end term.</s></td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;">  
</td><td style="height: 80.1719px;"><s>Step 6</s></td><td style="height: 80.1719px;"><s>The end date of the last [School term](https://cs.studianova.org/admin/terms) of the graduating academic year is the [Student](https://cs.studianova.org/admin/students) graduation date.</s>

<span style="text-decoration: underline;">Use grad year end date, calendar functions will update the year end date based on the school term associated end date when there is a change.</span>

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">END</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td></tr></tbody></table>


<table border="1" id="bkmrk-student-fields-not-s-2" style="border-collapse: collapse; width: 99.7531%; height: 371.531px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.1363%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Student Fields](https://bsa.lynops.com/books/personal-education-management-system/page/2-student-intake-functions "Student Fields")</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 2.3 Find and Enter Student's School Start Term - <span style="background-color: rgb(251, 238, 184);">COMPLETED</span>

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*Based on the student start date, auto-enter the student start term, the purpose is to reduce data entry for the user.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Trigger*</td><td style="height: 46.5938px;">*When new student record is entered or when the student start date changes. This function only runs if the student status = planned.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*requisite fields are not empty.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function runs after the student record is created and only once on student intake.*</td></tr><tr style="height: 57.7812px;"><td style="height: 57.7812px;"> </td><td style="height: 57.7812px;">Step 1</td><td style="height: 57.7812px;">Find the [School Term](https://cs.studianova.org/admin/terms) with start date before or equal to the [Student](https://cs.studianova.org/admin/students) start date AND [School Term](https://cs.studianova.org/admin/terms) with end date after or equal to the [Student](https://cs.studianova.org/admin/students) start date:

*school term start date **≤** student start date **≤** school term end date*

</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 2</td><td style="height: 35.3906px;">Associate the [School Term](https://cs.studianova.org/admin/terms) record to the [Student](https://cs.studianova.org/admin/students) record with the School Start term field.

</td></tr><tr style="height: 38.375px;"><td style="height: 38.375px;">END</td><td style="height: 38.375px;">  
</td><td style="height: 38.375px;">  
</td></tr></tbody></table>


<table border="1" id="bkmrk-student-fields-not-s-3" style="border-collapse: collapse; width: 99.7531%; height: 807.155px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.1363%;"></col></colgroup><tbody><tr style="height: 67.4219px;"><td style="height: 67.4219px;">[Student Fields](https://bsa.lynops.com/books/personal-education-management-system/page/2-student-intake-functions "Student Fields")</td><td style="height: 67.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 67.4219px;">#### 2.4 Calculate Enrollment Year Terms

</td></tr><tr style="height: 80.1875px;"><td style="height: 80.1875px;">  
</td><td style="height: 80.1875px;">*Purpose*</td><td style="height: 80.1875px;">*Students transfer in and out of schools at various times and frequently in the middle of school terms. Many student's do not complete all the terms in their first year enrolled in the term. Based on the student's start date, calculate how many terms the student attends in their first year attending the school.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Trigger*</td><td style="height: 46.5938px;">*When new student record is entered or when the student start date changes. This function only runs if the student status = planned.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*requisite fields are not empty.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*After function 2.23 runs and only once on student intake.*</td></tr><tr style="height: 57.7812px;"><td style="height: 57.7812px;"> </td><td style="height: 57.7812px;">Step 1</td><td style="height: 57.7812px;">Find <span style="text-decoration: underline;">ordinate </span>of the the [School Term](https://cs.studianova.org/admin/terms) linked to the [Student](https://cs.studianova.org/admin/students) from the school start term field, found in function 2.3 above.

</td></tr><tr style="height: 102.562px;"><td style="height: 102.562px;">  
</td><td style="height: 102.562px;">Step 2</td><td style="height: 102.562px;"><s>If the [Term Label](https://cs.studianova.org/admin/termlabels) record linked to the [School Term](https://cs.studianova.org/admin/terms) has [Term Label](https://cs.studianova.org/admin/termlabels) flag = official end term, then [Student](https://cs.studianova.org/admin/students) Enrollment year terms = 1. (Then quit logic)</s>

<s>Else:</s>

**<span style="text-decoration: underline;">Find the start year's child [School Term](https://cs.studianova.org/admin/terms) record.</span>**

</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;">  
</td><td style="height: 80.1719px;">Step 3</td><td style="height: 80.1719px;"><s>Find the ordinate of the [School Term](https://cs.studianova.org/admin/terms) linked to the [Student](https://cs.studianova.org/admin/students). *("ordinate start")*</s>

<span style="text-decoration: underline;">**Based on the related [Term Label](https://cs.studianova.org/admin/termlabels) flag, flag = official end, find the ordinate of the last school term in the academic start year.**</span>

</td></tr><tr style="height: 102.562px;"><td style="height: 102.562px;">  
</td><td style="height: 102.562px;">Step 4</td><td style="height: 102.562px;"><s>Find the ordinate of the [School Term](https://cs.studianova.org/admin/terms) record in the same [Academic Year ](https://cs.studianova.org/admin/academicyears)= same as [Student](https://cs.studianova.org/admin/students) school start term and has a linked [Term Label](https://cs.studianova.org/admin/termlabels) record with flag = official end term. *("ordinate end")*</s>

**<span style="text-decoration: underline;">Enrollment year terms = end year ordinate - ordinate of school start term + 1</span>**

</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;">  
</td><td style="height: 80.1719px;"><s>Step 5</s></td><td style="height: 80.1719px;"><s>Find remaining terms. Subtract the sequence the student schools start term from the school term record found above, the official end term, then add 1:</s>

<s>*remaining terms = ("ordinate end") - ("ordinate start") + 1*</s>

</td></tr><tr style="height: 38.375px;"><td style="height: 38.375px;">END</td><td style="height: 38.375px;">  
</td><td style="height: 38.375px;"> </td></tr><tr style="height: 91.734px;"><td style="height: 91.734px;"><span style="color: rgb(52, 73, 94); background-color: rgb(251, 238, 184);">*Introduces a Restriction*</span></td><td style="height: 91.734px;">  
</td><td style="height: 91.734px;"><span style="color: rgb(52, 73, 94);">*This method assumes that there are no interim terms that are optional, that the optional terms are either at the beginning or end of an official academic year.* </span>

<span style="color: rgb(52, 73, 94);">*There is one use case where this assumption will fail, the 'intersession' where students can optionally enroll in a short period between terms, usually over the Christmas holiday to make up work that was not completed.*</span>

<span style="color: rgb(52, 73, 94);">*We will not design for intersession, and only allow optional terms to be before or after the standard academic year. This use case is not very common.*</span>

</td></tr></tbody></table>

#### <s>Use Case Test 2.4 Calculate Enrollment Year Terms\*</s>

<table border="1" id="bkmrk-school-term-ordinate" style="border-collapse: collapse; width: 100%; height: 900.391px;"><colgroup><col style="width: 12.4845%;"></col><col style="width: 14.5859%;"></col><col style="width: 11.6193%;"></col><col style="width: 12.979%;"></col><col style="width: 14.3387%;"></col><col style="width: 14.4623%;"></col><col style="width: 19.6539%;"></col></colgroup><tbody><tr style="height: 63.3906px;"><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;"><s>**School term**</s></td><td style="height: 63.3906px;"><s>**Ordinate school term**</s></td><td style="height: 63.3906px;"><s>**Term Label**</s></td><td style="height: 63.3906px;"><s>**Flag**</s></td><td style="height: 63.3906px;"><s>**Academic Year**</s></td><td style="height: 63.3906px;"><s>**Logic**</s></td></tr><tr style="height: 124.969px;"><td style="height: 124.969px;"><s>*Student enrolled in fall*</s></td><td style="height: 124.969px;"><s>Fall 2023</s></td><td style="height: 124.969px;"><s>23</s></td><td style="height: 124.969px;"><s>Fall</s></td><td style="height: 124.969px;"><s>Official Start</s></td><td style="height: 124.969px;"><s>2023-2024</s></td><td style="height: 124.969px;"><s> 'ordinate start' = 23, flag is not official end term so find the correct record.</s></td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;"><s>Spring 2024</s></td><td style="height: 63.3906px;"><s>24</s></td><td style="height: 63.3906px;"><s>Spring</s></td><td style="height: 63.3906px;"><s>Official End Term</s></td><td style="height: 63.3906px;"><s>2023-2024</s></td><td style="height: 63.3906px;"><s>end term for same academic year, so 'ordinate end' = 24</s></td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;"><s>*Enrollment year terms:*</s></td><td style="height: 46.5938px;"><s>**24 - 23 + 1 = 2** </s></td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;"></td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;"><s>Fall 2023</s></td><td style="height: 35.3906px;"><s>23</s></td><td style="height: 35.3906px;"><s>Fall</s></td><td style="height: 35.3906px;"><s>Official Start</s></td><td style="height: 35.3906px;"><s>2023-2024</s></td><td style="height: 35.3906px;"></td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;"><s>*Student enrolled in spring*</s></td><td style="height: 80.1719px;"><s>Spring 2024</s></td><td style="height: 80.1719px;"><s>24</s></td><td style="height: 80.1719px;"><s>Spring</s></td><td style="height: 80.1719px;"><s>Official End Term</s></td><td style="height: 80.1719px;"><s>2023-2024</s></td><td style="height: 80.1719px;"><s>"ordinate start" = 24</s>

<s>flag = official end term</s>

</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;"><s>*Enrollment year terms:*</s></td><td style="height: 46.5938px;"><s>**1**</s></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;"><s>Student enrolled in summer</s></td><td style="height: 63.3906px;"><s>Summer 2024</s></td><td style="height: 63.3906px;"><s>25</s></td><td style="height: 63.3906px;"><s>Summer</s></td><td style="height: 63.3906px;"><s>Interim</s></td><td style="height: 63.3906px;"><s>2024-2025</s></td><td style="height: 63.3906px;"><s>"ordinate start" = 25</s></td></tr><tr style="height: 124.938px;"><td style="height: 124.938px;">  
</td><td style="height: 124.938px;"><s>Fall 2023</s></td><td style="height: 124.938px;"><s>26</s></td><td style="height: 124.938px;"><s>Fall</s></td><td style="height: 124.938px;"><s>Official Start</s></td><td style="height: 124.938px;"><s>2024-2025</s></td><td style="height: 124.938px;"><s>flag is not official end year, record not found</s></td></tr><tr style="height: 80.1875px;"><td style="height: 80.1875px;">  
</td><td style="height: 80.1875px;"><s>Spring 2024</s></td><td style="height: 80.1875px;"><s>27</s></td><td style="height: 80.1875px;"><s>Spring</s></td><td style="height: 80.1875px;"><s>Official End Term</s></td><td style="height: 80.1875px;"><s>2024-2025</s></td><td style="height: 80.1875px;"><s>flag is equal to official end term for same academic year, so 'ordinate end' = 27</s></td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;"><s>*Enrollment year terms:*</s></td><td style="height: 46.5938px;"><s>**27 - 25 + 1 = 23**</s></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td></tr></tbody></table>



*\*<s>note: there is a logic problem if there is an optional term 'sandwiched' between the official end and start terms that the student chooses to not attend, this will change the number of enrollment year terms. Do not allow optional terms in between required terms in the same academic year. A required academic year must be continuous.</s>*

<table border="1" id="bkmrk-student-fields-not-s-4" style="border-collapse: collapse; width: 99.7531%; height: 665.016px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.1363%;"></col></colgroup><tbody><tr style="height: 67.4219px;"><td style="height: 67.4219px;">[Student Fields](https://bsa.lynops.com/books/personal-education-management-system/page/2-student-intake-functions "Student Fields")</td><td style="height: 67.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 67.4219px;">#### 2.5 Calculate Remaining Terms in Enrollment Grade Span

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*Calculate the remaining terms in the grade span. This is used for assigning plans. Plans can not be assigned that require more terms than remaining in the grade span.*</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;">  
</td><td style="height: 80.1719px;">*Trigger*</td><td style="height: 80.1719px;">*When new student record is entered and only once on student intake.*

*note: this field is updated in the advancement workflow, but it will use very different logic than this initial value*

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*requisite fields are not empty.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function runs after 2.4, find enrollment year terms.*</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;"> </td><td style="height: 80.1719px;">Step 1</td><td style="height: 80.1719px;">Find the remaining academic years in the grade span: Subtract [Student](https://cs.studianova.org/admin/students) current grade level from [Grade Span](https://cs.studianova.org/admin/gradespans) End grade:

*[Grade Span](https://cs.studianova.org/admin/gradespans) End grade - [Student](https://cs.studianova.org/admin/students) current grade*

</td></tr><tr style="height: 57.7812px;"><td style="height: 57.7812px;">  
</td><td style="height: 57.7812px;"><s>Step 2</s></td><td style="height: 57.7812px;"><s>If the value above is zero then set remaining terms = enrollment year terms.</s>

<s>Else:</s>

</td></tr><tr style="height: 57.7812px;"><td style="height: 57.7812px;">  
</td><td style="height: 57.7812px;"><s>Step 3</s>

DONE

</td><td style="height: 57.7812px;"><s>Find required\_terms\_year in the [School Configuration](https://cs.studianova.org/admin/crmfields) </s>

<s>**<span style="color: rgb(224, 62, 45);">NOTE: NEED TO ADD THIS FIELD TO CONFIGURATION PAGE</span>**</s>

</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;">  
</td><td style="height: 80.1719px;">Step 4</td><td style="height: 80.1719px;">Multiply number of required terms times the number of remaining years in the grade span

*required\_terms\_year X ([Grade Span](https://cs.studianova.org/admin/gradespans) End grade - [Student](https://cs.studianova.org/admin/students) current grade)*

</td></tr><tr style="height: 80.1719px;"><td style="height: 80.1719px;">  
</td><td style="height: 80.1719px;">Step 5</td><td style="height: 80.1719px;">Add [Student](https://cs.studianova.org/admin/students) Enrollment year terms to above:

[S*tudent*](https://cs.studianova.org/admin/students) *Enrollment year terms + required\_terms\_year X ([Grade Span](https://cs.studianova.org/admin/gradespans) End grade - [Student](https://cs.studianova.org/admin/students) current grade)*

</td></tr><tr style="height: 38.375px;"><td style="height: 38.375px;">END</td><td style="height: 38.375px;">  
</td><td style="height: 38.375px;">  
</td></tr></tbody></table>

# 3. Create Student Term Records

### Function Objectives  


- Make a new set of [student term](https://cs.studianova.org/admin/studentterms) records for a new student until the end of the [grade span](https://cs.studianova.org/admin/gradespans).
- Make a new set of student terms when a student progresses into a new grade span.
- Make one student term record for every term the student is planning to attend in the associated grade span.


### Information Required for this Function

#### ***From the student table, we know the following fields:***

- Student's school start term - the school term the student starts in
- Grade level - the students current grade level
- Grade span - the planning horizon for that student based on their grade level
- Grade span end grade - the end grade field from the associated grade span record

#### ***From the school term we know the following fields:***

- Ordinate - the sequence of school terms, adding 1 to the ordinate finds the next record in the sequence
- Flag field - official end term is referenced from the associated [term label](https://cs.studianova.org/admin/termlabels) record

#### ***Required records (must already be created)***

- Academic year records until the end of the grade span
- School Term Records until the end of the grade span


### New Students

All functions in [2. Student Record Intake Functions ](https://bsa.lynops.com/books/personal-education-management-system/page/2-student-record-intake-functions "2. Student Record Intake Functions") must be run on a new [student](https://cs.studianova.org/admin/students) record before this function can be run.

#####   


### Recurring Students

A recurring student already has at least one student term in the system. The last student term is found by the maximum student sequence field value.

#####   


### Grade Spans

The student terms records are created from the point the student enters the school until the end of the student's assigned grade span. Grade spans are automatically updated when the student's grade level increased to land in a new grade span. When the student enters a new grade span, this function is run again.

For example, If the student is promoted from grade 5 to grade 6, and grade 6 is in a different grade span (like US middle school) then this change will trigger that all the student term records will be created until the student has completed 8th grade. The student terms for the next grade span (high school) will not be created until the student is promoted into the next grade span.

#####   


### Student Term's Student Sequence

The [student term](https://cs.studianova.org/admin/studentterms) student sequence stores the sequence of the records in the order the student will take them. Student Sequence is a continuously increasing integer value from 1, the first term at the school, until the student has graduated from all available grade levels.

For example, a student enters the fall term of kindergarten, the school has defined two required school terms. 13 years later, the student's last term (13x2 = 26) will have a student sequence of 26.

#####   


### Student Term at\_grade

The student term must store the ***predicted*** grade level of the student for that specific term in the ***at\_grade*** field. At first, the at\_grade is the starting grade level of the student, after the end of the academic year, the student's at\_grade will increase.

The at\_grade is NOT the same information as the student's current grade level. Only in for the current term will the at\_grade be the current grade level.

#####   


### Optional and Required School terms

Schools may configure optional terms, for example a summer term that students may or may not take. Student terms are made for both optional and required terms.


### Student Term Name

The student term name captures the most relevant information, the school term label, the student information, and the grade the student was at during that term. Student Term name is default field value the user may not change.

<p class="callout info"><span style="font-weight: 400;">Set the student term name to concatenate: Associated Term Name, Associated student initials, Student Code, “GL” grade level number (use at\_grade value), e</span><span style="font-weight: 400;">xample from Kassidy’s Record: **Spring 2023 KKB14 GL3**</span></p>

### Discussion

#### Trigger to increase the at\_grade

When a *<span style="text-decoration: underline;">student</span> term* is created, the record is associated to a *<span style="text-decoration: underline;">school</span> term,* which has been linked to the *term <span style="text-decoration: underline;">label</span>* record. If that term label record is flagged (flag field) as the official end term of the school year, the student's grade level will increase by one. At the end of the school year, students increase in grade level, so the at\_grade value increases for the next student term.

#### Determining the end of the grade span

A student is at the end of a grade span when their grade level is promoted to the next grade level that falls into the next grade span. The predicted grade level is stored in the student term at\_grade field. When the (at\_grade field value + 1) is greater that the end grade level in the grade span, then the function ends and no new student terms are created.

So if the student's predicted at\_grade is greater than the end grade of the associated grade\_span, then the student's predicted grade level exceeds the grade span, student term records do not need to be created for the next span.

<table border="1" id="bkmrk-calendar-functions-n-1" style="width: 100%; height: 886.844px;"><colgroup><col style="width: 20.5175%;"></col><col style="width: 11.2501%;"></col><col style="width: 68.2324%;"></col></colgroup><tbody><tr style="height: 92.8125px;"><td style="height: 92.8125px;">[3. Create Student Term Records](https://bsa.lynops.com/books/personal-education-management-system/page/3-create-student-term-records)</td><td style="height: 92.8125px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 92.8125px;">#### 3.1 Automatically Create Student Term Records for New Students

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*After a new student has been added, create student term records until the end of the grade span. Students can not be enrolled in classes unless there are student term records.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Trigger*</td><td style="height: 29.7969px;">*Managed by the New Student Intake Work flow.*</td></tr><tr style="height: 34.5938px;"><td style="height: 34.5938px;">  
</td><td style="height: 34.5938px;">*Conditions*</td><td style="height: 34.5938px;">*No required fields are empty.*</td></tr><tr style="height: 35.5938px;"><td style="height: 35.5938px;">  
</td><td style="height: 35.5938px;">*Sequence*</td><td style="height: 35.5938px;">*This function follows 2.0 functions during student intake work flow*</td></tr><tr style="height: 83.1875px;"><td style="height: 83.1875px;">Start with the school start term associated to the student in function 2</td><td style="height: 83.1875px;">Step 1</td><td style="height: 83.1875px;">Find the ordinate of the [student ](https://cs.studianova.org/admin/students)record school start [term](https://cs.studianova.org/admin/terms) ("previous ordinate")</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 2</td><td style="height: 35.3906px; padding-left: 40px;">Create a new [student term](https://cs.studianova.org/admin/studentterms) record</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 3</td><td style="padding-left: 40px; height: 35.3906px;">Associate new [student term](https://cs.studianova.org/admin/studentterms) record to [student ](https://cs.studianova.org/admin/students)record school start [term](https://cs.studianova.org/admin/terms)</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 4</td><td style="height: 35.3906px; padding-left: 40px;">Associate new [student term](https://cs.studianova.org/admin/studentterms) record to the student </td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 5</td><td style="padding-left: 40px; height: 35.3906px;">Set the [student term](https://cs.studianova.org/admin/studentterms) record at\_grade field = [student ](https://cs.studianova.org/admin/students)record current grade\_level</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 6</td><td style="padding-left: 40px; height: 35.3906px;">Set [student term](https://cs.studianova.org/admin/studentterms) record student sequence = 1</td></tr><tr style="height: 49.5938px;"><td style="height: 49.5938px;">Check if the term is the last term in year</td><td style="height: 49.5938px;">Step 7</td><td style="height: 49.5938px;">If the [student ](https://cs.studianova.org/admin/students)record school start [term](https://cs.studianova.org/admin/terms) flag = official end term, then

</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">if last term, then increase grade level</td><td style="height: 46.5938px;">Step 8</td><td style="padding-left: 40px; height: 46.5938px;">at\_grade = previous at\_grade + 1</td></tr><tr style="height: 66.3906px;"><td style="height: 66.3906px;">Check if new grade level exceeds grade span</td><td style="height: 66.3906px;">Step 9</td><td style="height: 66.3906px;">If at\_grade is greater than [student ](https://cs.studianova.org/admin/students)record [grade span](https://cs.studianova.org/admin/gradespans) end grade, then <span style="color: rgb(224, 62, 45);">**STOP**</span>

Else

</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">increase the ordinate to find the next school term</td><td style="height: 63.3906px;">Step 10</td><td style="height: 63.3906px;">New ordinate = previous ordinate + 1</td></tr><tr style="height: 49.5938px;"><td style="height: 49.5938px;">Find the next school term</td><td style="height: 49.5938px;">Step 11</td><td style="height: 49.5938px;">Find the [school term](https://cs.studianova.org/admin/terms) record with the new ordinate from above - *the next term record*</td></tr><tr style="height: 35.375px;"><td style="height: 35.375px;">repeat</td><td style="height: 35.375px;">Step 12</td><td style="height: 35.375px; padding-left: 40px;">Create a new [student term](https://cs.studianova.org/admin/studentterms) record</td></tr><tr><td>  
</td><td>Step 13</td><td style="padding-left: 40px;">Associate new [student term](https://cs.studianova.org/admin/studentterms) record to [school term](https://cs.studianova.org/admin/terms) record with the new ordinate (step 10)</td></tr><tr><td>  
</td><td>Step 14</td><td style="padding-left: 40px;">Associate new [student term](https://cs.studianova.org/admin/studentterms) record to the student </td></tr><tr><td>  
</td><td>Step 15</td><td style="padding-left: 40px;">Set the [student term](https://cs.studianova.org/admin/studentterms) record at\_grade field = new at\_grade (step 8)</td></tr><tr><td>  
</td><td>Step 16</td><td style="padding-left: 40px;">Set [student term](https://cs.studianova.org/admin/studentterms) record student sequence = previous student sequence +1</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">check in the new school term is the end of the year</td><td style="height: 29.7969px;">Step 17</td><td style="height: 29.7969px;">If the [school term](https://cs.studianova.org/admin/terms) record with the new ordinate flag = official end grade then **<span style="color: rgb(224, 62, 45);">STOP</span>**

Else

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"> </td><td style="height: 29.7969px;">Step 18</td><td style="height: 29.7969px;">Go to Step 8</td></tr><tr><td>END</td><td>  
</td><td>  
</td></tr></tbody></table>

<table border="1" id="bkmrk-3.-create-student-te" style="width: 100%; height: 1313.77px;"><colgroup><col style="width: 20.5192%;"></col><col style="width: 11.2485%;"></col><col style="width: 68.2324%;"></col></colgroup><tbody><tr style="height: 92.8125px;"><td style="height: 92.8125px;">[3. Create Student Term Records](https://bsa.lynops.com/books/personal-education-management-system/page/3-create-student-term-records)</td><td style="height: 92.8125px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 92.8125px;">#### 3.2 Automatically Create Student Term Records for recurring students

</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;">*Purpose*</td><td style="height: 63.3906px;">*When a student has advanced to a new grade span, create student term records until the end of the grade span. Students can not be enrolled in classes unless there are student term records.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Trigger*</td><td style="height: 29.7969px;">*Managed by the advancement workflow*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Conditions*</td><td style="height: 46.5938px;">*No required fields are empty. There must be at least one student term record already created - from function 3.1*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Sequence*</td><td style="height: 46.5938px;">*After a student has been advanced to a new grade level, this is part of the advancement workflow*</td></tr><tr style="height: 102.562px;"><td style="height: 102.562px;">Check grade level matches associated grade span.</td><td style="height: 102.562px;">Step 1</td><td style="height: 102.562px;">If [student ](https://cs.studianova.org/admin/students)record current grade level is not equal to [student ](https://cs.studianova.org/admin/students)record [grade span](https://cs.studianova.org/admin/gradespans) start grade then <span style="color: rgb(224, 62, 45);">**STOP**</span>

Provide user an error that student terms can not be made for this grade span.

Else

</td></tr><tr style="height: 52.1875px;"><td style="height: 52.1875px;">Find the last student term.</td><td style="height: 52.1875px;">Step 2</td><td style="height: 52.1875px;">Find the last [student term](https://cs.studianova.org/admin/studentterms) record, the [student term](https://cs.studianova.org/admin/studentterms) record with the maximum student sequence field value.</td></tr><tr style="height: 124.953px;"><td style="height: 124.953px;">Check the at\_grade</td><td style="height: 124.953px;">Step 3</td><td style="height: 124.953px;">If the at\_grade field in the last [student term](https://cs.studianova.org/admin/studentterms) record is greater than or equal to the student grade span start grade then **<span style="color: rgb(224, 62, 45);">STOP </span>**

<span style="color: rgb(0, 0, 0);">Provide user an error note that terms can not be made for this grade span.</span>

<span style="color: rgb(0, 0, 0);">Else</span>

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 4</td><td style="height: 29.7969px;"><span style="color: rgb(0, 0, 0);">set at\_grade = student current grade level</span></td></tr><tr style="height: 83.1875px;"><td style="height: 83.1875px;">Find the ordinate of the associated school term</td><td style="height: 83.1875px;">Step 5</td><td style="height: 83.1875px;">Find the ordinate of the [school term](https://cs.studianova.org/admin/terms) record associated to the last student term record found above.</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 6</td><td style="height: 35.3906px; padding-left: 40px;">Create a new [student term](https://cs.studianova.org/admin/studentterms) record</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 7</td><td style="padding-left: 40px; height: 35.3906px;">Associate new [student term](https://cs.studianova.org/admin/studentterms) record to [school term](https://cs.studianova.org/admin/terms) record</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 8</td><td style="height: 35.3906px; padding-left: 40px;">Associate new [student term](https://cs.studianova.org/admin/studentterms) record to the student </td></tr><tr style="height: 52.1875px;"><td style="height: 52.1875px;">  
</td><td style="height: 52.1875px;">Step 9</td><td style="padding-left: 40px; height: 52.1875px;">Set the [student term](https://cs.studianova.org/admin/studentterms) record at\_grade field to at\_grade</td></tr><tr style="height: 52.1875px;"><td style="height: 52.1875px;">  
</td><td style="height: 52.1875px;">Step 10</td><td style="padding-left: 40px; height: 52.1875px;">Set [student term](https://cs.studianova.org/admin/studentterms) record student sequence = sequence</td></tr><tr style="height: 49.5938px;"><td style="height: 49.5938px;">Check if the term is the last term in year</td><td style="height: 49.5938px;">Step 11</td><td style="height: 49.5938px;">If the [student ](https://cs.studianova.org/admin/students)record school start [term](https://cs.studianova.org/admin/terms) flag = official end term, then

</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">if last term, then increase grade level</td><td style="height: 46.5938px;">Step 12</td><td style="padding-left: 40px; height: 46.5938px;">at\_grade = previous at\_grade + 1</td></tr><tr style="height: 66.3906px;"><td style="height: 66.3906px;">Check if new grade level exceeds grade span</td><td style="height: 66.3906px;">Step 13</td><td style="height: 66.3906px;">If at\_grade is greater than [student ](https://cs.studianova.org/admin/students)record [grade span](https://cs.studianova.org/admin/gradespans) end grade, then <span style="color: rgb(224, 62, 45);">**STOP**</span>

Else

</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">increase the ordinate to find the next school term</td><td style="height: 63.3906px;">Step 14</td><td style="height: 63.3906px; padding-left: 40px;">New ordinate = previous ordinate + 1</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">increase the sequence for the next student term record</td><td style="height: 29.7969px;">Step 15</td><td style="padding-left: 40px; height: 29.7969px;">New sequence = sequence + 1</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"> </td><td style="height: 29.7969px;">Step 16</td><td style="height: 29.7969px;">Find the School term record with the new ordinate</td></tr><tr><td>  
</td><td>Step 17</td><td>Go to Step 6</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">END</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;"> </td></tr></tbody></table>

# 4. Programs of Study and Subject Requirements

The program of study (plan) record must be linked to a grade\_span record. There can be only one grade\_span per program plan as programs plans can not cross over a grade\_span.

However, a plan may cover a period less than the grade span, for example there may be a 6th grade Remedial Plan that covers just one year of the 6th-8th grade span. After that plan is complete, the student is re-evaluated and placed in a new plan.

#####   


### Auto Enter Start and End Grade based on related Grade Span

When entering a new Program of Study, the user must select a grade span. The grade span has a start grade and end grade, covering the entire span. Default the start grade fields and end grade fields in the program of study to the same as the grade span, then let the user override them.

<table border="1" id="bkmrk-calendar-functions-n-1" style="width: 100%; height: 329.391px;"><colgroup><col style="width: 11.6193%;"></col><col style="width: 12.6056%;"></col><col style="width: 75.7752%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Programs of Study](https://bsa.lynops.com/books/personal-education-management-system/page/4-programs-of-study-and-subject-requirements-tbd)</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 4.1 **Auto-enter start and end grade**


</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;">  
</td><td style="height: 63.3906px;">*Purpose*</td><td style="height: 63.3906px;">*The user will select the grade span for the plan. The grade span has start and end grade levels. Auto enter the same start and end grade levels into the plan when the grade span is selected to reduce user workload.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Trigger*</td><td style="height: 29.7969px;">*A change in grade span in the plan record.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*Grade spans are created.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Sequence*</td><td style="height: 46.5938px;">*After the record is created, when ever the grade span changes.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 1</td><td style="height: 29.7969px;">Set [Plan](https://cs.studianova.org/admin/plans) start grade equal to [Grade Span](https://cs.studianova.org/admin/gradespans) start grade</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Step 2</td><td style="height: 29.7969px;">Set [Plan](https://cs.studianova.org/admin/plans) end grade equal to [Grade Span](https://cs.studianova.org/admin/gradespans) end grade</td></tr><tr><td>  
</td><td>Step 3</td><td>The user can then update the grade levels, so do not allow save if

[Plan](https://cs.studianova.org/admin/plans) start grade is greater than end grade,

[Plan](https://cs.studianova.org/admin/plans) end grade &gt;[Grade Span](https://cs.studianova.org/admin/gradespans) end grade

[Plan](https://cs.studianova.org/admin/plans) start grade &lt; [Grade Span](https://cs.studianova.org/admin/gradespans) start grade

Show the message "Error in plan grade levels"

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">END</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;"> </td></tr></tbody></table>

<table border="1" id="bkmrk-programs-of-study-no" style="width: 100%; height: 449.891px;"><colgroup><col style="width: 11.6193%;"></col><col style="width: 10.5039%;"></col><col style="width: 77.8768%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Programs of Study](https://bsa.lynops.com/books/personal-education-management-system/page/4-programs-of-study-and-subject-requirements-tbd)</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 4.2 **Auto-enter total terms**


</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*The program plan stores the total terms of the plan, this may be calculated from the start and end grade. However, the user may change the values.*</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">*Trigger*</td><td style="height: 35.3906px;">*Any change to the [Plan](https://cs.studianova.org/admin/plans) start or end grade fields* </td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Sequence*</td><td style="height: 46.5938px;">  
</td></tr><tr style="height: 52.1875px;"><td style="height: 52.1875px;">  
</td><td style="height: 52.1875px;">Step 1</td><td style="height: 52.1875px;">Set [Plan](https://cs.studianova.org/admin/plans) total terms equal to ([Plan](https://cs.studianova.org/admin/plans) end grade - [Plan](https://cs.studianova.org/admin/plans) start grade + 1) x [School Configuration](https://cs.studianova.org/admin/crmfields) terms\_per\_year</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 2</td><td style="height: 35.3906px;">Set [Plan](https://cs.studianova.org/admin/plans) end grade equal to [Grade Span](https://cs.studianova.org/admin/gradespans) end grade</td></tr><tr style="height: 86.9375px;"><td style="height: 86.9375px;">  
</td><td style="height: 86.9375px;">Step 3</td><td style="height: 86.9375px;">The user can then update the grade levels, so do not allow save if

[Plan](https://cs.studianova.org/admin/plans) total terms &gt; [Grade Span](https://cs.studianova.org/admin/gradespans) total terms

Show the message "Error in total terms"

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">END</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;"> </td></tr></tbody></table>

### Subject Requirements

The subject requirement records specify how many units of the subject a student must take under that specific plan. They relate the subjects to the programs in a many to many relationship. There will be multiple subject requirement records for each plan, but each subject requirement only applies to one plan. Multiple subject requirement records will be related to a single subject record.

For example, under the honors program, the requirements for English are 40 units ( four years, two terms). But under the basic diploma, the subject requirements for English is only three years, or 30 units.

The user creates subject requirements records when making a plan of study, then selects the classes that fulfill that requirement by creating template records.

<table border="1" id="bkmrk-programs-of-study-co" style="width: 100%; height: 443.109px;"><colgroup><col style="width: 11.6193%;"></col><col style="width: 12.3587%;"></col><col style="width: 76.0221%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Programs of Study](https://bsa.lynops.com/books/personal-education-management-system/page/4-programs-of-study-and-subject-requirements-tbd)</td><td style="height: 70.4219px;"><span style="color: rgb(22, 145, 121);">Completed</span></td><td style="height: 70.4219px;">#### 4.3 **Concatenate Subject Requirement Name**


</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*Ensure a unique record name that reflects all relevant information and avoid confusing subject requirements with subjects.*</td></tr><tr style="height: 35.375px;"><td style="height: 35.375px;">  
</td><td style="height: 35.375px;">*Trigger*</td><td style="height: 35.375px;">*Any change fields used to create the name*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Sequence*</td><td style="height: 46.5938px;">  
</td></tr><tr style="height: 52.1875px;"><td style="height: 52.1875px;">  
</td><td style="height: 52.1875px;">Step 1</td><td style="height: 52.1875px;"><span style="font-weight: 400;">Concatenate: [Subject Requirement](https://cs.studianova.org/admin/subjectrequirement) Subject Name “.” Plan Name “.U” Units Required : Example: “English.Standard 23.U20”</span></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">END</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;"> </td></tr></tbody></table>

# 5. Create Set of Enrollment Records - TBD

### Launching this process

The student plan links the student and the selected program plan. The program plan has a set of child records that specify which classes the student should take in sequential terms, the template records. When a student plan is changed from future to active, then the template records associated with the linked program plan are used to create a set of enrollment records. Enrollment records link the student, the student term, and the class.

<p class="callout info">The key trigger for the creation of enrollment records is the change of a student plan record from future to active. </p>

#####   


### What we Know

- From the active student plan record we know the corresponding program plan record, and the corresponding template records. From the template records, we know: 
    - the class linked to the class list table in which the student needs to be enrolled
    - the term the class is supposed to be take in, from the term label
    - the grade level the class should be take in, "at\_grade"
- From the student plan record we know the Program start term
- From the **program start term**, 
    - We can find the corresponding ***student*** start term
    - From the ***student*** start term: 
        - We can find the grade level the student will be at in the term, the 'at grade'
        - We can find the term label for that student term

#####   


### Match the templates to the student terms to create enrollment records

***For each template record associated to the activated student plan (though the linked program plan)***

<p class="callout info">Match the student term to template: find a student term record where student term at\_grade = template at\_grade AND student term label = template term label. There will be multiple templates that match these conditions (one template for each class to take in that term).</p>

<p class="callout info">*Note: The student term records can be limited to those withing the grade span of the associated program plan, to reduce time to find a match.*</p>

<p class="callout info">For each template that matched the conditions above, create an enrollment record, and associate that enrollment record with the student term.</p>

<p class="callout info">Set enrollment class, enrollment at\_grade, enrollment term label, enrollment curriculum, enrollment curriculum option, enrollment set, enrollment subject to the values in the corresponding template record.</p>

<p class="callout info">If there is no match between template and student term record based on at\_grade and term label, proceed to the next template record. *Note: If no student term records found, they will also not be found for multiple templates.*</p>

<p class="callout info">Exit the matching when every single template record has been considered.</p>

#### ***New Students***

For new students, PEMS anticipates that the student may be joining the school in the middle of a term or program plan, and so no enrollments records will be created for terms that have passed.

If there were no student terms created, then there will be no match and no enrollments created. In this way we do not create enrollments for student terms where the student was not enrolled.

#### Suspend a Plan

A student may need to change the plan they are working towards. This may occur after some enrollment records created by the plan are completed and others are not completed. The first step is to suspend the current plan.

To suspend the plan, the active student plan status field is set to 'suspended' by the user. When a student plan is suspended, all the enrollment records that are active or completed will remain unchanged. By default, the student will remain in the enrollments until the end of the term. All **incomplete** enrollments will be permanently deleted from the system when the plan is suspended.

<p class="callout info">Key Trigger: Student plan is changed from Active to Suspended</p>

<p class="callout info">Find all incomplete enrollment records associated to the suspended student plan and delete them</p>

### New Plan Assigned to Recurring Students

Whether a student is being assigned a new plan because they completed a plan or because the user suspended their plan, the new plan may require the student to take classes they may have already completed, or are in the process of completing. Therefore a check needs to be run to see if enrollment records exist with the same classes as the template records exist. Since plans never cross a grade span, this check only needs to be performed on enrollment records within grade span in question. If enrollment records exist with the same classes, then the corresponding template records will be excluded and no new classes will be made.

#### ***Complete enrollment records in the grade span***

When making enrollment records, PEMS first checks if there are any enrollment records in the student's current grade span. Each enrollment record has an at\_grade, the grade level the enrollment is to be completed or has been completed. If there are enrollment records created with the grade span of the plan to be assigned, and these enrollment record are ***complete,*** no new enrollment record will be created from the the templates, and that corresponding template will be *excluded* from the matching algorithm specified above.

#### ***Active enrollment records in the grade span***

If there is an ***active*** enrollment record with the same class as the template record, PEMS checks the curriculum. A different plan may have a different curriculum selected for each class, even though the class is the same. In this case, the user may want to change the student's curriculum. This could happens early in the school term, if a student found that college preparation work was to difficult and wanted to pursue a basic diploma. The user may want to choose to change the curriculum but keep the same class. *Note: a change to curriculum would cause the corresponding Moodle class to be suspended, and the student assigned to a different course.*

However, late in the term, the student will have no chance to complete a new curriculum, and so the better choice will be to complete the chosen classes.

*<span style="color: #e03e2d;"><span style="color: #e03e2d;">In order to manage this use case, a new field needs to be created called "Curriculum Update" The default field value will be "Retain Current Curricula." In this case, we assume there is no change to curricula for active enrollment records. The user must change this field value to "Change Curricula" in order to the curricula to be update in the active enrollment records.</span></span>*

#### ***For recurring students with new plans:***

<p class="callout info">Identify if there is a subset of enrollment records with at\_grade field within the grade span of the newly assigned plan. If there are any enrollment records that meet this criteria, continue. If no records found, skip this check</p>

<p class="callout info">Find enrollment records that have status = ***complete*** in the student's current grade span. Find the matching template record in the new plan by matching the class fields</p>

<p class="callout info">Exclude any template records from the enrollment algorithm that have been matched by the class field to any completed enrollment record</p>

<p class="callout info">Find enrollment records that have status = ***active*** in the student's current grade span. Exclude any template records from the enrollment algorithm that have been matched by the class field to any completed enrollment record.</p>

<p class="callout info">Only if the new plan has the field "Curriculum update" = "change curricula" then update the curriclum field in the enrollment record to match the curriculum field in the template template record (that has same class).</p>

<p class="callout info">Proceed to create enrollment records as described in the enrollment algorithm, but exclude the records that have already been matched to active/completed enrollments.</p>

# 6. Transcript GPA Calculation

### Reference Information

#### [Transcript UI](https://bsa.lynops.com/books/personal-education-management-system/page/transcript-ui "Transcript UI")

{{@205#bkmrk-view-%C2%A0googlesheet-ex}}

#### [Enrollments Table](https://bsa.lynops.com/books/personal-education-management-system/page/enrollments-table "Enrollments Table")

{{@109#bkmrk-all-the-grade-points}}

#### [Student Terms](https://bsa.lynops.com/books/personal-education-management-system/page/student-terms-table)

{{@104#bkmrk-there-are-four-gpa-f}}

### GPA Functions

<table border="1" id="bkmrk-calendar-functions-n" style="width: 100%; height: 352.75px;"><colgroup><col style="width: 12.236%;"></col><col style="width: 13.104%;"></col><col style="width: 74.6601%;"></col></colgroup><tbody><tr style="height: 92.8125px;"><td style="height: 92.8125px;">[GPA Calculations](https://bsa.lynops.com/books/personal-education-management-system/page/6-transcript-gpa-calculation-tbd)</td><td style="height: 92.8125px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 92.8125px;">#### 6.1 Calculate Grade Point Fields in Enrollment record

</td></tr><tr style="height: 57.7812px;"><td style="height: 57.7812px;">  
</td><td style="height: 57.7812px;">*Purpose*</td><td style="height: 57.7812px;">*Based on the letter grade, look up the grade points from the [Marking System](https://cs.studianova.org/admin/marksystem) table. The [Marking System](https://cs.studianova.org/admin/marksystem) table allows schools to customize the points they give based on a letter grade.*</td></tr><tr style="height: 57.7812px;"><td style="height: 57.7812px;">  
</td><td style="height: 57.7812px;">*Trigger*</td><td style="height: 57.7812px;">*Update whenever *[enrollment](https://cs.studianova.org/admin/enrollments) status = completed, and then whenever t*here is a change to the [enrollment](https://cs.studianova.org/admin/enrollments) letter grade.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Conditions*</td><td style="height: 46.5938px;">*[Marking System](https://cs.studianova.org/admin/marksystem) table has been configured.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function can only run after students have been enrolled in courses.*</td></tr><tr style="height: 38.1875px;"><td style="height: 38.1875px;">all fields are first set to unweighted values</td><td style="height: 38.1875px;">Step 1</td><td style="height: 38.1875px;">Based on [enrollment](https://cs.studianova.org/admin/enrollments) letter grade, look up grade points in [M](https://cs.studianova.org/admin/marksystem)[arking System](https://cs.studianova.org/admin/marksystem) table

Set [enrollment](https://cs.studianova.org/admin/enrollments) grade points to [M](https://cs.studianova.org/admin/marksystem)[arking System](https://cs.studianova.org/admin/marksystem) grade points.

Set [enrollment](https://cs.studianova.org/admin/enrollments) <span style="text-decoration: underline;">weighted</span> grade points to [M](https://cs.studianova.org/admin/marksystem)[arking System](https://cs.studianova.org/admin/marksystem) **<span style="color: rgb(224, 62, 45);">grade points.</span>**

Set [enrollment](https://cs.studianova.org/admin/enrollments) alternate grade points to [M](https://cs.studianova.org/admin/marksystem)[arking System](https://cs.studianova.org/admin/marksystem) alternate grade points.

Set [enrollment](https://cs.studianova.org/admin/enrollments) alternate <span style="text-decoration: underline;">weighted </span>grade points to [M](https://cs.studianova.org/admin/marksystem)[arking System](https://cs.studianova.org/admin/marksystem) alternate **<span style="color: rgb(224, 62, 45);">grade points.</span>**

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">weighted fields are increased only when appropriate</td><td style="height: 29.7969px;">Step 2</td><td style="height: 29.7969px;">Look up [enrollment](https://cs.studianova.org/admin/enrollments) | [curriculum](https://cs.studianova.org/admin/curriculum) | [Compliance Tags](https://cs.studianova.org/admin/compliancetags).

If associated curriculum has ANY compliance tag with "Weight GPA" = yes Then:

Set [enrollment](https://cs.studianova.org/admin/enrollments) weighted points to [M](https://cs.studianova.org/admin/marksystem)[arking System](https://cs.studianova.org/admin/marksystem) weighted points.

Set [enrollment](https://cs.studianova.org/admin/enrollments) alternate weighted points to [M](https://cs.studianova.org/admin/marksystem)[arking System](https://cs.studianova.org/admin/marksystem) alternate weighted points.

</td></tr><tr><td>fields are zeroed if excluded from gpa calculations</td><td>Step 3</td><td>Look up [enrollment](https://cs.studianova.org/admin/enrollments) | [Class ](https://cs.studianova.org/admin/classlist)| Exclude GPA

If Exclude GPA = standard GPA then

Set [enrollment](https://cs.studianova.org/admin/enrollments) Grade Points to zero

Set [enrollment](https://cs.studianova.org/admin/enrollments) Weighted Grade Points to zero

If Exclude GPA = alternate GPA then

Set [enrollment](https://cs.studianova.org/admin/enrollments) alternate grade points to zero

Set [enrollment](https://cs.studianova.org/admin/enrollments) alternate weighted Grade Points to zero

</td></tr><tr><td>END</td><td>  
</td><td>  
</td></tr></tbody></table>

#### 6.1 Test Case

<table border="1" id="bkmrk-enrollment-grades-cl" style="border-collapse: collapse; width: 100%; height: 335.36px;"><colgroup><col style="width: 8.77627%;"></col><col style="width: 11.1248%;"></col><col style="width: 10.754%;"></col><col style="width: 11.2485%;"></col><col style="width: 14.8316%;"></col><col style="width: 16.6888%;"></col><col style="width: 14.2151%;"></col><col style="width: 12.3609%;"></col></colgroup><tbody><tr style="height: 96.9844px;"><td style="height: 96.9844px;">Enrollment Grades</td><td style="height: 96.9844px;">Class is Excluded Standard</td><td style="height: 96.9844px;">Class is Excluded Alternate</td><td style="height: 96.9844px;">Curriculum tag is Weighted = yes</td><td style="height: 96.9844px;">Marking System Grade Points</td><td style="height: 96.9844px;">Marking System Weighted Grade Points</td><td style="height: 96.9844px;">Marking System alternate Grade Points</td><td style="height: 96.9844px;">Marking System Alternate Weighted Grade Points</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">A+</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">yes</td><td style="height: 29.7969px;">4.0</td><td style="height: 29.7969px;">5.0</td><td style="height: 29.7969px;">4.0</td><td style="height: 29.7969px;">5.0</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">A+</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;"><span style="color: rgb(224, 62, 45);">no</span></td><td style="height: 29.7969px;">4.0</td><td style="height: 29.7969px;"><span style="color: rgb(224, 62, 45);">4.0</span></td><td style="height: 29.7969px;">4.0</td><td style="height: 29.7969px;"><span style="color: rgb(224, 62, 45);">4.0</span></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">B-</td><td style="height: 29.7969px;">Excluded</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">no</td><td style="height: 29.7969px;">0</td><td style="height: 29.7969px;">0</td><td style="height: 29.7969px;">3.0</td><td style="height: 29.7969px;">4.0</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">C</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;"><span style="color: rgb(224, 62, 45);">no</span></td><td style="height: 29.7969px;">2.0</td><td style="height: 29.7969px;"><span style="color: rgb(224, 62, 45);">2.0</span></td><td style="height: 29.7969px;">2.0</td><td style="height: 29.7969px;"><span style="color: rgb(224, 62, 45);">2.0</span></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">D-</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">yes</td><td style="height: 29.7969px;">0.9</td><td style="height: 29.7969px;">1.9</td><td style="height: 29.7969px;">1.0</td><td style="height: 29.7969px;">2.0</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">B</td><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">Excluded</td><td style="height: 29.7969px;">no</td><td style="height: 29.7969px;">3.0</td><td style="height: 29.7969px;">3.0</td><td style="height: 29.7969px;">0</td><td style="height: 29.7969px;">0</td></tr></tbody></table>


### Marking System Table Example

[![image.png](https://bsa.lynops.com/uploads/images/gallery/2024-02/scaled-1680-/image.png)](https://cs.studianova.org/admin/marksystem)

<table border="1" id="bkmrk-gpa-calculations-not" style="width: 100%; height: 926.189px;"><colgroup><col style="width: 12.236%;"></col><col style="width: 13.104%;"></col><col style="width: 74.6601%;"></col></colgroup><tbody><tr style="height: 92.8125px;"><td style="height: 92.8125px;">[GPA Calculations](https://bsa.lynops.com/books/personal-education-management-system/page/6-transcript-gpa-calculation-tbd)</td><td style="height: 92.8125px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 92.8125px;">#### 6.2 Calculate Student Term GPAs

</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;">  
</td><td style="height: 57.75px;">*Purpose*</td><td style="height: 57.75px;">*The GPAs are calculated based on the points awarded for each enrollment and the units earned for each enrollment record.*</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;">  
</td><td style="height: 57.75px;">*Trigger*</td><td style="height: 57.75px;">*When ever there is a change to the any of the points fields.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Conditions*</td><td style="height: 46.5938px;">*Points fields are not empty.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function runs after the points have been updated.*</td></tr><tr style="height: 38.1875px;"><td style="height: 38.1875px;">  
</td><td style="height: 38.1875px;">Step 1</td><td style="height: 38.1875px;">Calculate [Student Term](https://cs.studianova.org/admin/studentterms) Units Earned. Sum all associated [enrollment](https://cs.studianova.org/admin/enrollments) units earned.

</td></tr><tr style="height: 111.547px;"><td style="height: 111.547px;">  
</td><td style="height: 111.547px;">Step 2</td><td style="height: 111.547px;">Calculate <span style="text-decoration: underline;">standard adjusted</span> [Student Term](https://cs.studianova.org/admin/studentterms) Units Earned.

Sum all units earned from all [enrollment](https://cs.studianova.org/admin/enrollments) records where | [Class ](https://cs.studianova.org/admin/classlist)| Exclude GPA = standard

Subtract excluded units (above) from [Student Term](https://cs.studianova.org/admin/studentterms) Units Earned

</td></tr><tr style="height: 109.547px;"><td style="height: 109.547px;">  
</td><td style="height: 109.547px;">Step 3</td><td style="height: 109.547px;">Calculate <span style="text-decoration: underline;">alternate adjusted</span> [Student Term](https://cs.studianova.org/admin/studentterms) Units Earned.

Sum all units earned from all [enrollment](https://cs.studianova.org/admin/enrollments) records where | [Class ](https://cs.studianova.org/admin/classlist)| Exclude GPA = alternate

Subtract excluded units (above) from [Student Term](https://cs.studianova.org/admin/studentterms) Units Earned

</td></tr><tr style="height: 142.516px;"><td style="height: 142.516px;">  
</td><td style="height: 142.516px;">Step 4</td><td style="height: 142.516px;">Calculate [Student Term](https://cs.studianova.org/admin/studentterms) GPA:

Calculate <span style="text-decoration: underline;">total points</span>:

For each [enrollment](https://cs.studianova.org/admin/enrollments) record

sum (units earned x grade points)

GPA = <span style="text-decoration: underline;">total points</span> / standard adjusted units earned (step 2)

</td></tr><tr style="height: 133.516px;"><td style="height: 133.516px;">  
</td><td style="height: 133.516px;">Step 5</td><td style="height: 133.516px;">Calculate [Student Term](https://cs.studianova.org/admin/studentterms) Weighted GPA:

Calculate <span style="text-decoration: underline;">total points</span>:

For each [enrollment](https://cs.studianova.org/admin/enrollments) record

sum (units earned x weighted points)

GPA = <span style="text-decoration: underline;">total points</span> / standard adjusted units earned (step 2)

</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 6</td><td style="height: 35.3906px;">Calculate [Student Term](https://cs.studianova.org/admin/studentterms) Alternate GPA:

Calculate <span style="text-decoration: underline;">total points</span>:

For each [enrollment](https://cs.studianova.org/admin/enrollments) record,

sum (units earned x alternate grade points)

GPA = total points / alternate adjusted units earned (step 3)

</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;">Step 7</td><td style="height: 35.3906px;">Calculate [Student Term](https://cs.studianova.org/admin/studentterms) Alternate Weighted GPA:

Calculate <span style="text-decoration: underline;">total points</span>:

For each [enrollment](https://cs.studianova.org/admin/enrollments) record,

sum (units earned x alternate weighted grade points)

GPA = total points / alternate adjusted units earned (step 3)

</td></tr><tr style="height: 35.3906px;"><td style="height: 35.3906px;">END</td><td style="height: 35.3906px;">  
</td><td style="height: 35.3906px;"></td></tr></tbody></table>

#### 6.2 Test Case

<table border="1" id="bkmrk-units-earned-standar" style="border-collapse: collapse; width: 100%; height: 309.36px;"><colgroup><col style="width: 18.4178%;"></col><col style="width: 9.39431%;"></col><col style="width: 11.3721%;"></col><col style="width: 11.8665%;"></col><col style="width: 12.4845%;"></col><col style="width: 12.7324%;"></col><col style="width: 12.7312%;"></col><col style="width: 11.1248%;"></col></colgroup><tbody><tr style="height: 80.1875px;"><td style="height: 80.1875px;">  
</td><td style="height: 80.1875px;">Units Earned</td><td style="height: 80.1875px;">Standard adjusted Units earned</td><td style="height: 80.1875px;">Alternate Adjusted Units Earned</td><td style="height: 80.1875px;">Grade Points</td><td style="height: 80.1875px;">Weighted Grade Points</td><td style="height: 80.1875px;">Alternate Grade Points</td><td style="height: 80.1875px;">Alternate Weighted Grade Points</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">enrollment 1</td><td style="height: 29.7969px;">5</td><td style="height: 29.7969px;">5</td><td style="height: 29.7969px;">5</td><td style="height: 29.7969px;">4.0</td><td style="height: 29.7969px;">5.0</td><td style="height: 29.7969px;">4.0</td><td style="height: 29.7969px;">5.0</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">enrollment 2 - excluded standard</td><td style="height: 46.5938px;">5</td><td style="height: 46.5938px;">0</td><td style="height: 46.5938px;">5</td><td style="height: 46.5938px;">0</td><td style="height: 46.5938px;">0</td><td style="height: 46.5938px;">2.0</td><td style="height: 46.5938px;">3.0</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">enrollment 3</td><td style="height: 29.7969px;">5</td><td style="height: 29.7969px;">5</td><td style="height: 29.7969px;">5</td><td style="height: 29.7969px;">3.0</td><td style="height: 29.7969px;">3.0</td><td style="height: 29.7969px;">3.0</td><td style="height: 29.7969px;">3.0</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">enrollment 4 - excluded alternate</td><td style="height: 46.5938px;">5</td><td style="height: 46.5938px;">5</td><td style="height: 46.5938px;">0</td><td style="height: 46.5938px;">2.0</td><td style="height: 46.5938px;">2.0</td><td style="height: 46.5938px;">0</td><td style="height: 46.5938px;">0</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Student Term Values</td><td style="height: 29.7969px;">20</td><td style="height: 29.7969px;">15</td><td style="height: 29.7969px;">15</td><td style="height: 29.7969px;">(4.0x5) + (0x5) +(3.0x5) +(2.0x5) = 45

**45/15 = 3.0**

</td><td style="height: 29.7969px;">(5.0x5) + (0x5) +(3.0x5) +(2.0x5) = 50

**50/15 = 3.33**

</td><td style="height: 29.7969px;">(4.0x5) + (2.0x5) +(3.0x5) +(0x5) = 45

**45/15 = 3.0**

</td><td style="height: 29.7969px;">(5.0x5) + (3.0x5) +(3.0x5) +(0x5) = 55

**55/15 = 3.67**

</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">Student Term Fields</td><td style="height: 46.5938px;">units earned</td><td style="height: 46.5938px;">-</td><td style="height: 46.5938px;">-</td><td style="height: 46.5938px;">GPA</td><td style="height: 46.5938px;">WGPA</td><td style="height: 46.5938px;">AGPA</td><td style="height: 46.5938px;">AWGPA</td></tr></tbody></table>

# 7. Activate Next Student Plan - TBD

The **student plan table** shows the status of the various plans the student has been assigned over time, it is like a log file for the student plans.

- Multiple student plan records may be associated to a student record
- Only one plan may be active at any point in time. **Program\_status =** active.
- There may be other student plan records associated with the student, but their status may not be active.
- The **program start term** field contains information on the school term, not the student term. This is an important value and so the name is stored in the student plan term reocrd field called program start term.

#####   


### Only one student plan record may be active at a time

<p class="callout info">Develop a combination of UI and programming to ensure that only one student plan is active at ay point in time - <span style="color: #e03e2d;">(I have no idea how to do this)</span></p>

#####   


### Find Program start term from start date

When the user assigns the student a plan, they may enter the start date of the plan. For new students is will be important to enter the start date of the plan, as they may be starting in middle of a term. It is important to know if they had less time to complete courses due to a mid-term start date.

<p class="callout info">Based on the start\_date of the student plan, PEMS identifies the starting school term and creates the relationship between school term and the student's plans.</p>

#####   


### Entering State date from Program Start Term

Once a new student has become recurring student, it is easier to enter the **program start term**, rather than the start date. The start date of the student plan should be the corresponding start date ot the **Program start term.**

*However, if the user selects a **Program start term** after a student plan start date has been entered, this function will over-write the start date. We do not want to overwrite a start date as that may contain userful information.*

<p class="callout info">If the **Program start term** is input by the user, then enter the start date from the **Program start term's** start date, but only if the start date field is empty.</p>

### Determining the school term when a student plan is complete

Student Plans are used to create enrollments, but eventually each student will complete their plan and need to be assigned another plan. In the course of 13 years of school, the student will likely complete 6 to 8 plans.

- The student plan is associated to only one school plan in the prgrams of study table. The school plan includes the *total number of terms* required to complete the plan.
- The student's plan record contains the **program start term**.
- To find the last term of the student plan, add the total number of terms to the sequence

<p class="callout info">student plan record: *program start term:* related sequence + related school plan: *total number of terms* = sequence of term the school plan will be completed</p>

### Completing the Active Student Plan

We can find the school term when a student plan should completed (see above). When the last school term in the plan has passed, PEMS can mark the student plan record complete. The student plan record is marked complete based only on the calendar. A student's marks for classes during the plan are not relevent.

So when the current date is passed any student's plan's final term current date, then the student plan record will be marked complete.

<p class="callout info">When the current date is &gt;/= end date of the student plans' final term, then change the status of the student plan to 'completed.</p>

### Activating the next student plan

If there is another student plan record with status = future, then we can automatically activate the next plan record, after we set the satus of the student plan record above to completed. Each student plan is associated to a **program start term**, which has a sequence. The next student plan will have a **program start term** sequence greater than the last student plan record **program start term's** sequence. *The last student plan record will be the record we most recently marked complete in the step above.*

However, there could be multiple student plans with **program start term** sequence greater than the current school term. So we need to find the *lowest* sequence number that is also greater than the last **program start term's** sequence.

<p class="callout info">FInd the student plan record where the **program start term's** squence is greater than the last student plan's **program start term's** sequence, but also the lowest value in all the avaiable student plan records. Set this student plan status to active.</p>

### No future plan exists

If there are no student plan records with status = future, then the student can not automically be assigned the next plan. For students who have had their plan marked completed, but they have no future plan, we will create a filtered report for the user. The user will then assign a plan for these students. Ideally, the user will complete this task before the end of term.

<p class="callout info">Create a filtered list of students who do not have any active student plans for the user to review and address</p>

<p class="callout info">All new student plan records will default to status = future. </p>

### When a Student Plan is activated

When a new student plan is activated, status was changed from future to active. This change in status will trigger the next process, creating the set of enrollment records.

### When a Student plan is Changed before its completion

A student may need to change the plan they are working towards. This may occur after some enrollment records were already created, and some records may be completed while others are not completed.

For a change of plan, the active plan program value field is set to 'suspended' by the user. A new plan will be created as a future plan, then the field status changed from future to active. This set of actions will trigger the creating of new enrollment records.

# 8. Groups Function

<table border="1" id="bkmrk-calendar-functions-n" style="border-collapse: collapse; width: 99.7531%; height: 470.203px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.0124%;"></col></colgroup><tbody><tr style="height: 70.4219px;"><td style="height: 70.4219px;">[Groups](https://bsa.lynops.com/books/personal-education-management-system/page/groups-table "Groups")</td><td style="height: 70.4219px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 70.4219px;">#### 1.0 Create Group records for new Homeroom record

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*When a new homeroom is added, the group records in PEMS are created.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Trigger*</td><td style="height: 29.7969px;">*Runs only one time, when the new homeroom record is added.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*homeroom status field is active.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function runs after a new homeroom record is created*</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;"> </td><td style="height: 57.75px;">Step 1</td><td style="height: 57.75px;">Find Set of all Active Curriculum records.

</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;">  
</td><td style="height: 57.75px;">Step 2</td><td style="height: 57.75px;">Create a Group record for each Curriculum record.

</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;">  
</td><td style="height: 57.75px;">Step 3</td><td style="height: 57.75px;">Set Homeroom = to the new homeroom record created.

</td></tr><tr style="height: 38.375px;"><td style="height: 38.375px;">END</td><td style="height: 38.375px;">  
</td><td style="height: 38.375px;"> </td></tr></tbody></table>

<table border="1" id="bkmrk-groups-not-started-2" style="border-collapse: collapse; width: 99.7531%; height: 480.672px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.0124%;"></col></colgroup><tbody><tr style="height: 99.4844px;"><td style="height: 99.4844px;">[Groups](https://bsa.lynops.com/books/personal-education-management-system/page/groups-table "Groups")</td><td style="height: 99.4844px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 99.4844px;">#### 2.0 Create Group records when a curriculum record has been activated

*note: do not allow new curriculum records to be created with status = active, default must be draft.*

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*When a new curriculum record has been added, group records need to be made for all active homerooms.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Trigger*</td><td style="height: 46.5938px;">*Runs whenever the status field in the curriculum record has been changed to 'active'*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*curriculum status field has been changed from any value to active.*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function runs after the curriculum status has been changed.*</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;"> </td><td style="height: 57.75px;">Step 1</td><td style="height: 57.75px;">Find Set of all Active Homeroom records

</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;">  
</td><td style="height: 57.75px;">Step 2</td><td style="height: 57.75px;">Create a Group record for each homeroom record

</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;">  
</td><td style="height: 57.75px;">Step 3</td><td style="height: 57.75px;">Set Curriculum in the group record = to the newly activated curriculum record.

</td></tr><tr style="height: 38.375px;"><td style="height: 38.375px;">END</td><td style="height: 38.375px;">  
</td><td style="height: 38.375px;"> </td></tr></tbody></table>

<table border="1" id="bkmrk-groups-not-started-3" style="border-collapse: collapse; width: 99.7531%; height: 461.672px;"><colgroup><col style="width: 17.72%;"></col><col style="width: 12.2677%;"></col><col style="width: 70.0124%;"></col></colgroup><tbody><tr style="height: 80.4844px;"><td style="height: 80.4844px;">[Groups](https://bsa.lynops.com/books/personal-education-management-system/page/groups-table "Groups")</td><td style="height: 80.4844px;"><span style="color: rgb(224, 62, 45);">Not started</span></td><td style="height: 80.4844px;">#### 3.0 Deactivate Group when home room is deactivated or Curriculum is deactivated

*note: add active/inactive status field to Group and Homeroom*

</td></tr><tr style="height: 63.375px;"><td style="height: 63.375px;">  
</td><td style="height: 63.375px;">*Purpose*</td><td style="height: 63.375px;">*\#When a curriculum is not longer uses or a homeroom no longer operates, deactivate the associated group.*</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">  
</td><td style="height: 46.5938px;">*Trigger*</td><td style="height: 46.5938px;">*Runs whenever the the status field in the curriculum or homeroom record has been changed to 'inactive'*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Conditions*</td><td style="height: 29.7969px;">*Curriculum status field has been changed from any value to inactive.*

*OR*

*Homeroom status field has been changed to inactive*

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">  
</td><td style="height: 29.7969px;">*Sequence*</td><td style="height: 29.7969px;">*This function runs after the curriculum or homeroom status has been changed.*</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;"> </td><td style="height: 57.75px;">Step 1</td><td style="height: 57.75px;">Find related Group record

</td></tr><tr style="height: 57.75px;"><td style="height: 57.75px;">  
</td><td style="height: 57.75px;">Step 2</td><td style="height: 57.75px;">Set Group record status to inactive.

</td></tr><tr style="height: 38.375px;"><td style="height: 38.375px;">END</td><td style="height: 38.375px;">  
</td><td style="height: 38.375px;"> </td></tr></tbody></table>

# 0.Add New Fields - Completed

##### System Level Fields - Configuration Page

*<span style="color: #e03e2d;">This table page should replace the "parameters" page and table with system level field values below:</span>*

<table border="1" id="bkmrk-field-name-descripti" style="border-collapse: collapse; width: 100%; height: 502.062px;"><tbody><tr style="height: 57.75px;"><td style="width: 33.3745%; height: 57.75px;">**Field Name**</td><td style="width: 33.3745%; height: 57.75px;">**Description**</td><td style="width: 33.3745%; height: 57.75px;">**Reference**</td></tr><tr style="height: 63.3906px;"><td style="width: 33.3745%; height: 63.3906px;">Terms Per Year</td><td style="width: 33.3745%; height: 63.3906px;">This is already column in the parameters table, convert to a field on the configuration page </td><td style="width: 33.3745%; height: 63.3906px;">[https://cs.studianova.org/admin/parameters](https://bsa.lynops.com/parameters)</td></tr><tr style="height: 63.3906px;"><td style="width: 33.3745%; height: 63.3906px;">Days Per Year</td><td style="width: 33.3745%; height: 63.3906px;">This is already column in the parameters table, convert to a field on the configuration page </td><td style="width: 33.3745%; height: 63.3906px;">[https://cs.studianova.org/admin/parameters](https://bsa.lynops.com/parameters)</td></tr><tr style="height: 63.3906px;"><td style="width: 33.3745%; height: 63.3906px;">School Beginning Date</td><td style="width: 33.3745%; height: 63.3906px;">This is already column in the parameters table, convert to a field on the configuration page </td><td style="width: 33.3745%; height: 63.3906px;">[https://cs.studianova.org/admin/parameters](https://bsa.lynops.com/parameters)</td></tr><tr style="height: 63.3906px;"><td style="width: 33.3745%; height: 63.3906px;">Back Years</td><td style="width: 33.3745%; height: 63.3906px;">This is already column in the parameters table, convert to a field on the configuration page </td><td style="width: 33.3745%; height: 63.3906px;">[https://cs.studianova.org/admin/parameters](https://bsa.lynops.com/parameters)</td></tr><tr><td style="width: 33.3745%;">Attrition Rate</td><td style="width: 33.3745%; height: 63.3906px;">This is already column in the parameters table, convert to a field on the configuration page </td><td style="width: 33.3745%; height: 63.3906px;">[https://cs.studianova.org/admin/parameters](https://bsa.lynops.com/parameters)</td></tr><tr><td style="width: 33.3745%;">Student Teacher Ratio</td><td style="width: 33.3745%; height: 63.3906px;">This is already column in the parameters table, convert to a field on the configuration page </td><td style="width: 33.3745%; height: 63.3906px;">[https://cs.studianova.org/admin/parameters](https://bsa.lynops.com/parameters)</td></tr><tr style="height: 67.7812px;"><td style="width: 33.3745%; height: 67.7812px;">Promotion Date </td><td style="width: 33.3745%; height: 67.7812px;">Date field when the students are promoted by grade level</td><td style="width: 33.3745%; height: 67.7812px;">[1.Calendar Functions](https://bsa.lynops.com/books/personal-education-management-system/page/1-calendar-functions-ready)</td></tr><tr style="height: 63.375px;"><td style="width: 33.3745%; height: 63.375px;">Lowest Grade Level </td><td style="width: 33.3745%; height: 63.375px;">Menu select from K-12 list</td><td style="width: 33.3745%; height: 63.375px;">  
</td></tr><tr style="height: 29.7969px;"><td style="width: 33.3745%; height: 29.7969px;">Highest Grade Level</td><td style="width: 33.3745%; height: 29.7969px;">Menu select from K-12 list</td><td style="width: 33.3745%; height: 29.7969px;">  
</td></tr><tr style="height: 29.7969px;"><td style="width: 33.3745%; height: 29.7969px;">  
</td><td style="width: 33.3745%; height: 29.7969px;">  
</td><td style="width: 33.3745%; height: 29.7969px;">  
</td></tr></tbody></table>

##### Table Field Updates

<table border="1" id="bkmrk-field-name-descripti-0" style="border-collapse: collapse; width: 100%; height: 835.739px;"><tbody><tr style="height: 29.7017px;"><td style="width: 33.3745%; height: 29.7017px;">**Field Name**</td><td style="width: 33.3745%; height: 29.7017px;">**Description**</td><td style="width: 33.3745%; height: 29.7017px;">**Reference**</td></tr><tr style="height: 80.0994px;"><td style="width: 33.3745%; height: 80.0994px;">Term Starts</td><td style="width: 33.3745%; height: 80.0994px;">**Term Label Table** - menu select

menu options: "i*n academic start year*" and "in academic end year"

</td><td style="width: 33.3745%; height: 80.0994px;">[Default Term Years](https://bsa.lynops.com/books/personal-education-management-system/page/4-create-set-of-school-terms-ready)  
</td></tr><tr style="height: 80.0994px;"><td style="width: 33.3745%; height: 80.0994px;">Term Ends</td><td style="width: 33.3745%; height: 80.0994px;">**Term Label Table -** menu select

menu options: "in academic start year" and "*in academic end year*"

</td><td style="width: 33.3745%; height: 80.0994px;">[Default Term Years](https://bsa.lynops.com/books/personal-education-management-system/page/4-create-set-of-school-terms-ready)</td></tr><tr style="height: 57.7699px;"><td style="width: 33.3745%; height: 57.7699px;">Assessment Window</td><td style="width: 33.3745%; height: 57.7699px;">Term Label table - integer value </td><td style="width: 33.3745%; height: 57.7699px;">[Assessment Module](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-module)</td></tr><tr style="height: 66.3636px;"><td style="width: 33.3745%; height: 66.3636px;">Type - change menu options</td><td style="width: 33.3745%; height: 66.3636px;">Assessment Code table - change menu options to "Level Equivalent", "Percentile Rank", "Competency" </td><td style="width: 33.3745%; height: 66.3636px;">[Assessment Module](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-module)</td></tr><tr style="height: 57.7699px;"><td style="width: 33.3745%; height: 57.7699px;">Subject field - make mandatory</td><td style="width: 33.3745%; height: 57.7699px;">Assessment Code table</td><td style="width: 33.3745%; height: 57.7699px;">[Assessment Module](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-module)</td></tr><tr style="height: 57.7699px;"><td style="width: 33.3745%; height: 57.7699px;">Percentile Rank</td><td style="width: 33.3745%; height: 57.7699px;">Marks Matrix table - add a decimal field, two places</td><td style="width: 33.3745%; height: 57.7699px;">[Assessment Module](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-module)</td></tr><tr style="height: 57.7699px;"><td style="width: 33.3745%; height: 57.7699px;">Relationship - relate assessment results table to student term table</td><td style="width: 33.3745%; height: 57.7699px;">multiple assessment results per student term</td><td style="width: 33.3745%; height: 57.7699px;">[Assessment Module](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-module)</td></tr><tr style="height: 57.7699px;"><td style="width: 33.3745%; height: 57.7699px;">Percentile Rank</td><td style="width: 33.3745%; height: 57.7699px;">Assessment Result table - integer value</td><td style="width: 33.3745%; height: 57.7699px;">[Assessment Module](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-module)</td></tr><tr style="height: 57.7699px;"><td style="width: 33.3745%; height: 57.7699px;">Moodle Learning Plan</td><td style="width: 33.3745%; height: 57.7699px;">program of study table - text field</td><td style="width: 33.3745%; height: 57.7699px;">[Assessment Module](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-module)</td></tr><tr style="height: 57.7699px;"><td style="width: 33.3745%; height: 57.7699px;">Learning Plan Status</td><td style="width: 33.3745%; height: 57.7699px;">program of study table - text field</td><td style="width: 33.3745%; height: 57.7699px;">[Assessment Module](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-module)</td></tr><tr style="height: 57.7699px;"><td style="width: 33.3745%; height: 57.7699px;">Plan GPA</td><td style="width: 33.3745%; height: 57.7699px;">Student Plan Table - decimal value, two places</td><td style="width: 33.3745%; height: 57.7699px;">[Student Plan Table](https://bsa.lynops.com/books/personal-education-management-system/page/student-plan-table)</td></tr><tr style="height: 57.7699px;"><td style="width: 33.3745%; height: 57.7699px;">Expiry Date</td><td style="width: 33.3745%; height: 57.7699px;">authorizations table - date field</td><td style="width: 33.3745%; height: 57.7699px;">[Authorizations](https://bsa.lynops.com/books/personal-education-management-system/page/authorizations)</td></tr><tr style="height: 29.7727px;"><td style="width: 33.3745%; height: 29.7727px;">  
</td><td style="width: 33.3745%; height: 29.7727px;">  
</td><td style="width: 33.3745%; height: 29.7727px;">  
</td></tr><tr style="height: 29.7727px;"><td style="width: 33.3745%; height: 29.7727px;">  
</td><td style="width: 33.3745%; height: 29.7727px;">  
</td><td style="width: 33.3745%; height: 29.7727px;">  
</td></tr></tbody></table>

##### Relationship and Table Changes

<table border="1" id="bkmrk-tables-description-r" style="border-collapse: collapse; width: 100%; height: 304.938px;"><tbody><tr style="height: 29.7969px;"><td style="width: 33.3745%; height: 29.7969px;">**Tables**</td><td style="width: 33.3745%; height: 29.7969px;">**Description**</td><td style="width: 33.3745%; height: 29.7969px;">**Reference**</td></tr><tr style="height: 57.7812px;"><td style="width: 33.3745%; height: 57.7812px;">Relationship - relate assessment results table to student term table</td><td style="width: 33.3745%; height: 57.7812px;">multiple assessment results per student term</td><td style="width: 33.3745%; height: 57.7812px;">[Assessment Module](https://bsa.lynops.com/books/personal-education-management-system/page/assessment-module)</td></tr><tr style="height: 57.7812px;"><td style="width: 33.3745%; height: 57.7812px;">Delete CredAuthorizations table</td><td style="width: 33.3745%; height: 57.7812px;">replace with multi-select field in authorizations table (see below)</td><td style="width: 33.3745%; height: 57.7812px;">[Authorizations](https://bsa.lynops.com/books/personal-education-management-system/page/authorizations)</td></tr><tr style="height: 66.3906px;"><td style="width: 33.3745%; height: 66.3906px;">For Authorizations, add a multi-select pick list that allows users to select from the credential table.</td><td style="width: 33.3745%; height: 66.3906px;">Authorizations</td><td style="width: 33.3745%; height: 66.3906px;">[Authorizations](https://bsa.lynops.com/books/personal-education-management-system/page/authorizations)</td></tr><tr style="height: 33.5938px;"><td style="width: 33.3745%; height: 33.5938px;">templates are child records to subject requirements</td><td style="width: 33.3745%; height: 33.5938px;">many template to one subject requirement record</td><td style="width: 33.3745%; height: 33.5938px;">[3.Programs of Study and Subject Requirements](https://bsa.lynops.com/books/personal-education-management-system/page/4-programs-of-study-and-subject-requirements)</td></tr><tr style="height: 29.7969px;"><td style="width: 33.3745%; height: 29.7969px;">  
</td><td style="width: 33.3745%; height: 29.7969px;">  
</td><td style="width: 33.3745%; height: 29.7969px;">  
</td></tr><tr style="height: 29.7969px;"><td style="width: 33.3745%; height: 29.7969px;">  
</td><td style="width: 33.3745%; height: 29.7969px;">  
</td><td style="width: 33.3745%; height: 29.7969px;">  
</td></tr></tbody></table>

# Moodle Considerations - NON DEV

Interface between PEMS and Moodle

# Moodle Configuration

In order for PEMS to function as a cohesive system, Moodle courses and configurations must be aligned to the school architecture.

Terms - the length of a school term will influence the length of a Moodle Class, or rather how much work is contained in the class. A School with a term length of 18 weeks will required Moodle courses with 18 weeks worth of work.

Course ID - the SIS requires the Course ID to be related to the Class ID manages in the SIS. Changing Course ID will break integration between the SIS and Moodle

Competencies -

# New Page



# Configuration issues with Moodle

##### Weeks in a term

In the school Configuration, administration can decide the number of terms in a school year as well as the number of number of weeks in a term.

Out of the box, Moodle's courses all assume a school year with two 18-week semesters. Many of the classes are set up for 18 weeks of work. If the school does not follow this approach, then all the classes will need to be manually updated to reflect the length of term the school has chosen.

# Archive



# SIS Configuration Options

##### Academic Years

The school creates a record for each academic year in operation, and may choose any academic year start and end dates

##### Term Label Records

The school creates Term Label records to define the number of terms, start and end dates, and what the term will be called. The number of term label records is the number of terms to school operate

##### Vacation Days

The user specifies all vacations days the school is not in operation. Vacation days are used to calculate total education time provided.

##### Schools

The school creates jurisdictional definitions of school by making school records an linking to the various grade spans. A grade span should not be longer than a school

##### Other Schools

Other schools are the schools you student transfer in from or transfer out to. If class credit is given from a transcript from a different school, the school is recorded.

##### Grade Levels

A list of grade levels taught in this instance fofthe PEMS. Add grade level record for each grade level the school operates.

##### Grade Spans

Grade spans are planning horizons for academic goals. Create a grade span record for each span and specify the start and end grade in the span.

##### Class List

The school creates a class for each class in the course catalog. The name of the class appears on the official transcript.

##### Curriculum List

The school creates their own classes in Moodle and has complete control over each and every activity the students will do. These Moodle Course list is related to the School's class list. The user specifies which Moodle Courses should be related to which classes. Class names appear on the student transcript, curriculum course names do nor appear on the transcript.

##### Compliance Tags

Compliance tags are user-defined and reflect the various authorizations at the curriculum level, such as AP courses. The same tags may be applied to the class. For the class list, the tags reflect a requirement for a specifically authorized curriculum. For the curriculum list the tags reflect the authorizations that have been achieved.

##### Marks System

Every Jurisdiction has a its own way of recording final grades, some schools use scores of 1 though 10, other schools use grades A through F, where some schools only provide pass/no pass options for grades. All schools must produce a grade point average for the student, in he USA this is a 1 through 4 scale. The marks system records related the transcript final grade to the grade points for each school.

##### Sections

The number of students taking a Moodle course is not limited in any way. However the number of students assigned to a specific teacher of the Moodle Course may be limited using section records. The user may define multiple section records per curriculum record (Moodle Course) to manage the number of students each teacher has to look after.

##### Subjects

Create an subject list the school would like to track. Subject records are specified in each class. Subjects are defined to sum of requirements needed for programs of study.

##### Programs of Study

Create a plan record that add the template records. There are unlimited number of plans that can be defined. As part of the plan, define "*template"* records that specify which classes students should take in which term for each plan.

##### Assessment Codes

Create an assessment code record for every assessment test or exam the school intends to use. As part of the assessment code, define *"marks matrix"* records that normalize test scores for grade level equivalents.

##### Teacher Credential Types

Each jurisdiction and grade level required different types of credentials. Create a list of credential types that authorize teachers to teach various classes.

##### Parameters

<span style="background-color: #fbeeb8;">TBD</span>

# PEMS System-Wide Work Flow - ARCHIVE

### Before Any Student May be Enrolled

##### School Configuration

1. Configure grade levels, grade spans, and schools
2. Configure term label database
3. Create academic year records sufficient to graduate the youngest student at the highest possible level
4. Configure time delays for automation 
    - For teachers to grade final assignments at the end of term - 1 week minimum
    - For student promotion after end of year - two week minimum

##### Academic Program Configuration

1. Define s**ubjects** to be taught
2. Create/Upload **Class** List - *each linked to one subject record*
3. Create/Upload **Curriculum** list (Moodle course List) - *each linked to one subject record*
4. Build a program **plan**
    1. insert multiple related **subject requirement** records - *each linked to one subject record*
    2. under each subject requirement, insert multiple related **template** records 
        - *NOTE: template records are related to one plan, one subject requirement, and one class, and one curriculum record.*
        - *The subject requirement record, the class record, and the curriculum records are all linked to the same subject record. Subject relationship between these records is used to filter the options, but is not used to restrict the options, at this point.*
5. Complete building all the program plans so that there is at least one plan per grade span.

###   


### Ready to Enroll Students

##### Enrolling a new student

1. CRM side completes required information, sends invoice and gets all forms signed, clicks a button to enroll student - leads/contacts database of the out-of-the-box Krayin config
2. Student record created in the SIS side, status = planned 
    1. *<span style="color: #236fa1;"><span style="color: #236fa1;">Student email, password and user IDs are created in Moodle, Key Cloak and </span></span>*<span style="color: #236fa1;">*Next Cloud*</span>
    2. *<span style="color: #236fa1;">Form letter is emailed to guardian with log-in directions and other information</span>*
3. Student field calculations are automatically estimating time to graduation.
4. Student term records created by automation
5. Student term records added/deleted if the start date moves
6. Student Plan is assigned
7. Student enrollments records are created for the plan and related to the student terms created in step 4.

#####   


##### Changing the Plan

1. The current plan is deactivated - Incomplete enrollment records are deleted
2. A new plan record is created /activate 
    - Enrollments for classes that have not been deleted are added
    - If the student already completed an enrollment for a class, the enrollment records are not added.

##### At the End of Term

1. <span style="color: #236fa1;">*After time delay specified in user configuration- <span style="text-decoration: underline;">show a button </span>that allows the admin to Import grades from Moodle to the SIS and default grades based on Moodle raw scores*</span>
2. Alert user to review grades - teachers and admins may adjust final grades manually
3. <span style="color: #e03e2d;">Allow user to select 'continue curriculum' for each enrollment where the student will work on the same Moodle class in the next term. The student did not complete enough of the work to get credit (note field exist yet)</span>
    1. Excludes this enrollment from automatic Moodle course dis enrollment
    2. Marks the enrollment record complete the enrollment record, and award half the units
    3. Create a duplicate enrollment record for the very next term (optional or required)
4. After review complete, user selects a button that sets all the term's enrollment records to complete 
    1. <span style="color: #236fa1;">*This step automatically suspends access to Moodle courses for any completed enrollment records*</span>
5. Automatically activate the next term's enrollment records 
    1. *<span style="color: #236fa1;">When an enrollment record is made active, this triggers the enrollment is the Moodle course</span>*
6. View set of poorly performing students - one failing enrollment (F) or 2 nearly failing (D) 
    1. Allow user to select 'repeat' in the student promote field, to stop end of year automatic promotion.

#####   


##### Promoting Students

1. After time delay specified in user configuration- automatically advance all students 'current grade level' by one
2. Do not promote students who have 'repeat' selected in the promote field, the default for all new students is 'promote'
3. After promotion, show the students who have not been promoted and allow the user to adjust if needed.
4. Automation will update the grade span of the student  
    
    1. When a student has a grade span change, new student term records will automatically be create for that student
    2. If the student has a student plan record found for the new grade span, and if only one record has been found, and if that record has a status = future, activate the student plan
5. Automation will create the student's new enrollment records - note this happens after automation creates the new student term records

##### Assigning New Student Plans

*When students enter a new grade span, their old plan will not cross-over, a new plan must be assigned. This only happens at the end of the offical end of the academic year.*

1. Create a filtered view of students who do not have plans assigned and who have been promoted into a new grade span.
2. Allow user to work on assigning new plans, this must be completed before the start of the next academic year 
    - *<span style="color: #e03e2d;"><span style="color: #e03e2d;">Need a default plan - create a field for this - recurring students that do not have a plan selected by the user will be automatically assigned the default plan prior to start of the next school year. If only one plan is create for a grade span, it is marked default.</span></span>*
3. When a new student plan is assigned, create the enrollment records automatically

##### Dis-enrolling a Student

1. Create a button/view specifically for dis-enrolling a student
2. Set the date of dis-enrollment
3. Set the status field to graduated, dis-enrolled, or expelled. 
    1. *<span style="color: #236fa1;"><span style="color: #236fa1;">Deleted all enrollment records that will be no be completed by the dis-enrollment date</span></span>*
    2. *<span style="color: #236fa1;">Create a current transcript record, showing current enrollments as incomplete</span>*
    3. *<span style="color: #236fa1;">email current transcript record to </span>*<span style="color: #236fa1;">*guardian*</span>
    4. *<span style="color: #236fa1;"><span style="color: #236fa1;">On date of dis-enrollment, suspend user from Moodle and Next cCoud.</span></span>*

##### Recording Assessments - TBD

# 4. Create Set of School Terms - Ready

### Purpose

<span style="font-weight: 400;">For every academic year, there needs to be a user-specified number of term records, so when a new academic year record is added, the program should automatically create the associated term records for that year. The program knows how many term records to make, and how they should be configured from the records in the term label table. </span>

#### ***Term Labels***

The user adds one “term label” record to represent each term in a general school year. The number of records in the term label table equals the number of terms in a year. There are start days and start months fields in the term label records, but there are no actual years since the term label is general in nature and applies to any year. The **Terms** records are created using the information in the term label records.

Term labels records can not be associated with a year since, so there can not be a date field in the term label records.

The term label sequence shows the order of the terms as the academic year progresses.

#### ***Terms (or School Terms)***

Terms are a list of actual terms the school is/was/will be in operation. They have a start date and an end date, and are associated with an Academic Year and a **term label.**

The term sequence, the **<span style="text-decoration: underline;">ordinate</span>** field, continues from 1, the very first term in the system, continuously through all terms of operation. These will follow the term start dates as the start dates will also indicate the order of the terms.

#### Setting the default term start and end dates

Information in the term label record and the academic years are used to set the default term start and end dates. The user may manually adjust these dates year to year, as the same date may fall on a Monday one year but a Tuesday the next year. Setting the default term dates helps the user to pick an appropriate date for each term.

<span style="font-weight: 400;">While the term record must contain the actual start and end dates, the term label record only contains a general start day and start month. </span>

##### **<span style="color: #e03e2d;">Academic Years generally cross over a calendar year, so the actual year of the term is difficult to figure out.</span>**

<span style="text-decoration: underline; background-color: #fbeeb8;"><span style="font-weight: 400; color: #000000; text-decoration: underline;">For this reason the following two fields must be added to the ***Term label*** record:</span></span>

<p class="callout warning"><span style="color: #000000;"><span style="font-weight: 400;">Add the fields "Term Starts" &amp; "</span><span style="font-weight: 400;">Term Ends" to the term label table</span></span></p>

<p class="callout warning"><span style="font-weight: 400; color: #000000;">For each of the fields above, menu options are the same: <span style="text-decoration: underline;">in academic start year,</span> <span style="text-decoration: underline;">in academic end year</span></span></p>

The user selects academic start year if the term begins in the same year as the academic start year or selects academic end year if the term starts in the same year as the academic end year. The same applies to the end year.

#####   


#### Create (School) Terms

Based on the information in the Term Label table, Terms are automatically made for each academic year added to the school. The term label records contain the sequence of terms, the names of terms, and the number of records indicated the total number terms.

For every new academic year record, PEMS makes a number of term records equal to the number of Term Label records and updates the ordinate of the terms to match the sequence of the term label records.


***Make a new set of term records when an academic year is created***

<p class="callout info"><span style="font-weight: 400;">Key trigger is the creation of a new academic year record.</span></p>

<p class="callout info"><span style="font-weight: 400;">Create a term record and associate it to the academic year record and the term label record with flag = ***official start*** and status = ***active***. If no record is found, stop.</span></p>

<p class="callout info"><span style="font-weight: 400;">Set the (school) term ***ordinate*** to maximum term ordinate value + 1</span></p>

<p class="callout info"><span style="font-weight: 400;">If the ***term label*** start year field is set to 'academic start year' then use the academic year's start year field for the ***term*** start year. If the ***term label*** start year field is set to 'academic end year' then use the academic year's end year field for the ***term*** end year. </span></p>

<p class="callout info"><span style="font-weight: 400;">If the ***term label*** end year field is set to 'academic start year' then use the academic year's start year field for the ***term*** end year. If the ***term label*** end year field is set to 'academic end year' then use the academic year's end year field for the ***term*** end year. </span></p>

<p class="callout info">Calc<span style="font-weight: 400;">ulate the term record's start date from the term label record “start day” and term label record “start month” and the start year found above. </span></p>

<p class="callout info"><span style="font-weight: 400;">Calculate the term record's end date from the term label record “end day” and term label record “end month” and the end year found above.</span></p>

<p class="callout info"><span style="font-weight: 400; color: #e03e2d;">Calendar days - TBD</span></p>

<p class="callout info"><span style="font-weight: 400; color: #e03e2d;">School days - TBD</span></p>

<p class="callout info"><span style="font-weight: 400;">Term Name = concatenate Term Label name and Term Start Year.</span></p>

<p class="callout info"><span style="font-weight: 400;">Set the Term Flag = Term Label Flag</span></p>

<p class="callout info"><span style="font-weight: 400;">Set the term status = the status of the associated academic year. *note: if the user tiggers this automation mid year, all terms will be set to current, regardless of actual status, the user will need to manually update them.*</span></p>

<p class="callout info"><span style="font-weight: 400;">Find the next ***active*** term label record with sequence equal to the last term label record sequence + 1. If there are no records that meet this criteria, add 1 to the sequence value. Repeat.</span></p>

<p class="callout info"><span style="font-weight: 400;">If the term label record flag value is "***Offical End***" and status = "***active***", then this is the last term record to be made. </span></p>

*<span style="font-weight: 400;">Note: Add an additional exit criteria as a back-up in case this loop goes on for ever, for example, if the user did not configure the term label records properly.</span>*

##### <span style="font-weight: 400;">Checking for student terms already created</span>

<span style="font-weight: 400;">There is a case where some terms may have been created for the grade span but not all terms. This may happen when data is migrated into PEMS but the information is incomplete or not properly related to other records. </span>

<span style="font-weight: 400;">Student term records should not be created automatically if there are any student term records in that grade span already. Student term records exist in a grade span based on their at\_grade field. If the at\_grade field is equal within the start and end grades of the grade span, then there are existing records, the automation should not run.</span>

<span style="font-weight: 400;">The user will have to manually add the student terms or delete the existing records and be provided a means to manually launch this process</span>

<p class="callout info"><span style="font-weight: 400;">Check for student term records with at\_grade field between the grade span start and end grades</span></p>

<p class="callout info"><span style="font-weight: 400;">If any records found, then do not automatically create student terms.</span></p>

<p class="callout info"><span style="font-weight: 400;">Provide users a means to manually launch this process if they delete student term records</span></p>

#### <span style="font-weight: 400;">Potential for Errors</span>

<p class="callout danger"><span style="font-weight: 400;">The user may choose to delete the student terms and start over or add the missing terms manually. If the user adds terms manually, then the student sequence may not be ordered according to the actual start date</span></p>