# Features — ieb-inde-4

Evidence date: 2026-10-13. Inspected revision: `main` at `e2be9d5`.

Provenance: **Implemented** unless a row says otherwise. Paths are under `INDE-4/Evolution Software Unified Framework/Evolution Software Unified Framework/` unless noted.

No feature roadmap, changelog, or removed-feature list exists in the repository. "Planned" and "deprecated" below are only what the tree itself shows.

## Current features

### Schools and people

| Feature | Where | Notes |
|---|---|---|
| Schools | `oSchools`, `Schools_form.ascx.cs`, `Schools_grid.ascx.cs` | Name, centre number, type, addresses, phone, primary email, affiliations, NSC year, PSI year. |
| School edit link for an IEB liaison | `Schools_grid.ascx.cs` | Users below PowerUser. Dated 2018-05-15. The row is not removed. The edit header is forced visible. |
| School contacts | `oSchoolContacts` | Name is a user id. Flags for IEB liaison and principal. Active year, SACE, RSA and non-RSA id, mobile, email, area of responsibility, school name, school type. |
| Contact picklist from `pal_User` | `SchoolContacts_form.ascx.cs` | Active users for the current customer code. "Add New" opens `#modContactAdd`. Dated 2018-05-16. |
| Copy email, mobile, and title text from the user | Same form `populateUserInfo` | Title assignment sets the selected item's text. School name and school type are not assigned here. |
| School affiliations | `oSchoolAffiliations` | Name and abbreviation. Custom addon bodies are empty aside from a `STUD-1` branch. |
| Excel import creates WebsiteUser | Schools form `btnImportDataChild_Click` | Columns Email, Mobile, Title, RSA ID Number, Name. Skips an existing email for the customer. Dated 2018-05-14. Does not set `isReset`. |

### Clusters

| Feature | Where | Notes |
|---|---|---|
| Cluster information | `oClusterInformation` | Code, name, area, level, province, subject name, subject code, discussion forum, document library. |
| Document Library tab | `ClusterInformation_form.ascx` | Tab label "Document Library". Hosts `controls/module/fileUploader.ascx`. |
| Discussion Forum tab | Same form | Tab label "Discussion Forum". Stored field is the string `ClusterDiscussionForum_Forum_ForumConversation`. |
| Generated cluster code | `PerformCustomSaveAddOn` | `{abbreviation}-{subject code}-{province customCode}-{nn}`. Runs before the generated field copy. |
| Lock some fields once coded | `PerformCustomPopulateAddOn` | Code always disabled. Province, level, and subject name disable when the code is non-empty. Name and area stay enabled. Dated 2018-05-16. |
| Subjects filtered by level | `BindSubjectNames` | Active subjects whose cluster level equals the selected level. |
| Template resources copied on first save | Same form, surface id `3048` | Source rows have parent item id 0. Dated 2018-05-16. |
| Cluster levels | `oClusterLevels` | Level name and code abbreviation. Used by the code generator. |
| Cluster members | `oClusterMembers` | School, name, email, SACE, active year. Picklist is this year's contacts of the selected school. Dated 2018-05-15. |
| Cluster meetings | `oClusterMeetings` | Date, time, month, location, description, status, documents, plus copied labels. Dated 2018-05-17. |
| Cluster resources | `oClusterResources` | Resource name (user id), email, type. Types `Cluster Administrator` and `Cluster Leader` unlock meetings for a user below PowerUser. |
| Excel import creates member users | Cluster Information `btnImportDataChild_Click` | Columns Member Email, Member Name. Dated 2018-05-16. Does not set `isReset`. |

### Subjects

| Feature | Where | Notes |
|---|---|---|
| Subject management | `oSubjectManagement`, `SubjectManagement_*` | Subject name, subject code, cluster level. |

### Examination and criterion code in the same site

| Feature | Where | Notes |
|---|---|---|
| Subject status, compliance, and moderation ids | `App_Code/classes/examNums.cs` | Status ids from `1083` through `1110`, plus `2160`. Compliance ids `1125`–`1128`. Moderation result ids `1129`–`1132`. |
| Status mail and criterion data | `App_Code/classes/examHandler.cs` | Contains `EmailExamStatus`. Calls `sp_INDE_GetCriterionFeedbackData`. |
| Criterion feedback module | `controls/module_custom/CriterionFeedback.ascx` | User control is present. No examination surface under `surface_custom`. |
| Document pack and compliance objects | `oExaminationDocumentPack`, `oExaminationAuthoringandModeration`, `oComplianceFeedbackCRITERION` | Field model only, from this inspection. |

Database configuration of these surfaces is **Unknown**.

### Other custom module shipped in the website

| Feature | Where | Notes |
|---|---|---|
| Billing instructions | `controls/module_custom/billingInstructions.ascx` | Account, supplier, tenant, and landlord fields. Not called by the school or cluster custom blocks that were read. |

### Framework surfaces shipped in the website

The INDE-4 site folder includes the framework admin pages (users, canvases, content, banners, campaigns, products, loyalty, FAQ, gallery, jobcards, reports, setup, SMS credit, support, tasks, templates) and public pages `Default.aspx`, `Canvas.aspx`, `Cart.aspx`, `Products.aspx`, `Media.aspx`, `Search.aspx`, `Reset.aspx`, `Unsubscribe.aspx`, `Error.aspx`.

These are **Implemented** as files. This onboarding does not treat them as Docs product features. Loyalty email and MediSwitch responses are configured off.

### Sign-in and profile

| Feature | Where | Notes |
|---|---|---|
| Admin sign-in page | `Admin_SignIn.aspx` | Page exists. Captcha was not searched to exhaustion across every framework page. No captcha reference was noticed in the custom surfaces. |
| Session heartbeat | `SessionHeartbeat.ashx` | File exists. Timeout was not confirmed in `Web.config`. |
| Password reset page | `Reset.aspx` | File exists. No Rocket.Chat call was found in this website. |

## Completed features

Nothing in git is marked complete as a separate release. The custom school and cluster behaviour above is the completed work that was imported on 2025-07-09. Custom comments place that work in May 2018.

## Planned features

None documented in the repository.

`bitbucket-pipelines.yml` mentions a `develop` branch. That branch was not on the remote at inspection. It is not evidence of a planned product feature.

## In development

No branch other than `main` was found. The inspected revision is the imported snapshot.

## Recently changed

Git history is two commits on 2025-07-09:

| Commit | Author | Subject |
|---|---|---|
| `7a3788a` | Abdurahmaan Ismail | Initial commit |
| `e2be9d5` | Renier van Rooyen | Added INDE-4 |

There is no later product change in this repository.

## Deprecated or removed

| Item | Evidence | Status |
|---|---|---|
| "Add New" cluster member option | Commented `ListItem("Add New", "-1")` in `ClusterMembers_form.ascx.cs` | Not added to that picklist. Cluster resources and school contacts still insert Add New. |
| Schools grid edit-column role check | Commented out under the custom include that forces `thEdit.Visible = true` | The role check is not executed for that header. |
| Live MediSwitch gateway URLs | Commented in `Web.config` | QA URLs are active in config; the feature switch is `0`. |
| Local and remote connections to catalog `Framework_INDE-4` | Commented in `Web.config` | The demo catalog connection is the active `conn` key. |
| `sonarqube_scan.bat` | Listed by the 2026-09-28 repository scan, absent from git | **Unknown.** Not a removed commit. |

## Not features

- SonarQube scanning is a pipeline, not a user feature. The pipeline `sonar.projectKey` is `my-project`. `sonar-project.properties` says `overdrive_ieb_8345eef9-efa7-4cfa-bc4a-5a046ec95189`. Those keys disagree.
- SQL script folders for other customers (`INDE-1`, `INDE-2`, `INDE-6`, and others) are in `data/Scripts`. They are not INDE-4 features.
- `.vs/INDE-2` IIS Express config describes an INDE-2 site path. It is leftover working-copy configuration, not an INDE-4 feature.
- The readme name "Docs" is not implemented as a feature name in the custom surfaces. The document-shaped UI that was found is the cluster Document Library tab.
