# Project plan — nltis

Evidence date: 2026-10-08.

Source repository: `git@bitbucket.org:overdrive/nltis.git`.

Inspected revision: `main` at `a9ea681` (2024-11-24, Jaco Brits, "new repo"). That commit is the only commit on `origin/main` and `origin/HEAD`. There are no other branches and no tags.

The scan-host path named on the onboarding issue (`~/projects/sonar_scan/repos/nltis`) was not on this machine. The tree below was read from a clone of `a9ea681`. That revision matches the commit the issue records (2024-11-24 07:46:39 +0200).

SQL passwords in `Web.config` and `App.config` files are omitted. See `technical-documentation.md`.

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

## Product

**There is no product document in the repository.** No README, no requirements file, and no occurrence of the string `nltis` in source, config, SQL, or the sample text file.

**Implemented** identity, from assembly attributes in `Neo.Afx.Core/Properties/AssemblyInfo.cs`:

- Assembly product: Neo Application Framework
- Assembly company: Neo Africa
- Copyright: Neo Africa 2020
- Assembly version: 1.0.0.0

The same `Neo.Afx.*` naming is used across the solutions. The user-facing web project is `Afx.UserConsole`.

**Implemented** data context, from connection strings (server and catalog only):

- Default configs use SQL Server `(local)`, catalog `EPWP`.
- `Neo.Afx.Services.Web/Web.Release.config` rewrites several Entity Framework connection strings to server `GROUPER\DEV09`, catalog `VectorWorkflowsLive`.

**Inferred** from the catalog name `EPWP`, the empty file `Neo.Afx.DbScripts/sample20190801.axiom.epwp.txt`, and the historical path `C:\Development\Orca\Neo\...` in `Neo.Afx.SqlServer.Security/RegisterNeoAfxSqlServerSecurity.sql`: this tree is a Neo Application Framework snapshot that was checked in under the git slug `nltis`, with configuration pointing at an EPWP / Axiom-named database. The repository does not say what NLTIS is, and it does not contain an NLTIS workflow, screen, or schema.

**Unknown / Requires Confirmation:** whether `nltis` is a client deployment of Neo AFX, a mis-filed import, or a product whose screens and database live in another repository. Whether anything still runs this revision.

## Branch reality

| Line | Tip | Date | What it is |
|---|---|---|---|
| `main` (default; `origin/HEAD`) | `a9ea681` | 2024-11-24 | Only branch. One commit, message `new repo` |

Author: Jaco Brits (`jaco@overdrive.co.za`). Nothing in git is dated after 2024-11-24. The commit message does not describe the imported tree. File dates inside the tree are not a git history.

## Objectives

No objectives file exists. What the single commit did: import the Neo AFX source tree onto `main`.

What the code is built to do, from project names and service contracts:

1. Host WCF JSON services for workflows, documents, correspondence, comments, audits, queries, notifications, and named integration data sources.
2. Provide an MVC user console for user details, settings, roles, fingerprint capture, and workflow buddies.
3. Run background workers that execute database-defined workflow task handlers and send email and SMS.
4. Register SQL CLR functions for entity formatting, integration invoke, RSA ID check-digit validation, and distance between coordinates.
5. Expose ActiveX-style WinForms controls for fingerprint capture, document scanning, and barcode label printing.

## Scope

### In scope of `main` at `a9ea681`

About 1,214 tracked files. Dominant types: 468 `.cs`, 304 `.dll`, 144 `.png`, 28 `.svc`, 26 `.edmx`.

| Path | Role |
|---|---|
| `Neo.Afx.Core` | Shared models, MVC base, security (`DomainMembershipProvider`, `SecurePassword`), utilities. .NET Framework 4.6.2 class library |
| `Neo.Afx.Services.Data` | Entity Framework data layer: audits, comments, correspondence, documents, forms, integration, notifications, performance, queries, reports, security, workflows |
| `Neo.Afx.Services.Admin.Data` | Admin data layer (assembly title `Neo.Afx.Admin.Data`, root namespace `Neo.Afx.Admin`): CRM, documents, forms, security, workflows, reports, delegation |
| `Neo.Afx.Services.Web` | IIS WCF site. .NET Framework 4.6.2 |
| `Web/Afx.UserConsole` | ASP.NET MVC 4 user console. .NET Framework 4.0 |
| `Neo.Afx.WinService.Common` | Polling worker scheduler (database or file settings). Class library, not a Windows Service exe |
| `Neo.Afx.WinService.Messages` | Email (SMTP) and SMS (Clickatell, called Vodazone, and Swift) senders |
| `Neo.Afx.WinService.Workflows` | Workflow task processor. Loads handlers from the database |
| `Neo.Afx.SqlServer` | SQL CLR: integration, formatting, RSA ID validation, geo distance. .NET Framework 4.6.2 |
| `Neo.Afx.SqlServer.Security` | SQL CLR: password hash and salt. Assembly title `Neo.SqlServer.Security` |
| `Neo.ActiveX.FingerprintReader` | DigitalPersona fingerprint control. .NET Framework 2.0 |
| `Neo.Afx.ActiveX.DocumentScanner` | WIA document scanner control. .NET Framework 4.6.2 |
| `Neo.Afx.ActiveX.Printing` | Barcode label printer control. .NET Framework 2.0 |
| `Neo.Afx.UnitTests` | One MSTest method. .NET Framework 4.8 |
| `Neo.Afx.SqlServer.UnitTest` | One MSTest method. .NET Framework 4.6.2 |
| `Assemblies` | Vendored binaries (DevExpress, ABCpdf, DigitalPersona, Open XML, EF, Newtonsoft, Clickatell, Swift, WIA) |
| `Deploy` | Copies of service markup and SQL registration scripts |
| `Neo.Afx.DbScripts` | One empty text file |

Solutions:

| Solution | Projects |
|---|---|
| `Neo.Afx.WebServices.sln` | Services.Web, Services.Data, Core, Services.Admin.Data. Visual Studio 2017 (15). Configurations Debug, QA, Release |
| `Neo.Afx.WindowsServices.sln` | Services.Data, Core, WinService.Common, WinService.Messages, WinService.Workflows, UnitTests. Visual Studio 2022 (17) |
| `Neo.Afx.SqlServer.sln` | SqlServer, SqlServer.Security, SqlServer.UnitTest |
| `Neo.Afx.ActiveX.sln` | DocumentScanner, Printing. Visual Studio 2017 (15). `Neo.ActiveX.FingerprintReader` is not in any solution |
| `Web/Afx.Consoles.sln` | UserConsole, Core, a project path that is not in the tree, Services.Data |

### Out of scope / not in this repository

- `sonar-project.properties` and `sonarqube_scan.bat`. The onboarding scan listed them beside the git files. They are not in git history.
- A Windows Service host executable (`ServiceBase` / installer). The worker projects are class libraries.
- `FormService` and `ValidationService` source. Deployed `.svc` files name those types. No matching class exists in this tree.
- NuGet `packages` folders referenced by HintPath (`Web\packages\...`). Not tracked. `Web/Afx.UserConsole/packages.config` lists only EntityFramework 6.1.3, while the project file also references MVC 4, Razor 2, WebPages 2, Web API client 4, and Newtonsoft.Json 4.5.1.
- Database schema, stored procedures, and seed data. Behaviour that calls `Pr_SaveUser` and similar procedures is defined in SQL that is not here.
- Dockerfile, Bitbucket Pipelines, IIS site definition, and a production host name.
- Any screen, table, or string that names NLTIS.

## Architecture

```text
Browser / other AFX site
    │
    ├─ Afx.UserConsole (MVC 4, [Authorize])
    │     SecurityDatabase, AfxAdminWorkflowDatabase
    │
    └─ Neo.Afx.Services.Web (WCF WebServiceHostFactory, JSON)
          Workflow, Document, Correspondence, Comment,
          Audit, Query, Notifications, Integration
          plus ASHX viewers (document, email, Excel, report)
                │
                ▼
          Neo.Afx.Services.Data / Admin.Data
          Entity Framework 6 → SQL Server catalog EPWP
          (Release transform: VectorWorkflowsLive)

Background (host exe not in this repo)
    Neo.Afx.WinService.Workflows  → handlers stored in the database
    Neo.Afx.WinService.Messages   → SMTP, Clickatell, Swift

SQL Server CLR
    Neo.Afx.SqlServer, Neo.Afx.SqlServer.Security

Desktop / browser ActiveX hosts
    Fingerprint, WIA scanner, barcode label printer
```

Workflow templates, task handlers, mail settings, and integration data sources are stored in SQL Server. This repository supplies the engine. It does not supply the EPWP or NLTIS template rows.

## Milestones

No milestone plan exists. Observable timeline from evidence that is in the tree:

| When | Evidence |
|---|---|
| Copyright year 2020 | `AssemblyCopyright` on `Neo.Afx.Core` |
| Sample filename 2019-08-01 | `sample20190801.axiom.epwp.txt` (file is empty) |
| Visual Studio 2017 solutions | `Neo.Afx.WebServices.sln`, `Web/Afx.Consoles.sln` (`Visual Studio 15`) |
| Visual Studio 2022 solution | `Neo.Afx.WindowsServices.sln` (`Visual Studio Version 17`) |
| 2024-11-24 | Only git commit, `new repo` |

**Unknown / Requires Confirmation:** original development dates, which client the EPWP catalog served, and why the import was named `nltis`.

## Dependencies

Known from project files and `Assemblies/`:

- .NET Framework 2.0 (fingerprint and printing ActiveX), 4.0 (user console), 4.6.2 (most libraries and the web services site), 4.8 (unit test project)
- ASP.NET MVC 4.0.20505.0, Razor 2, WebPages 2
- Entity Framework 6.1.3
- Newtonsoft.Json (4.5.1 on the console; a DLL is also vendored)
- WCF `WebServiceHostFactory`
- DevExpress XtraReports (`ReportGenerator`)
- DigitalPersona U.are.U (`Assemblies/DigitalPersona`)
- WIA (`Assemblies/Scanning`, `Interop.Wiaaut`)
- Clickatell COM (`SMS_COMAPI.dll`) and Swift (`SwiftUniversal.dll`)
- SQL Server Reporting Services 2010 client, generated from `http://hannes-pc/Reportserver_HANNESDESKTOP/ReportService2010.asmx`
- SQL Server CLR (`EXTERNAL_ACCESS` for `Neo.Afx.SqlServer`, `SAFE` for the security assembly)

## Current project status

Imported snapshot. One commit. No subsequent work on this remote.

Build consistency problems visible without compiling:

- `Web/Afx.Consoles.sln` references `..\Neo.Afx.Admin.Data\Neo.Afx.Admin.Data.csproj`. That path is not in the tree. The GUID matches `Neo.Afx.Services.Admin.Data`.
- `UserConsoleController.Save` calls `SecurityDatabase.SaveUser` with 7 arguments. The method in `Neo.Afx.Services.Admin.Data` takes 10 arguments (`userID`, `knownAs`, `lastName`, `firstName`, `email`, `ntAccount`, `cell`, `officeLocationID`, `userProfileDocID`, `updatedByID`).
- Deployed `FormService.svc` and `ValidationService.svc` point at types that are not in the source.
- `Neo.Afx.SqlServer.UnitTest` calls `DataSource.GetData("GetVerifiedLicenceToUseXml", ...)` and does not assert a result.
- `Neo.Afx.UnitTests` opens `SqlIntegrationStore` and does not assert a result.

**Unknown / Requires Confirmation:** whether this tree builds, which solution is the supported entry, and which database the procedures `Pr_SaveUser` and the workflow handler rows belong to.

## Human confirmation

- What `nltis` refers to, and whether this Neo AFX tree is the right repository for that name.
- Whether the EPWP / `VectorWorkflowsLive` databases are still the intended targets.
- Whether the plaintext SQL credentials in config are still valid, and whether they should be rotated. Values are not repeated in Silicon Ark.
- Which host, if any, still runs the WCF site, the user console, the workers, and the CLR assemblies.
- Whether `FormService` and `ValidationService` were intentionally dropped.
