# Features — ieb-inde-2

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

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

| Feature | Where | Notes |
|---|---|---|
| School name, type, centre number, phone, primary email, physical and postal address, affiliations, NSC year, PSI year | `oSchools`, `Schools_{form,grid,view}` | Custom save is empty. Populate only special-cases setup code `STUD-1`. |
| Child contacts show cluster name and code | `Schools_form.ascx.cs` child grid, dated 2019-03-06 | First active cluster member with the same email, then that member's first cluster. |

### School contacts

| Feature | Where | Notes |
|---|---|---|
| Contact identity, flags, and subjects | `oSchoolContacts`, `SchoolContacts_{form,grid,view}` | Principal and IEB liaison are booleans. Active year is a date. Subject is stored as a string. |
| User picklist and Add New modal | `BindUserPicklist`, `populateUserInfo` | "Add New" is value `-1` and opens `#modContactAdd`. |
| Website-user limits | Same form, 2019-04-25 | Existing contact: name and email disabled. New contact: only Select and Add New, unless `contAdded` is in session. |
| Subject multi-select from active subjects | Populate, 2019-04-23 | Custom query. Comment says the framework procedure returned no data value. |
| Hidden cluster name and code on the contact form | Populate, 2019-03-06 | Sort controls `srtSchoolContacts_SchoolContacts_ClusterName` and `ClusterCode` set `Visible = false`. |
| Grid column order | `data/Scripts/INDE-2` script dated 2020-03-25 | Surface `3044`. Email shown on the grid. Mobile taken off the grid. |

### Subjects and cluster levels

| Feature | Where | Notes |
|---|---|---|
| Subject code, name, cluster level | `oSubjectManagement`, `SubjectManagement_{form,grid,view}` | No INDE-2 custom save. |
| Cluster level name and code abbreviation | `oClusterLevels`, `ClusterLevels_{form,grid,view}` | Abbreviation is the first segment of a generated cluster code. |
| School affiliation name and abbreviation | `oSchoolAffiliations` | No INDE-2 custom save. |

### Clusters

| Feature | Where | Notes |
|---|---|---|
| Province, area, level, subject code, subject name, cluster name, cluster code | `oClusterInformation` | Code is generated and then locked, together with the identity fields. |
| Subject list filtered by level | `BindSubjectNames` | Active subjects for the selected cluster level. |
| Template resource copy | Save, surface `3048` | Copies resources whose parent item id is `0` when the cluster has none. |
| Discussion forum and document library fields | `oClusterInformation` | String properties. No custom rule was found beyond the generated surface. |
| Member import creates users | `btnImportDataChild_Click`, 2018-05-14 | Columns `Member Email` and `Member Name`. New `pal_` user is a WebsiteUser. |

### Cluster members, resources, and meetings

| Feature | Where | Notes |
|---|---|---|
| Member name, email, SACE, school, active year | `oClusterMembers` | Email, SACE, and active year disabled on populate. Name list is this year's contacts at the selected school. |
| New-member notice | `SendClusterLinkedNotification`, 2019-04-16 | Insert only. Template `Cluster Linked Email Notification`. Subject `IEB CRM - Cluster Notice`. |
| Resource type, name, email | `oClusterResources` | Type and email disabled. Names limited to members of this cluster who have an email (2019-03-06). |
| Resource notice | Same mail method, second argument is the resource type | Update only, and only when the email text changed. |
| Meeting date, month, location, description, documents, copied cluster labels, send-email flag | `oClusterMeetings` | Labels copied from the parent cluster on save. |
| Meeting notice | `SendClusterMeetingNotification`, 2019-03-06 | After a successful save, only if Send Email is checked. Active members only. Subject `IEB CRM - Cluster Meeting Notice`. |
| Who may add members and meetings | `ClusterInformation_form` populate, 2018-05-16 | Below PowerUser. See business rules. |
| Meeting row edit and remove for leaders | Child repeater, 2018-05-17 | Header cells forced visible for the meetings repeater. Row buttons follow `AllowMeetings` when the user is below PowerUser. |

### Mail and files

| Feature | Where | Notes |
|---|---|---|
| Test redirect | All three custom send methods | If `website` contains `local`, `dev`, or `demo`, the message goes to the admin setting and the real recipient is appended to the subject. |
| Zip of explorer files | `controls/module/fileExplorer.ascx.cs` | Uses Ionic.Zip. The readme lists Ionic.Zip as the INDE-2-specific package. **Documented** and **Implemented**. |

### Framework carried in the same tree

Admin pages, canvases, cart, products, loyalty, campaigns, the WCF service, scheduler, constructor, exporter, mobile, and the SQL project are present. They are the Evolution framework. No INDE-2 cluster or school region was found that drives loyalty, cart, or MediSwitch.

`billingInstructions` and `CriterionFeedback` are present. They are not referenced by the CRM custom regions that were read.

`examHandler`, `examNums`, and the examination object classes are present. `attachments.ascx.cs` hides attachment actions for assessment specialist, internal moderator, and external moderator. `surfaceNotes.ascx.cs` routes internal and external log notes through examination roles. There is no examination form under `surface_custom`. Provenance: **Implemented** as leftover code. Not treated as a current CRM feature.

## Completed features

The CRM custom regions are dated May 2018 through April 2019, and the school-contact SQL scripts are dated March 2020. There is no release note that marks them complete. Provenance: **Inferred** from the dates and from the absence of a later product commit. The Git history itself is only the 2025-07-09 import.

## Planned features

None documented. `bitbucket-pipelines.yml` names a `develop` branch. That branch was not on the remote.

## In development

Nothing in the Git history is in progress. `main` is the 2025-07-09 import.

## Recently changed

Relative to the custom-comment dates, the latest product edits in the tree are the two SQL scripts of 2020-03-20 and 2020-03-25. Relative to Git, the latest change is the import commit `8e2b139`.

## Deprecated or removed in source

| Item | Evidence |
|---|---|
| Email meeting notices to cluster resources | The resource loop in `SendClusterMeetingNotification` is commented out. Dated 2019-03-06. Reason in the comment: resources are also members. |
| Resource name list of all customer users | The earlier `BindResourceUserPicklist` body is commented out and replaced by the member-only query. |
| Live MediSwitch gateway URLs | Commented under `<!--LIVE-->` in `Web.config`. QA URLs are the active settings. |
| Connection settings named for a non-demo catalog | Commented in `Web.config`. The active key is `Framework_INDE-2_Demo`. |

`controls/surface_custom_backup` exists as a directory. It was not inventoried file by file. Whether it holds an older copy of these surfaces is **Unknown / Requires Confirmation**.
