# Project plan — ieb-inde-6

Evidence date: 2026-10-12.

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

Inspected revision: `main` at `d9e4836` (2025-07-09, Renier van Rooyen, "Added INDE-6"). The scan-host path `~/projects/sonar_scan/repos/ieb-inde-6` 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-6/ReadME.txt` names this project **Postbox = INDE-6** 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, in the SQL seed `submissions@ieb.co.za`, in the live service host `service.ieb.co.za`, and in the repository name. Provenance: **Documented** for the project list; **Implemented** for the IEB mail and service host. 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. Postbox-specific behaviour is C# in `core_custom/INDE-6` that creates school and group file canvases, copies folder trees, emails schools and the IEB submissions mailbox, tracks downloads, and provisions regional-moderator users.

There is no product requirements document in the source repository or in Silicon Ark before this set.

## Branch reality

| Line | Tip | Date | What it is |
|---|---|---|---|
| `main` (default; `origin/HEAD`) | `d9e4836` | 2025-07-09 | Only branch. Two commits, both on 2025-07-09 |

History:

- `a99f6ea` — Abdurahmaan Ismail, "Initial commit".
- `d9e4836` — Renier van Rooyen, "Added INDE-6".

SQL scripts under `data/Scripts/INDE-6` are dated in their filenames from 2019-10-23 to 2020-08-27. 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.

`library/obj` file lists refer to `C:\DEV work\NEW_IEB\INDE-2\...`. Provenance: **Inferred** that this tree was built from an INDE-2 working copy. 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)

- Give each school a postbox of file canvases (assessment materials, assessment records, correspondence, school submissions, circulars, newsletters, regional-moderation documents, regional-moderation reports).
- Let a group postbox fan a file out to the linked schools' canvases.
- Email school contacts when materials, records, or correspondence arrive, and email the IEB submissions address when a school submits a file.
- Record who downloaded a file.
- When a regional moderator is first saved, create a login, a welcome email, up to three subject links, and a pair of file canvases per subject and school.
- 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-6`, which is the INDE-6 site inside `EvolutionSoftwareUnifiedFramework.sln` and is the folder named by `INDE-6.sln`'s sibling solution file.
2. Postbox classes `PostboxHelper`, `PostboxEmails`, `PostboxDownloadTracking`, `PostboxCanvasNums`, plus the file-explorer and surface-form hooks that call them.
3. Generated surface controls for schools, school contacts, subjects, clusters, group postboxes, and file-explorer downloads.
4. SQL scripts `data/Scripts/INDE-6/INDE-6-1.0.0` through `INDE-6-1.0.19`.
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-6/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 attributes were found.
- 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, not fully in git. Script folder `INDE-6` covers a slice of 2019–2020 changes only.
- Sibling repositories INDE-1, INDE-2, INDE-4, INDE-5, INDE-8, and INDE-9. They are named in the readme and are not this repository.

## System architecture

```text
Browser
   |  ASP.NET Web Forms (core_custom/INDE-6)
   |  session user, 60-minute timeout
   v
Canvases + surfaces (SQL-defined) + Telerik file explorer
   |  PostboxHelper / PostboxEmails / PostboxDownloadTracking
   |  examHandler (examination authoring still compiled in)
   v
SQL Server catalog Framework_INDE-6_Demo  (active app setting "conn")
   pal_* configuration, publ_* published surfaces, qt_* query tables
   |
   +-- files under ~/upload/explorer/{canvas}
   +-- SMTP smtp.evolutionsoftware.co.za
   +-- WCF http://localhost:58913/framework_service.svc
   |      and http://service.ieb.co.za/framework_service.svc
   +-- SMS http://sms.netgen.co.za/SMS_V2.asmx
   +-- MediSwitch QA gateways (switch MediSwitchResponses = 0)
```

Which of the two WCF endpoints the running site calls was not traced. Both are present in `Web.config`. Provenance: **Implemented** as configuration.

## Major components

| Component | Role |
|---|---|
| `core_custom/INDE-6` | INDE-6 website. Publish profile `INDE-6.pubxml` writes a precompiled site to `D:\Blue Sky\Publish` and excludes `images` and `upload`. |
| `core` | Framework website bound in the solution to `http://localhost:45935`. |
| `core-dev` | Second website project in the same solution. |
| `library` (`framework_library`) | .NET Framework 4.5 class library. Output `components\framework_library.dll`. |
| `business` | Domain objects and `pNums` enums, including user types and `Module.FileExplorer = 65`. |
| `service` | WCF `framework_service.svc`. |
| `data` | SQL Server project `data.sqlproj`, plus per-client script folders. |
| `tools/constructor`, `tools/exporter`, `tools/scheduler`, `tools/dataImporter` | Framework utilities. |
| `tools/CAPI.Custom`, `tools/CEP` | Quote and purchase-order code. Not referenced by the Postbox classes read for this plan. |
| `mobile` | Class library project. No screens were found. |
| `release/1.0.0.1`, `release/1.0.5` | Each contains `files.zip` and `scripts.zip`. Contents were not unpacked. |

## Milestones

No project plan or tagged release notes are in git. Dates below are evidence from filenames and commits, not an approved schedule.

| When | Evidence | What it shows |
|---|---|---|
| 2019-10-23 to 2019-11-15 | SQL `INDE-6-1.0.0` through `1.0.6` | School-contact and IEB-contact email templates, submissions mailbox, file-explorer download table. |
| 2020-06-01 to 2020-08-27 | SQL `INDE-6-1.0.7` through `1.0.19` | Group postbox publish, subject "level" rename, regional-moderation email templates, paged surface query procedure. |
| 2025-07-09 | Git `a99f6ea`, `d9e4836` | Repository created and the INDE-6 tree added. |
| Unknown | `release/1.0.0.1`, `release/1.0.5` | Zip bundles exist. No tag or note says either is the current production build. |

## Implementation plan

There is no forward implementation plan in the repository. The readme's "Steps for INDE-1 Code to get running" tell a developer to re-add `EPPlus.dll`, `NReco.VideoConverter.dll`, `AjaxControlToolkit.dll`, `Telerik.Web.UI.dll`, and `ICSharpCode.SharpZipLib.dll`, reinstall `Microsoft.CodeDom.Providers.DotNetCompilerPlatform`, and for INDE-2 add `Ionic.Zip`. Those steps are **Documented**. They are written against INDE-1 and then "all projects", not as an INDE-6-only runbook.

## Known dependencies

- .NET Framework 4.5 class libraries. The INDE-6 `Web.config` sets `compilation targetFramework="4.5"` and comments an `httpRuntime targetFramework="4.6.2"`.
- SQL Server. Active catalog name `Framework_INDE-6_Demo`. Commented catalogs use `Framework_INDE-6`.
- Telerik Web UI file explorer, Ajax Control Toolkit, EPPlus, NReco.VideoConverter, SharpZipLib, Ionic.Zip (used when several files are downloaded as `Combined.zip`).
- SMTP at `smtp.evolutionsoftware.co.za`.
- Optional SMS gateway `sms.netgen.co.za`.
- Optional MediSwitch QA gateways. `MediSwitchResponses` is `0`.
- SonarQube scanner pipe `sonarsource/sonarqube-scan:3.0.2` on a Maven JDK 11 image.

## Current project status

The Git default branch is a two-commit import dated 2025-07-09. Product SQL in this repo stops at 2020-08-27. No open feature branch, test project, or deploy pipeline was found.

The checked-in website config points at a demo catalog, `WebAddy` `http://localhost:60629`, and `debug="true"`. Whether that file matches a deployed server is **Unknown / Requires Confirmation**.

## Discrepancy with the onboarding scan

The task-creation scan listed `sonarqube_scan.bat` at the repository root beside `INDE-6`. That file is not in the git tree at `d9e4836`. Provenance: **Unknown** — it may have been an untracked file on the scan host.

`sonar-project.properties` sets `sonar.projectKey=overdrive_ieb_8345eef9-efa7-4cfa-bc4a-5a046ec95189`. The pipeline `EXTRA_ARGS` also pass `-Dsonar.projectKey=my-project`. Provenance: **Implemented** as two different keys. Which key Sonar uses is **Unknown / Requires Confirmation**.

## Human confirmation

- Whether "IEB" in this product is the examinations body suggested by `ieb.co.za`, and whether Postbox is still in production.
- Whether `Framework_INDE-6_Demo` or `Framework_INDE-6` is the catalog operators should treat as current.
- Whether `core`, `core-dev`, or `core_custom/INDE-6` is the site that gets published. The publish profile exists only under `core_custom/INDE-6`.
- Whether hardcoded canvas ids in `PostboxCanvasNums.ParentCanvas` match the database this site uses.
- Whether cluster surfaces, examination-authoring code, MediSwitch, loyalty, cart, and the other client script folders are live for Postbox or leftover framework.
- Rotation of plaintext SQL, SMS, and SMTP credentials stored in `Web.config`. Values are omitted from these documents.
