# Project plan — ieb-inde-5

Evidence date: 2026-10-12.

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

Inspected revision: `main` at `c854df0` (2025-07-09, Renier van Rooyen, "Added INDE-5"). The scan-host path `~/projects/sonar_scan/repos/ieb-inde-5` 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-5/ReadME.txt` names this project **CPS = INDE-5** inside a family of related projects:

| 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 readme does not expand "CPS" or "IEB". The site code uses Collaborative Problem Solving teams, clusters, schools, and subjects. The letters IEB appear in the website title key, in `chat.ieb.co.za`, in `service.ieb.co.za`, and in the repository name. Provenance: **Documented** for the project list; **Implemented** for the CPS surfaces and the IEB hosts. The full organisation name, and whether CPS means Collaborative Problem Solving in the business, is **Unknown / Requires Confirmation**. The class and field names support that reading. Provenance: **Inferred**.

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. CPS-specific behaviour in `core_custom/INDE-5` covers team records, Rocket.Chat groups, school and cluster user imports, cluster codes, and grid filters for website users.

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

## Branch reality

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

History, both commits on 2025-07-09:

- `92789a4` — Abdurahmaan Ismail, "Initial commit".
- `c854df0` — Renier van Rooyen, "Added INDE-5".

Custom comments in the CPS surfaces are dated 2018-05-14 through 2018-09-14 (Graham Rook). 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` points IIS Express physical paths at `C:\DEV work\NEW_IEB\INDE-5\...`. 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 `c854df0`. The committed root is `.gitignore` and `INDE-5/`. 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 collaborative-problem-solving teams: summary, up to five members, five question solutions, a collaboration log, and documents.
- Open a Rocket.Chat group for a new team code and keep membership aligned when member emails change.
- Keep schools, school contacts, affiliations, subjects, and clusters (levels, members, meetings, resources).
- Generate a cluster code from level, subject, and province, and copy a template resource list onto a new cluster.
- Limit website users to their own teams and to schools where they are the IEB liaison.
- 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-5`, included by `INDE-5.sln` and by the larger `EvolutionSoftwareUnifiedFramework.sln`.
2. CPS surfaces under `controls/surface_custom`: collaborative problem solving teams, schools, school contacts, school affiliations, subjects, and the cluster surfaces.
3. Rocket.Chat helper `App_Code/rocketChat/RocketChatHelper.cs`.
4. Exam-moderation classes `examHandler` and `examNums`, plus the examination object classes, even though no examination surface control sits under `surface_custom`.
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. Local setup notes in `INDE-5/ReadME.txt`.
7. 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. No `[Test]`, `[Fact]`, or `TestMethod` attributes were found under the framework tree.
- A build or deploy step in the pipeline. The pipeline only runs a SonarQube scan.
- An `INDE-5` SQL script folder. `data/Scripts` contains folders for other codes, including `INDE-1`, `INDE-2`, and `INDE-6`, and does not contain `INDE-5`.
- The database rows that define canvases, surfaces, lookups, and templates. Those live in SQL Server.
- Sibling repositories named in the readme. They are not this repository, even where this tree still contains their SQL script folders.

## System architecture

```text
Browser
   |  ASP.NET Web Forms (core_custom/INDE-5)
   |  session user; INDE-5 Web.config does not set sessionState
   v
Surface controls (generated) + custom include blocks
   |  SQL via framework data layer (xData)
   |  prefixes pal_ (users) and publ_ (published surfaces)
   v
SQL Server catalog Framework_INDE-5_Demo  (active app setting "conn")

Also configured, not all of them exercised by CPS code:
   Rocket.Chat  https://chat.ieb.co.za
   WCF          localhost framework_service and service.ieb.co.za
   SMTP         smtp.evolutionsoftware.co.za:25
   SMS          sms.netgen.co.za
   MediSwitch   QA gateway hosts (switch MediSwitchResponses = 0)
```

`core/Web.config` and `core-dev/Web.config` set `sessionState timeout="60"`. The INDE-5 website `Web.config` does not. Whether the deployed INDE-5 site uses 60 minutes is **Unknown / Requires Confirmation**.

## Major components

| Component | Role | Evidence |
|---|---|---|
| `core_custom/INDE-5` | The INDE-5 website | `INDE-5.sln` website project |
| `controls/surface_custom` | Generated form, grid, and view for each CPS surface, with handwritten custom regions | Custom Include comments dated 2018 |
| `App_Code/objects` | Typed rows for published surfaces | `oCollaborativeProblemSolvingTeams`, `oSchools`, cluster objects, exam objects |
| `App_Code/rocketChat` | Rocket.Chat login, users, and private groups | `RocketChatHelper` |
| `business`, `library` | Shared framework enums, data access, encryption | Solution projects |
| `service` | WCF `framework_service.svc` | Website client endpoints |
| `tools/scheduler`, `SchedulerTool` | Framework scheduler projects | Present in the tree. No INDE-5 or CPS reference under `tools/scheduler` |
| `data` | SQL project and scripts for many customer codes | No `Scripts/INDE-5` |
| `core`, `core-dev` | Other website projects in the same solution | Not the INDE-5 site folder |

## Milestones

No milestone plan is documented. Dates that are in the tree:

| When | What | Provenance |
|---|---|---|
| 2018-05-14 to 2018-09-14 | Custom Include comments on CPS, school, and cluster saves | Implemented comments |
| 2025-07-09 | Repository imported to Bitbucket (`92789a4`, then `c854df0`) | Git history |
| 2026-09-28 | Silicon Ark onboarding issue created from a mechanical scan | Issue OVER-149 |
| 2026-10-12 | This documentation set | This change |

## Implementation plan

There is no forward implementation plan in the repository. The current state is a single imported `main` line. `bitbucket-pipelines.yml` also lists a `develop` branch for the SonarQube step. No `develop` branch was present on the remote during this inspection.

## Known dependencies

- .NET Framework 4.5 website (`compilation targetFramework="4.5"`).
- NuGet packages in `core_custom/INDE-5/packages.config`, including ASP.NET MVC 5.2.7, Web API 5.2.7, Newtonsoft.Json 11.0.1, OWIN 2.0.2, SharpZipLib 1.3.2, and Microsoft.CodeDom.Providers.DotNetCompilerPlatform 3.6.0. A binding redirect asks for Newtonsoft.Json 13.0.0.0 while the package file lists 11.0.1. Which assembly actually loads is **Unknown / Requires Confirmation**.
- Telerik.Web.UI, AjaxControlToolkit, and ICSharpCode.SharpZipLib, which the readme says must be re-added from a `components` folder.
- SQL Server catalog named in the active connection string.
- Rocket.Chat at `https://chat.ieb.co.za`.
- External mail, SMS, MediSwitch, and country web-service endpoints listed in `Web.config`. Several are switched off. See technical documentation.

The readme's setup steps are written as "Steps for INDE-1" and then "All Projects (INDE-1 … INDE-7)". They are the only local setup instructions in this repository.

## Current project status

**Imported and static on `main`.** Two commits, both on 2025-07-09. No open product plan, no test project, no INDE-5 SQL migration folder, and no deploy pipeline. The website code for CPS teams, clusters, schools, and Rocket.Chat is present and is the behaviour documented in the companion files.

## Human confirmation

- What CPS and IEB stand for in product language.
- Which database is production, and whether `Framework_INDE-5_Demo` is still the intended catalog.
- Whether examination-authoring surfaces are configured for this site in SQL Server.
- Whether `sonarqube_scan.bat` should exist; it was reported at discovery and is not in git.
- Secrets are stored in `Web.config` (database, SMTP, SMS, Rocket.Chat). Values are omitted here. They need a rotation and storage decision. This document does not treat those values as requirements.
