# Project plan — ieb-inde-2

Evidence date: 2026-10-13.

Source repository: `git@bitbucket.org:overdrive/ieb-inde-2.git`.

Inspected revision: `main` at `8e2b139` (2025-07-09, Renier van Rooyen, "Added INDE-2"). The scan-host path `~/projects/sonar_scan/repos/ieb-inde-2` was not on this machine. The tree below was read from that git revision. Credential values are omitted.

This plan describes what the repository contains. It does not decide what the product should become.

## Product

`INDE-2/ReadME.txt` names this code:

| Code | Name in the readme |
|---|---|
| INDE-1 | Exams |
| INDE-2 | CRM |
| INDE-4 | Docs (using the INDE-2 user table) |
| INDE-5 | CPS |
| INDE-6 | Postbox |
| INDE-8 | ISC CRM |
| INDE-9 | ISC Docs (using the INDE-8 user table) |

The same file's setup steps say "All Projects (INDE-1, INDE-2, INDE-3, INDE-4, INDE-5, INDE-6, INDE-7)". Provenance: **Documented**.

The custom website under `core_custom/INDE-2` keeps schools, school contacts, subjects, cluster levels, clusters, cluster members, cluster resources, and cluster meetings. Mail subjects written by that custom code start with `IEB CRM`. Provenance: **Implemented**.

The letters IEB appear in those subjects, in the repository name, and in the app settings `IEB (INDE-2 Local)` and `IEB CRM`. The full organisation name is **Unknown / Requires Confirmation**.

The running site is a customised copy of **Evolution Software Unified Framework**: an ASP.NET Web Forms application whose pages, canvases, and surfaces are largely data-driven from SQL Server. INDE-2-specific behaviour is in the custom regions of the school and cluster surfaces, signed Graham Rook (2018-05-14 through 2018-05-21) and Charlene van Heerden (2019-03-06 through 2019-04-26).

There is no product requirements document in the source repository. Silicon Ark had no `ieb-inde-2` folder before this set.

## Branch reality

| Line | Tip | Date | What it is |
|---|---|---|---|
| `main` (default; `origin/HEAD`) | `8e2b139` | 2025-07-09 | Only remote branch seen |

History:

- `bdc15c4` — Abdurahmaan Ismail, 2025-07-02, "Initial commit". Adds only the root `.gitignore`.
- `8e2b139` — Renier van Rooyen, 2025-07-09, "Added INDE-2". Adds the `INDE-2/` tree.

Custom comments in the school and cluster surfaces are dated 2018-05-14 through 2019-04-26. The SQL scripts under `data/Scripts/INDE-2` are named for 2020-03-20 and 2020-03-25. That earlier product history is not represented as Git commits. Provenance: **Inferred** that this Bitbucket repository is an import of an existing working copy, not the original development history.

`applicationhost.config` under `.vs/INDE-2` defines a site named `INDE-2` whose physical path is `C:\DEV work\NEW_IEB\INDE-2\Evolution Software Unified Framework\Evolution Software Unified Framework\core_custom\INDE-2`. Provenance: **Inferred** that the tree was taken from that developer working copy.

The task-creation scan listed `sonarqube_scan.bat` at the repository root. That file is not in the git tree at `8e2b139`. The committed root is `.gitignore` and `INDE-2/`. Provenance: **Unknown** whether the batch file was untracked on the scan host.

## Objectives (inferred from the implementation and the readme, not from a written plan)

- Keep a school: name, type, centre number, phone, emails, addresses, affiliations, NSC year, and PSI year.
- Keep school contacts for a year, including principal and IEB-liaison flags, SACE number, identity numbers, and subjects.
- Keep subjects (code, name, cluster level) and cluster levels (name and code abbreviation).
- Keep a cluster: province, area, level, subject, name, and a generated cluster code.
- Copy template cluster resources onto a new cluster, then limit who may add members and meetings.
- Record cluster members and resources, and notify them from the template `Cluster Linked Email Notification`.
- Record cluster meetings and, when the send-email flag is set, notify active members from `Cluster Meeting Email Notification`.
- Keep the shared Evolution framework (admin, surfaces, library, WCF service, scheduler, SQL project) in the same tree.

## Scope

### In scope of `main`

1. Website project `core_custom/INDE-2`, included by `INDE-2.sln` and by the larger `EvolutionSoftwareUnifiedFramework.sln`.
2. Custom surfaces under `controls/surface_custom`: Schools, School Affiliations, School Contacts, Subject Management, Cluster Levels, Cluster Information, Cluster Members, Cluster Resources, and Cluster Meetings.
3. Local setup notes in `INDE-2/ReadME.txt`.
4. Two SQL scripts in `data/Scripts/INDE-2`.
5. The rest of the Evolution framework that shipped in the same tree: `core`, `core-dev`, `library`, `business`, `service`, `mobile`, `tools`, `data`, `release`, `SchedulerTool`.
6. Bitbucket Pipelines SonarQube scan on `main` and `develop`, and `sonar-project.properties`.

### Out of scope / not established

- A written backlog, release process, or statement of which environment is production.
- Automated tests of the CRM workflow. No `[Test]`, `[Fact]`, or `TestMethod` attributes were found. `tools/CEP/CEP.ConsoleTests` is a quote and inventory console harness, not an INDE-2 test project.
- A build or deploy step in the pipeline. The pipeline only runs a SonarQube scan.
- The database rows that define canvases, surfaces, lookups, templates, and the template resource rows (`ParentSurfaceItemId` 0). Those live in SQL Server.
- Sibling repositories named in the readme. They are not this repository. The readme says INDE-4 Docs uses the INDE-2 user table. That sharing was not verified from this tree alone.
- Examination authoring. `examHandler`, `examNums`, and examination object classes are in the website, and `attachments.ascx.cs` and `surfaceNotes.ascx.cs` still branch on examination roles. There is no examination surface under `controls/surface_custom`. Whether a database canvas still opens that workflow is **Unknown / Requires Confirmation**.

## Architecture

```text
Browser
  -> IIS Express site INDE-2 (port 60629 in the committed application host)
    -> core_custom/INDE-2  ASP.NET Web Forms
      -> business + library
      -> SQL Server catalog Framework_INDE-2_Demo (active app setting)
      -> WCF client: localhost:58913 and http://service.ieb.co.za/framework_service.svc
      -> SMTP smtp.evolutionsoftware.co.za:25
      -> optional SMS client http://sms.netgen.co.za/SMS_V2.asmx
```

Pages such as `Canvas.aspx` load surfaces from the database. The CRM screens that were customised are the surface code-behinds listed above. Provenance: **Implemented** for the projects and settings. **Inferred** that canvases are the way a user reaches those surfaces, because that is how this framework hosts a surface.

## Major components

| Component | Role in this tree |
|---|---|
| `core_custom/INDE-2` | CRM website. Web Site project, no `.csproj`. |
| `core`, `core-dev` | Other copies of the website. Not the INDE-2 custom project. |
| `business`, `library` | Framework class libraries. .NET Framework 4.5. |
| `service` | WCF website. IIS Express port 58913. |
| `tools/scheduler`, `SchedulerTool` | Scheduler executables. |
| `tools/constructor`, `exporter`, `dataImporter` | Framework maintenance tools. |
| `tools/CAPI.Custom`, `tools/CEP` | Quote, purchase-order, and console harness code carried in the tree. |
| `data` | SQL project `data.sqlproj` plus customer script folders. |
| `mobile` | Framework mobile project. |

## Milestones visible in the tree

No milestone document exists. Dates that are written in the tree:

| When | What |
|---|---|
| 2016 | Library assembly copyright, Evolution Software Framework 1.0.0.0. |
| 2018-05-14 to 2018-05-21 | Graham Rook custom regions for clusters, members, resources, contacts, and member import. |
| 2019-03-06 to 2019-04-26 | Charlene van Heerden: meeting mail, resource picklist limited to members, school-contact grid cluster columns, subject multi-select query, website-user contact editing. |
| 2020-03-20 and 2020-03-25 | SQL scripts that change the school-contact subject field and grid columns. |
| 2025-07-02 and 2025-07-09 | Git import onto `main`. |

## Dependencies

- SQL Server. Active catalog `Framework_INDE-2_Demo` on host `156.38.132.194`. A commented block names catalog `Framework_INDE-2` on the same host and on the local server.
- IIS Express, as committed under `.vs`.
- AjaxControlToolkit, Telerik.Web.UI, and SharpZipLib, which the readme says must be re-added from `components`.
- NuGet `Microsoft.CodeDom.Providers.DotNetCompilerPlatform` 1.0.0 and `Microsoft.Net.Compilers` 1.0.0 (`packages.config`, `net45`).
- Ionic.Zip, called out in the readme under the INDE-2 heading and used by `controls/module/fileExplorer.ascx.cs`.
- EPPlus and NReco.VideoConverter, called out for the library project.
- SMTP at `smtp.evolutionsoftware.co.za` port 25. Credentials are in `Web.config` and are omitted here.
- SonarQube, via Bitbucket Pipelines pipe `sonarsource/sonarqube-scan:3.0.2`. `SONAR_HOST_URL` and `SONAR_TOKEN` are pipeline variables.

## Current status

The imported `main` branch is the whole product history in Git. Custom CRM behaviour is present and dated 2018–2019, with two SQL scripts from 2020. No later product commit was found. The pipeline scans `main` and `develop`; `develop` was not on the remote.

## Known gaps

See the confirmation list in `prd.md`. The items that block a confident reading of "what is live" are: which SQL catalog is production, which of the two `website` app settings the mail redirect uses, whether examination surfaces still exist in the database, and whether INDE-4 really shares this user table.
