emis_developer_manual
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| emis_developer_manual [2023/02/20 22:03] – [[Optional] Various Visual Studio Configuration] ghachey | emis_developer_manual [2026/01/02 20:47] (current) – ghachey | ||
|---|---|---|---|
| Line 63: | Line 63: | ||
| There is no need for an expensive license, the Express edition which is freely available will work fine for most small countries. If you don't have already a commercial license download the free version [[https:// | There is no need for an expensive license, the Express edition which is freely available will work fine for most small countries. If you don't have already a commercial license download the free version [[https:// | ||
| + | |||
| + | The following databases distributed with the source code in the folder databases: | ||
| + | |||
| + | * **IdentifiesP.bak**: | ||
| + | * **pacificemisdb.bak**: | ||
| + | * **pacificemisdb-withsamplelookups.bak**: | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | Restoring a database from a backup is documented [[https:// | ||
| ==== Programming Language ==== | ==== Programming Language ==== | ||
| Line 97: | Line 107: | ||
| - Download and install [[https:// | - Download and install [[https:// | ||
| - | - Download and install | + | - Download and install [[https:// |
| - | - Download and install [[https:// | + | - Download and install [[https:// |
| - Download and install latest [[https:// | - Download and install latest [[https:// | ||
| - | - Download and install most recent version 16 LTS [[https:// | + | - Download and install most recent version 16 LTS [[https:// |
| - Install Bower from the command line you can simply ''> | - Install Bower from the command line you can simply ''> | ||
| - Install Grunt from the command line you can simply ''> | - Install Grunt from the command line you can simply ''> | ||
| - Download and install [[https:// | - Download and install [[https:// | ||
| + | <note important> | ||
| ==== Software Configuration Management ==== | ==== Software Configuration Management ==== | ||
| Line 167: | Line 177: | ||
| {{ : | {{ : | ||
| - | You can then verify if VS is actually using the node and npm binaries you think they were by opening **Tools - NuGet Package Manager - Package Manager Console** and typing the following commands and observing the output. | + | You can then verify if VS is actually using the node and npm binaries you think they were by opening **Tools - NuGet Package Manager - Package Manager Console** and typing the following commands and observing the output. The version should be the one you installed manually above (and not the one in the screenshot). |
| {{ : | {{ : | ||
| Line 186: | Line 196: | ||
| - | ==== Databases Setup ==== | + | ==== Application Configuration |
| - | You will need to setup two databases: | + | The main configuration for the application |
| - | Restoring a database from a backup is documented [[https://msdn.microsoft.com/ | + | You will need to setup two databases: the Identity database (i.e. IdentitiesP) |
| - | In VS, open the file '' | + | Replace |
| <code xml> | <code xml> | ||
| <add name=" | <add name=" | ||
| </ | </ | ||
| - | |||
| - | And replace '' | ||
| <code xml> | <code xml> | ||
| Line 206: | Line 214: | ||
| <add key=" | <add key=" | ||
| <add key=" | <add key=" | ||
| + | ... | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | There are other appSettings less critical but important for some functionalities. | ||
| + | |||
| + | <code xml> | ||
| + | < | ||
| + | ... | ||
| + | <!-- The report server configuration for the reporting functionality --> | ||
| <add key=" | <add key=" | ||
| + | <add key=" | ||
| + | <add key=" | ||
| + | <add key=" | ||
| + | ... | ||
| + | <!-- The location where files are stored on the computer used by a number of features in the system --> | ||
| + | <add key=" | ||
| + | ... | ||
| + | <!-- Emailing functionality cnofiguration --> | ||
| + | <add key=" | ||
| + | <add key=" | ||
| + | <!-- use the your own email if you want to test receiving systems emails (e.g. errors notifications) --> | ||
| + | <add key=" | ||
| + | <!-- use the bc for testing, so that a copy of all outbound emails is sent to this address --> | ||
| + | < | ||
| + | ... | ||
| </ | </ | ||
| </ | </ | ||
| - | And replace '' | + | And finally, for email notifications to work it must be configured to use a email server. |
| + | <code xml> | ||
| + | < | ||
| + | < | ||
| + | <!-- settings for email delivery using smtp client | ||
| + | will vary according to the sender - refer to sysadmin docs at | ||
| + | http:// | ||
| + | <!-- Using a Google account is an easy and reliable way. | ||
| + | this may require that you " | ||
| + | be enabled for the Gmail account used by the NetworkCredential | ||
| + | see https:// | ||
| + | <smtp deliveryMethod=" | ||
| + | <network host=" | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| ==== Running the Solution ==== | ==== Running the Solution ==== | ||
| Line 219: | Line 270: | ||
| + | |||
| + | ==== [Optional] Various Visual Studio Configuration ==== | ||
| + | |||
| + | If you are interested in actual developing some code there are conventions established that must be followed. Here are some configuration you should be. | ||
| + | |||
| + | === Make sure Visual Studio restores latest packages for the frontend on Startup === | ||
| + | |||
| + | This is probably a useful setting to keep the frontend dependencies updated with the code base. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | === Tab vs Spaces Setup === | ||
| + | |||
| + | In VS you can set the handling of tabs for each file type. VS will expand the tab to the number of spaces you specify when the file is displayed. So it doesn' | ||
| + | |||
| + | The original developers of this project agree to Use Keep Tabs option as shown below for all file types. To do this go into** Tools - Options - Text Editor** settings. | ||
| + | |||
| + | This needs to be set for each file type. Developers of Pacific EMIS has agreed on: | ||
| + | |||
| + | * C#: 4 spaces | ||
| + | * Everything else (CSS/ | ||
| + | |||
| + | Below is example of setting up Javascript. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | CSS would be the same as Javascript except you can turn off the hierarchical indentation. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | And then C#. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | In SourceTree, the built-in diff viewer always expands tabs as 4 spaces. It works best for seeing what “real” differences are between versions to use the option Ignore Whitespace as shown below. Although the change in white space will not be displayed, it will still be regarded by git as a change to the file. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Also note these options in Visual Studio under **Edit - Advanced**: | ||
| + | |||
| + | * **Tabify Selected Lines** - converts leading spaces to tabs. Respects the tab size setting in **Tools - Options** when making this conversion. It is recommended to run this on files before submitting a commit. | ||
| + | * **View White Space** - toggle display spaces and tabs (CTRL-E,S) | ||
| ==== Troubleshooting Visual Studio Build/Run Errors ==== | ==== Troubleshooting Visual Studio Build/Run Errors ==== | ||
| Line 999: | Line 1092: | ||
| <note important> | <note important> | ||
| + | |||
| ===== Low Level Documentation and API ===== | ===== Low Level Documentation and API ===== | ||
| Line 1009: | Line 1103: | ||
| * The AtAGlance pages are built from a static XML file containing a table of aggregated values. Particular values are dug out of this XML using Jquery as a kind of client-side " | * The AtAGlance pages are built from a static XML file containing a table of aggregated values. Particular values are dug out of this XML using Jquery as a kind of client-side " | ||
| - | ==== Public REST API ==== | + | ==== Notes Teacher Data Processing |
| + | |||
| + | === Collection === | ||
| + | |||
| + | * Census workbook (Excel XLSX) | ||
| + | * PDF survey | ||
| + | |||
| + | In both cases the data are reduced to XML; however the formats are different. | ||
| + | |||
| + | === Upload === | ||
| + | |||
| + | The Excel and PDF documents are uploaded and processed to extract the XML contents, which are uploaded into the EMIS database. | ||
| + | |||
| + | === Main tables === | ||
| + | |||
| + | * | ||
| + | * | ||
| + | * Also use pTeacherRead.TeacherSurveyV which provides denormalised values (school, surveyYear). | ||
| + | |||
| + | === Accessing TeacherSurvey XML === | ||
| + | |||
| + | The functions pTeacherRead.Activities and pTeacherRead.TeacherQualCert shred the source XML on TeacherSurvey into relational records. | ||
| + | |||
| + | === Main functions === | ||
| + | |||
| + | * Handles both formats (PDF/XLSX) of source XML to produce a common rowset — consumers downstream of these functions deal with a consistent data format regardless of collection source. | ||
| + | * Shows the array of Activities — all classes taught, A = Admin and X = Other. | ||
| + | * Calculates the " | ||
| + | * From AllocatedClassLevel, | ||
| + | * Uses AllocatedSector and qualification history to determine Qualified and Certified status for each year. | ||
| + | |||
| + | pTeacherRead.TeacherQualCert has three principal uses: | ||
| + | |||
| + | * Provides detailed teacher data to the School page (available without a warehouse rebuild). | ||
| + | * Provides the History tab on the Teacher page (no warehouse rebuild required). | ||
| + | * Used by the warehouse rebuild; Qualified and Certified status are consolidated in one place. | ||
| + | |||
| + | === Warehouse Teacher Info === | ||
| + | |||
| + | The fundamental warehouse table for teacher data is warehouse.TeacherLocation. This performs several functions: | ||
| + | |||
| + | * For legacy reasons, can incorporate teacher locations sourced from Appointments. | ||
| + | * Collects all survey data, Qual/Cert status and allocated Level, Sector and EdLevel from | ||
| + | |||
| + | pTeacherRead.TeacherQualCert: | ||
| + | |||
| + | * Supplies Estimate records for missing surveys. | ||
| + | * Includes teaching staff and non‑teaching staff (A, X). | ||
| + | |||
| + | === Common filters on TeacherLocation === | ||
| + | |||
| + | TAMX in (' | ||
| + | Source not in (' | ||
| + | |||
| + | Use the Source filter to get all survey teacher info, including Estimates and Admin/Other staff. | ||
| + | |||
| + | Grouping by AllocatedEdLevel, | ||
| + | |||
| + | Note: Aggregates on warehouse.TeacherLocation vs pTeacherRead.TeacherQualCert differ because TeacherLocation provides the Estimate records. These queries return the same record count: | ||
| + | |||
| + | <code sql> | ||
| + | Select * from pTeacherRead.TeacherQualCert(null, | ||
| + | Select * from warehouse.TeacherLocation WHERE Source not in (' | ||
| + | </ | ||
| + | |||
| + | All teacher reporting from the warehouse should ultimately draw from warehouse.TeacherLocation so that interpretations of Allocated and Qualified/ | ||
| + | |||
| + | === Examples === | ||
| + | |||
| + | <code sql> | ||
| + | Select * from warehouse.TeacherLocation WHERE Source not in (' | ||
| + | Select * from warehouse.TeacherLocation WHERE TAMX in (' | ||
| + | Select * from warehouse.TeacherLocation WHERE TAMX = ' | ||
| + | Select * from warehouse.TeacherLocation WHERE A = 1 — staff doing some admin duties, not necessarily exclusively (i.e., may be teaching as well). | ||
| + | </ | ||
| + | |||
| + | There is one record per teacher per year in TeacherLocation (i.e., tID/ | ||
| + | |||
| + | warehouse.TeacherLocation includes Gender and Age Group; for other demographics, | ||
| + | |||
| + | === Weightings === | ||
| + | |||
| + | A major group of tables derived from warehouse.TeacherLocation are: | ||
| + | |||
| + | * warehouse.TeacherActivityWeights | ||
| + | * warehouse.TeacherActivityWeightsEdLevel | ||
| + | * warehouse.TeacherActivityWeightsSector | ||
| + | * warehouse.TeacherActivityWeightsClassLevel | ||
| + | |||
| + | To handle the fact that a teacher may perform multiple activities, weightings are applied to teacher activities in the aggregation category to avoid double‑counting when aggregating. | ||
| + | |||
| + | Example (UIS A9 sheet): we record the number of teachers teaching in ISCED 1 and the number teaching in ISCED 2, then add totals across the page. If a teacher teaches one class at ISCED 1 and another at ISCED 2, counting them as 1 in each would inflate the page total. | ||
| + | |||
| + | To overcome this, we weight a teacher' | ||
| + | |||
| + | === Terminology === | ||
| + | |||
| + | FTPT (Full Time / Part Time) weighting — teaching activities in some group (ISCED, EdLevel, Sector, Class Level) as a fraction of the total teaching activities of that teacher. | ||
| + | FTE (Full Time Equivalent) — teaching activities in some group as a fraction of the TOTAL activities of that teacher (including any A or X activity). | ||
| + | Example: | ||
| + | |||
| + | Teacher B teaches 1 class at ISCED 1 and is recorded as performing Admin tasks. FTPT for ISCED 1 = 1 (1/1 teaching activity). FTE = 0.5 (1 divided by 2 total activities). | ||
| + | Difference between FTPT and FTE depends on whether the teacher performs A or X activities. Aggregated, the difference indicates teacher time spent on admin tasks. | ||
| + | |||
| + | Filter by TAMX in (' | ||
| + | |||
| + | A third weighting mechanism is Allocation: allocate a teacher to a single AllocatedClassLevel, | ||
| + | |||
| + | Example: | ||
| + | |||
| + | Teacher C teaches 3 classes at ISCED 1 and 1 at ISCED 2. AllocatedISCED = ISCED 1 (most activity). FTPT for ISCED 1 = 0.75, for ISCED 2 = 0.25. Using Allocation: Allocated ISCED 1 = 1, Allocated ISCED 2 = 0. Page total remains 1. | ||
| + | TeacherActivityWeights entries for Teacher C: | ||
| + | |||
| + | ISCED 1A — W (FTE): 0.75, WTeach (FTPT): 0.75, Allocated: 1 | ||
| + | ISCED 2A — W: 0.25, WTeach: 0.25, Allocated: 0 | ||
| + | Summary: a teacher will have entries in this table (for a given year) for each ISCED Level in which they teach; exactly one of these records will have Allocated = 1. | ||
| + | |||
| + | === Head Count (unweighted totals) === | ||
| + | |||
| + | Head Count = number of teachers who do any activity in that group regardless of other activities. One teacher may be included in multiple categories; head counts cannot be summed without double counting. | ||
| + | To get Head Count by EdLevel: | ||
| + | |||
| + | <code sql> | ||
| + | select surveyYear, EdLevelCode, | ||
| + | from warehouse.TeacherActivityWeightsEdLevel | ||
| + | where TAMX in (' | ||
| + | group by surveyYear, EdLevelCode | ||
| + | </ | ||
| + | |||
| + | To get a Head Count grand total (without double-counting): | ||
| + | |||
| + | <code sql> | ||
| + | select surveyYear, count(DISTINCT tID) HeadCount | ||
| + | from warehouse.TeacherActivityWeightsEdLevel | ||
| + | where TAMX in (' | ||
| + | group by surveyYear | ||
| + | </ | ||
| + | |||
| + | === Handling Admin and Other (A / X) teachers === | ||
| + | |||
| + | A/X staff have no teaching class level activities; their allocated Class Level (and hence Allocated ISCED, ED Level, Sector) is derived entirely from the default level of the school type. | ||
| + | A/X activities are written to separate rows, identified by the flag AX: null for teaching activities, or ' | ||
| + | To split these off from teaching activities when aggregating: | ||
| + | |||
| + | <code sql> | ||
| + | select surveyYear, coalesce(AX, | ||
| + | from warehouse.TeacherActivityWeightsEdLevel | ||
| + | group by surveyYear, coalesce(AX, | ||
| + | </ | ||
| + | |||
| + | Contributions of staff with TAMX in (' | ||
| + | |||
| + | === VERMPAF === | ||
| + | |||
| + | Values from the Weights tables are incorporated into the VERMPAF Teachers node. These are filtered on TAMX in (' | ||
| - | Refer to [[emis_public_rest_api|EMIS Public REST API]] | ||
| ==== A Note on the use of Lodash' | ==== A Note on the use of Lodash' | ||
emis_developer_manual.1676930612.txt.gz · Last modified: 2023/02/20 22:03 by ghachey
