# Project plan — ieb-inde-1

Evidence date: 2026-10-13.

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

Inspected revision: `main` at `9bf5ac3` (2025-07-03, author `maanie`, "Initial commit"). The scan-host path `~/projects/sonar_scan/repos/ieb-inde-1` 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-1/ReadME.txt` names this project **Exams = INDE-1** 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 "IEB". The letters IEB appear in email subjects (`IEB: ...`), in the mail subject prefix `IEB:: Exams (INDE-1)`, in the SQL template sign-off "IEB Team", and in the repository name. Provenance: **Documented** for the project list; **Implemented** for the IEB mail wording. 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. Exam-specific behaviour is C# in `core_custom/INDE-1` that tracks a subject through authoring and moderation, numbers document packs, records compliance, and emails the assigned examiner, reviewer, and moderators.

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

## Branch reality

| Line | Tip | Date | What it is |
|---|---|---|---|
| `main` (default; `origin/HEAD`) | `9bf5ac3` | 2025-07-03 | Only branch. One commit |

Custom regions in the generated forms are dated 2018-02-06 to 2018-02-10 (developer comment: Graham Rook). A status comment is dated 2019-03-12 ("IEB-121"). The only INDE-1 SQL script filename is dated 2020-05-04. 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.

The readme's setup steps also mention INDE-1 through INDE-7.

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

- Keep one examination subject (year, type, level, paper, subject, code, document password) and assign five resources: examiner, reviewer, internal moderator, external moderator, assessment specialist.
- Let the reviewer move that subject through a fixed status list and email the role that the new status names.
- Give each subject one or more document packs, numbered from the parent subject, with a revision count.
- Let the examiner or reviewer mark an upload complete, which sets the next status and writes an internal collaboration log.
- Let the internal moderator and the external moderator score criteria 1–12, write a collaboration log when the overall result changes, and show a compliance summary.
- Keep internal and external collaboration notes, and email the other roles named in `surfaceNotes`.
- 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-1`, which is the INDE-1 site inside `EvolutionSoftwareUnifiedFramework.sln` and in `INDE-1.sln`.
2. Exam classes `examHandler` and `examNums`, plus the generated surface forms that call them.
3. Generated surfaces for examination authoring and moderation, examination document packs (including exam-documents, internal-moderation, and external-moderation forms), and subject management.
4. SQL script `data/Scripts/INDE-1/2020-05-04-DP-INDE-1-update-template.sql`.
5. The rest of the Evolution framework that shipped in the same tree: `core`, `core-dev`, `library`, `business`, `service`, `mobile`, `tools`, `data`, `release`.
6. Local setup notes in `INDE-1/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. `Web.config` points at `http://localhost:27559` and catalog `Framework_INDE-1_Demo`.
- Automated tests for the exam site. No INDE-1 test project was found. `tools/CEP` contains console tests for another client. `core/Test.aspx` and `core-dev/Test.aspx` are framework pages, not a test suite.
- A build or deploy step in the pipeline. The pipeline only runs a SonarQube scan.
- The database rows that define canvases, surfaces, and templates. Those live in SQL Server. The INDE-1 script folder updates two email templates only.
- Stored procedure `sp_INDE_GetCriterionFeedbackData`, which `examHandler` calls and which is not in `data/Scripts`.
- Sibling repositories named in the readme. They are not this repository.
- `sonarqube_scan.bat`, named by the onboarding scan at task creation. It is not in revision `9bf5ac3`.

## System architecture

```text
Browser
   |  ASP.NET Web Forms (core_custom/INDE-1)
   |  session user, 20-minute timeout
   v
Surfaces (SQL-driven) + custom include regions
   |  Examination Authoring and Moderation
   |  Examination Document Pack (documents, internal moderation, external moderation)
   |  Subject Management
   v
examHandler / examNums
   |  status mail, collaboration mail, compliance HTML, role lookup
   v
xData  ->  SQL Server catalog Framework_INDE-1_Demo (active app setting)
   |         pal_  configuration (users, templates, lookups)
   |         publ_ published surface tables
   v
SMTP smtp.assetonline.co.za:587
   from ieb-exams@assetonline.co.za
```

`service/framework_service.svc` is the framework WCF host. The exam classes call `xData` in-process. Whether the website calls the WCF service for exam saves was not traced. **Unknown / Requires Confirmation.**

## Major components

| Component | Role on this site |
|---|---|
| `core_custom/INDE-1` | The exams website. |
| `examHandler` / `examNums` | Status mail, log mail, roles, compliance HTML. |
| Generated `surface_custom` forms | Field binding plus the custom regions dated 2018-02. |
| `controls/module/surfaceNotes.ascx.cs` | Who receives a collaboration-log email. |
| `controls/admin/attachments.ascx.cs` | Who may add, edit, remove, or open examination files. |
| `library` (`framework_library`) | Shared data access. Target framework v4.5. |
| `business` (`pNums`) | Framework user types and module enums. |
| `data` | SSDT project. INDE-1 scripts plus other clients' scripts. |
| `service` | WCF `framework_service.svc`. |
| `tools/scheduler` | Framework scheduler. Not referenced by the exam classes that were read. |
| `core` / `core-dev` | Generic framework sites bound beside INDE-1. `core` solution entry uses `http://localhost:45935`. |

## Milestones visible in the tree

There is no milestone plan. Dates that are in the tree:

| When | Evidence |
|---|---|
| 2018-02-06 to 2018-02-10 | Custom include comments on the exam forms and attachments. |
| 2019-03-12 | Comment "IEB-121" adding status "IM Compliant - Minor Changes". |
| 2020-05-04 | SQL script updating the two examination email templates. |
| 2025-03-25 | Checked-in `ApplicationLog_20250325.txt` under the website. Not used as a requirements source. |
| 2025-07-03 | Only Git commit, "Initial commit". |

## Implementation plan

No forward plan is written in the repository. What the tree shows as the way the site is built:

1. Open `INDE-1.sln` or `EvolutionSoftwareUnifiedFramework.sln`.
2. Re-add the DLLs named in `INDE-1/ReadME.txt` (EPPlus, NReco.VideoConverter, AjaxControlToolkit, Telerik.Web.UI, ICSharpCode.SharpZipLib) and reinstall `Microsoft.CodeDom.Providers.DotNetCompilerPlatform`.
3. Point `conn` at a SQL Server catalog. The active value is `Framework_INDE-1_Demo`. Commented alternatives use `Framework_INDE-1` and `Framework_EVOL-1`.
4. Publish from `App_Data/PublishProfiles/INDE-1.pubxml` or `INDE-1-IEB.pubxml` to a local folder. No pipeline step does this.

## Known dependencies

- .NET Framework. Website compilation `targetFramework="4.8"`. Library project `TargetFrameworkVersion` v4.5.
- SQL Server and the unpublished surface metadata.
- Telerik.Web.UI, Ajax Control Toolkit, EPPlus, NReco.VideoConverter, ICSharpCode.SharpZipLib.
- SMTP host `smtp.assetonline.co.za`.
- Optional framework integrations present in config and not called by the exam classes that were read: MediSwitch QA gateways, country web services at `webservicex.net`, SMS credentials (values omitted).
- SonarQube via Bitbucket Pipelines. Scanner image `maven:3.8.3-jdk-11`. The application is not a Maven build.

## Current project status

**Implemented** as a single imported working copy on `main`. Custom exam behaviour is in the website project. Production host, production database, and whether the 2018–2020 behaviour is still the live process are **Unknown / Requires Confirmation**.

## Human confirmation

- The full name of IEB.
- Which catalog and host are production. The checked-in active settings are local and demo.
- Whether a reviewer who is not a SuperUser can save a status change. See business rules.
- Which document-pack form is the one the database surface loads. Three forms prefer lookup `customCode`; `ExaminationDocumentPack_form.ascx.cs` does not.
- Where `sp_INDE_GetCriterionFeedbackData` is defined.
- Whether the checked-in scheduler secret file and `.pfx` are still valid and should remain in Git. Values were not copied into this document.
