# Features — ieb-inde-5

Evidence date: 2026-10-12. Inspected revision: `main` at `c854df0`.

Provenance: **Implemented** unless a row says otherwise. Paths are under `INDE-5/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

### Collaborative problem solving teams

| Feature | Where | Notes |
|---|---|---|
| Team summary: academic year, topic, team code, guiding notes, status | `oCollaborativeProblemSolvingTeams`, `CollaborativeProblemSolvingTeams_form.ascx.cs` | Year stored as 1 January. Status is a lookup id. |
| Five member slots: name, email, school, avatar nickname | Same object | Member 1 email is trimmed on save. Members 2–5 are not. |
| Question solutions 1–5: overview and documents | Fields `CPSQuestion2` … `CPSQuestion5` and `CPSSolution` for question 1 | Question 1 lives under `CPSSolution`, not `CPSQuestion1`. |
| Solution title, overview, evolution documents, collaboration log | Same object | Collaboration log is a string field. No custom writer was found on the team form. |
| Read-only identity after create | `PerformCustomPopulateAddOn` | Year, topic, team code, guiding notes. Save-and-new hidden. Dated 2018-09-14. |
| Website-user team list | `CollaborativeProblemSolvingTeams_grid.ascx.cs` | Email must match one of the five member emails. |

### Rocket.Chat

| Feature | Where | Notes |
|---|---|---|
| Create a private group for a new team code | `RocketChatHelper.RCCreateGroup` called from the team save | Moderator username is always added. |
| Move a member when their email changes | `UpdateGroupMembers` | Kick uses the old name; invite uses the new name and email. Failure redirects to `/error`. |
| Import teams into chat | `controls/admin/surface.ascx.cs` when surface name is `CollaborativeProblemSolvingTeams` | Creates `{teamCode}_{user.name}` users, then the group. |
| Login, logout, password push | `Core.master.cs`, `Reset.aspx.cs`, `navigation.ascx.cs` | Self-auth flag `RocketChatSelfAuth` = `true`. Server `https://chat.ieb.co.za`. |
| Team form chat widget script | `CollaborativeProblemSolvingTeams_form.ascx.cs` around the `RocketChatInit` startup script | Runs when self-auth is true and session `RocketChatData` exists. |

Username construction is not one rule. See business rule BR-014.

### Schools and people

| Feature | Where | Notes |
|---|---|---|
| Schools | `oSchools`, `Schools_form.ascx.cs`, `Schools_grid.ascx.cs` | Name, registration name, centre number, type, addresses, phone, primary email, affiliations, NSC year, PSI year. |
| School list limited to IEB liaison | `Schools_grid.ascx.cs` | Website users only. Dated 2018-05-20. |
| 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. |
| Copy school name and type onto the contact | `SchoolContacts_form.ascx.cs` | On save, from the parent school. |
| School affiliations | `oSchoolAffiliations` | Name and abbreviation. |
| Excel import creates WebsiteUser | Schools form `btnImportDataChild_Click` | Columns Email, Mobile, Title, RSA ID Number, Name. Skips existing email for the customer. |

### Clusters

| Feature | Where | Notes |
|---|---|---|
| Cluster information | `oClusterInformation` | Code, name, area, level, province, subject name, subject code, discussion forum, document library. |
| Generated cluster code | `PerformCustomSaveAddOn` | `{abbrev}-{subject code}-{province custom code}-{nn}`. |
| Lock fields once coded | `PerformCustomPopulateAddOn` | Code always disabled. |
| Template resources copied on first save | Same form, surface id `3048` | Source rows have parent item id 0. |
| 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. |
| Cluster meetings | `oClusterMeetings` | Date, time, month, location, description, status, documents, plus copied labels. |
| Cluster resources | `oClusterResources` | Resource name (user id), email, type. Types `Cluster Administrator` and `Cluster Leader` unlock meetings for a website user. |
| Excel import creates member users | Cluster Information `btnImportDataChild_Click` | Columns Member Email, Member Name. |

### Subjects

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

### Examination moderation code in the same site

| Feature | Where | Notes |
|---|---|---|
| Subject status machine | `App_Code/classes/examNums.cs` | Status and compliance ids. |
| Status and log emails | `App_Code/classes/examHandler.cs` | Template name `Examination Moderation Status`. |
| Notes and attachments call the handler | `controls/module/surfaceNotes.ascx.cs`, `controls/admin/attachments.ascx.cs` | No examination surface under `surface_custom`. Database configuration **Unknown**. |
| Document pack and compliance objects | `oExaminationDocumentPack`, `oExaminationAuthoringandModeration`, `oComplianceFeedbackCRITERION` | Field model only, from this inspection. |

### Framework surfaces shipped in the website

The INDE-5 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 CPS product features. Loyalty email and MediSwitch responses are configured off.

### Sign-in and profile

| Feature | Where | Notes |
|---|---|---|
| Registration / profile update | `Core.master.cs` `btnRegister_Click` | Writes telephone into CPS avatar nickname when telephone is non-empty. |
| Password reset updates chat | `Reset.aspx.cs` | |
| Admin sign-in page | `Admin_SignIn.aspx` | Page exists. Captcha was not found in the INDE-5 website. |
| Session heartbeat | `SessionHeartbeat.ashx` | File exists. Timeout is not set in the INDE-5 `Web.config`. |

## Completed features

Nothing in git is marked complete as a separate release. The custom CPS behaviour above is the completed work that was imported on 2025-07-09. Custom comments place that work in May and September 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. Working tree on the inspected clone is the imported snapshot.

## Recently changed

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

| Commit | Author | Subject |
|---|---|---|
| `92789a4` | Abdurahmaan Ismail | Initial commit |
| `c854df0` | Renier van Rooyen | Added INDE-5 |

There is no later product change in this repository.

## Deprecated or removed

| Item | Evidence | Status |
|---|---|---|
| Rocket.Chat username `{teamCode}_{firstName}` inside `UpdateGroupMembers` | Commented as "old method"; live code uses the given name only | Commented out. Import and `GetUsername` still use a team-code prefix. |
| Email and SMS subscription checkboxes in registration | Commented block in `btnRegister_Click` | Not executed. |
| "Add New" cluster member option | Commented `ListItem("Add New", "-1")` in `ClusterMembers_form.ascx.cs` | Not added to that picklist. Cluster resources still insert Add New. |
| Live MediSwitch gateway URLs | Commented in `Web.config` | QA URLs are active in config; the feature switch is `0`. |
| Local integrated-security connection to `Framework_INDE-5` | 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`, `STUD-1`, and others) are in `data/Scripts`. They are not INDE-5 features.
