# Project plan — ieb-inde-3

Evidence date: 2026-10-13.

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

Inspected revision: `main` at `ce71caf` (2025-07-09, Renier van Rooyen, "Added INDE-3"). The scan-host path `~/projects/sonar_scan/repos/ieb-inde-3` 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-3/ReadME.txt` lists a family of projects and does not give INDE-3 a product name:

| 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)". INDE-3 and INDE-7 appear only in that setup list. Provenance: **Documented**.

The custom website under `core_custom/INDE-3` is examination authoring and moderation: subjects, document packs, internal and external compliance, and status mail whose subject line starts with `IEB:`. The readme's name **Exams** is attached to INDE-1, not to INDE-3. Whether this repository is the exams product, a later copy of it, or a different exam workflow is **Unknown / Requires Confirmation**. Provenance of the exam behaviour: **Implemented**.

The letters IEB appear in mail subjects, in the `website` app setting `IEB:: Website`, and in the repository name. 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-3-specific behaviour is in `examHandler`, `examNums`, and the custom regions of the examination surfaces. Those regions are signed Graham Rook and dated 2018-02-06 through 2018-02-15.

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

## Branch reality

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

History, both commits on 2025-07-09:

- `f403eb4` — Abdurahmaan Ismail, "Initial commit". Adds only the root `.gitignore`.
- `ce71caf` — Renier van Rooyen, "Added INDE-3". Adds the `INDE-3/` tree.

Custom comments in the examination surfaces are dated 2018-02-06 through 2018-02-15 (Graham Rook). A generated comment on the save addon says "GR - 2017-04-06". 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` defines a site named `INDE-3` whose physical path is `C:\DEV work\NEW_IEB\INDE-3\Evolution Software Unified Framework\Evolution Software Unified Framework\core_custom\INDE-3`. 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 `ce71caf`. The committed root is `.gitignore` and `INDE-3/`. 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 an examination subject: year, level, paper, type, subject code and name, status, document password, and five resource roles.
- Build a document-pack number from the parent subject and a revision count, and hold examination documents on that pack.
- Let the examiner and the reviewer mark documents uploaded, which moves the subject status and writes an internal collaboration log.
- Let the reviewer change subject status, write an internal or external collaboration log, and email the role that the new status addresses.
- Let the internal moderator and the external moderator record criterion compliance and feedback on a document pack.
- 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-3`, included by `INDE-3.sln` and by the larger `EvolutionSoftwareUnifiedFramework.sln`.
2. Examination surfaces under `controls/surface_custom`: Examination Authoring and Moderation, Examination Document Pack (including exam documents, internal moderation, and external moderation), and Subject Management.
3. `App_Code/classes/examHandler.cs` and `examNums.cs`.
4. Custom modules `CriterionFeedback` and `billingInstructions`.
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-3/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 of the examination workflow. No `[Test]`, `[Fact]`, or `TestMethod` attributes were found. `tools/CEP/CEP.ConsoleTests` is a quote and inventory console harness, not an INDE-3 test project.
- A build or deploy step in the pipeline. The pipeline only runs a SonarQube scan.
- An `INDE-3` SQL script folder. `data/Scripts` contains folders for other codes, including `INDE-1`, `INDE-2`, and `INDE-6`, and does not contain `INDE-3`.
- 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-3)
   |  sessionState timeout 20 minutes
   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-3_Demo  (active app setting "conn")

Also configured, not all of them exercised by the examination code:
   WCF          localhost framework_service (port 58913)
   SMTP         Amazon SES eu-west-1, port 2587
   SMS          sms.netgen.co.za
   MediSwitch   QA gateway hosts (switch MediSwitchResponses = 0)
   reCAPTCHA    siteverify endpoint; keys present
```

`WebAddy` is `http://localhost:35474`, which matches the INDE-3 website port in `INDE-3.sln`.

## Major components

| Component | Role | Evidence |
|---|---|---|
| `core_custom/INDE-3` | The INDE-3 website | `INDE-3.sln` website project, .NET Framework 4.5 |
| `controls/surface_custom` | Generated form, grid, and view for each examination surface, with handwritten custom regions | Custom Include comments dated 2018-02 |
| `App_Code/classes/examHandler.cs` | Status mail, collaboration log, compliance HTML, criterion stored procedure | Called from the examination forms |
| `App_Code/classes/examNums.cs` | Status, role, and compliance lookup ids | Used by the handler and the forms |
| `App_Code/objects` | Typed rows for the published surfaces | `oExaminationAuthoringandModeration`, `oExaminationDocumentPack`, `oSubjectManagement` |
| `controls/module_custom/CriterionFeedback` | Loads and saves a criterion feedback row | Called from the external moderation form |
| `business`, `library` | Shared framework enums, data access, encryption | Solution projects. Library assembly product "Evolution Software Framework", company "Evolution SoftWare", version 1.0.0.0, copyright 2016 |
| `service` | WCF `framework_service.svc` | Website client endpoint on localhost:58913 |
| `tools/scheduler`, `SchedulerTool` | Framework scheduler projects | Present in the tree. No INDE-3 examination job was identified |
| `data` | SQL project and scripts for many customer codes | No `Scripts/INDE-3`. Includes `Framework_STUD-1.bak` |
| `core`, `core-dev` | Other website projects in the same solution | Not the INDE-3 site folder |

## Milestones

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

| When | What | Provenance |
|---|---|---|
| 2016 | Library assembly copyright | `library/Properties/AssemblyInfo.cs` |
| 2017-04-06 | Generated comment on the custom save addon stub | Form comments |
| 2018-02-06 to 2018-02-15 | Custom Include comments on examination populate, status, grid filter, and criterion feedback | Implemented comments |
| 2025-07-09 | Repository imported to Bitbucket (`f403eb4`, then `ce71caf`) | Git history |
| 2026-09-28 | Silicon Ark onboarding issue created from a mechanical scan | Issue OVER-147 |
| 2026-10-13 | 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.

`INDE-3.sln` records Team Foundation Server `https://dev.azure.com/evolutionsoft`. That is source-control metadata in the solution file. It is not a deployment plan.

## Known dependencies

- .NET Framework 4.5 website (`compilation targetFramework="4.5"` in the INDE-3 `Web.config`; library `TargetFrameworkVersion` `v4.5`).
- The INDE-3 website `packages.config` lists only `Microsoft.CodeDom.Providers.DotNetCompilerPlatform` 2.0.0. The readme says to reinstall that package and to re-add AjaxControlToolkit, Telerik.Web.UI, and ICSharpCode.SharpZipLib from a `components` folder. EPPlus and NReco.VideoConverter are called out for the library project.
- SQL Server catalog named in the active connection string.
- Outbound mail template names `Examination Moderation Status` and `Examination Moderation Log`, stored as framework templates, not as files in this tree.
- Stored procedure `sp_INDE_GetCriterionFeedbackData`. Its body is not in an INDE-3 script folder.
- External mail, SMS, MediSwitch, reCAPTCHA, and country web-service endpoints listed in `Web.config`. Several switches are 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 examination test project, no INDE-3 SQL migration folder, and no deploy pipeline. The website code for examination subjects, document packs, moderation criteria, and status mail is present and is the behaviour documented in the companion files.

## Human confirmation

- What INDE-3 is called in product language. The readme names Exams as INDE-1. This tree implements examination authoring and moderation under INDE-3.
- What IEB stands for.
- Which database is production, and whether `Framework_INDE-3_Demo` is still the intended catalog. A commented setting names `Framework_INDE-3` on the local server.
- Whether a reviewer below SuperUser is expected to save a status change. The status list is enabled for the reviewer, and the save buttons are hidden for every user below SuperUser.
- Whether the subject grid filter is meant to match user ids or display names. The form stores resource role ids. The grid compares `userDisplay`.
- Whether `sonarqube_scan.bat` should exist; it was reported at discovery and is not in git.
- Secrets are stored in `Web.config` and in committed JSON and certificate files. Values are omitted here. They need a rotation and storage decision. This document does not treat those values as requirements.
