# Features — legitimate

Evidence date: 2026-10-10. Source: `git@bitbucket.org:overdrive/legitimate.git`, `main` at `0a9b1c8`.

Status values: **Implemented** (present in this revision), **Changed** (commit after the import), **Planned** (named as future work). No planned-feature list exists in the repository. Nothing is marked planned.

`legitimate_licences` is a different repository. Features below are only this tree.

## Current features

### Authentication and users

| Feature | Status | Evidence |
|---|---|---|
| Forms sign-in and sign-out | Implemented | `Neo.Legitimate.Web/Controllers/Auth/AuthController.SignIn.cs` |
| Forgot password via security question | Implemented | `AuthController.ForgotPassword.cs` |
| Fingerprint sign-in, off in checked-in config | Implemented, disabled | `FingerprintAuthenticationEnabled` = false; `Assemblies/Pilotfish.Afx.ActiveX.FingerprintReader.reg` |
| User console: users, roles, security, buddies, activity, settings | Implemented | `Neo.Legitimate.UserConsole` |
| Admin module securables for users and places | Implemented | `Securable.AdminModule` 7000–7002 |

### Applications

| Feature | Status | Evidence |
|---|---|---|
| Application home, default route `Applications/Default` | Implemented | `Global.asax.cs` |
| Application request types 1–28, including combined renewal, transfer, COV, and capacity changes | Implemented | `ApplicationRequestType` |
| Pre-check before create | Implemented | `Applications/Scripts/Default-Events.cshtml` |
| Receipts, reprint, cancel, zero-value, assign | Implemented | Receipt securables 1051–1055, 1073, 1074, 1083 |
| Cash-up and cash-up administrator | Implemented | `ApplicationsController.Cashup.cs`, `CashupModule` |
| Verification, exceptions, auditing, status, reports | Implemented | `ApplicationsController.*.cs` |
| Data purification screens (identity, routes, service type, blocked lists, LTPS, OLAS, allowed new licences, receipts) | Implemented | `ApplicationsController.Purification*.cs` |
| Pagination for very large lists | Changed | Commit `37765b1` "#7_25,000+ list / pagination" |

### Adjudication

| Feature | Status | Evidence |
|---|---|---|
| Hearing and in-committee meeting | Implemented | `AdjudicationType` |
| Agenda finalise, print, decisions, approve, reverse, minutes, decision letter | Implemented | Adjudication securables 1010–1017, 1067, 1068, 1070 |
| Add application by 10-character reference while the agenda is awaiting finalisation | Implemented | `AdjudicationConsole/Scripts/Applications-Events.cshtml` |
| Remove application only before the hearing starts (statuses 1 and 4) | Changed | `Applications.cshtml`; commit `7c6f17e` |
| Quorum of two panel members | Changed | `Panel.cshtml`; commit `b1c576e` |
| Replace a panel member after start; postpone | Implemented | `Panel-Events.cshtml`, `Panel.cshtml` |
| Bypass adjudication and scheduler override | Implemented | Securables 1020, 1025, 1033 |
| Reschedule postponed and adjourned applications | Implemented | Securable 1021 |

### Gazette, inspection, verification

| Feature | Status | Evidence |
|---|---|---|
| Create, finalise, publish, and print a gazette | Implemented | Gazette securables; `GazetteConsole` |
| Bypass gazette expiry | Implemented | Securable 1044 |
| Inspection console and operating-licence inspections list | Implemented | `InspectionConsole`, `OperatingLicencesController.Inspections.cs` |
| Verification console: queue, pre-check, verification, audit | Implemented | `VerificationConsole` |
| Live verification list over SignalR | Implemented | `Hubs/MessageHub.cs` |
| Bulk vehicle verification | Implemented | `Neo.Legitimate.BulkVehicleVerificationConsole` |

### Operating licences

| Feature | Status | Evidence |
|---|---|---|
| Awaiting issue, issued, expiring within 60 days, expired, suspended, archived | Implemented | `LicenceStatus` |
| Print test, print actual, issue without print, reprint, temporary replacement letter | Implemented | Securables 2011, 2012, 2023, 2003, 2024 |
| Amend routes, unlock sections, update verified vehicle, flag VIN correct, delink vehicle | Implemented | Securables 2013, 2014, 2019, 2020, 2025 |
| Expiries and issuing expiries | Implemented | `OperatingLicencesController.Expiries.cs`, `IssuingExpiries.cs` |
| Extensions / upliftment | Implemented | `LicenceUpliftmentExtensionRequest`, securable 2029 |
| 14-day maximum for a temporary special licence | Implemented | `LicenceIssueRequestController.cs` |
| Operating-licence purification | Implemented | `OperatingLicencesController.Purification.cs` |

### Associations, members, routes, vehicles

| Feature | Status | Evidence |
|---|---|---|
| Association list, console, route adjustment, reports | Implemented | `Associations`, `AssociationConsole` |
| Member list, console, contact save, reports | Implemented | `Members`, `MemberConsole` |
| Route list, new route, purification of OLAS descriptions, national and board numbers, reports | Implemented | `Routes`, `RouteConsole`, `NewRouteRequest` |
| Vehicle list, console, related licences, reports | Implemented | `Vehicles`, `VehicleConsole`, `NewVehicleRequest` |
| Registration number not required by the unscheduled pre-check | Changed | Commented-out check in `Default-Events.cshtml`; commit `c3ef5ef` |
| New association, member, route, and vehicle requests with type New or Verification required | Implemented | Request-type enums |

### E-hailing

| Feature | Status | Evidence |
|---|---|---|
| Mode E-Hailing (id 6) | Changed | `DbScripts/01_Insert_EHailing_Mode.sql`, `Mode.EHailing` |
| Service type E-Hailing (id 9), exclusive to that mode in SQL | Changed | `DbScripts/05_Insert_EHailing_ServiceType.sql`, `06_Alter_Fn_AllowedServiceTypesForMode.sql`, commit `9e15893` |
| Document types 6000–6005 and yes/no questions | Changed | `DbScripts/07_20251121_Add_E_Hailing_Documents_And_Questions.sql` |
| Mapping of those documents onto selected application types for workflow 1, not mandatory | Changed | Same script, `IsMandatory = 0` |
| Metered-taxi "Is Uber application?" question | Implemented | `ApplicationRequest/ModeDetails.cshtml` when mode id is 4 |
| Duplicate and convert meter taxi to e-hailing | Changed | Commits `112a7b1` and `0ac4aef`. `112a7b1` only adds a line to `Neo.Legitimate.Web.csproj`. The conversion behaviour itself was not re-derived beyond those subjects |

### Search, print, reports, background work

| Feature | Status | Evidence |
|---|---|---|
| Advanced search using `BaseUrl` | Changed | Commits `be5879f`, `8fa1d50` |
| Legitimate, NLTIS, and LTPS ASMX search | Implemented | `*Interface.asmx.cs` |
| OLAS imported-licence search | Implemented | `GetOLASApplications` |
| Receipt and licence printing | Implemented | `Neo.Legitimate.Printing` |
| SSRS server reports | Implemented | `Neo.Legitimate.ServerReports` |
| Windows service scheduler | Implemented | `Neo.Legitimate.WinService` |
| TLS 1.2 for the SMTP messages worker | Changed | `Program.cs`, `ProjectService.cs`, commit `0a9b1c8` |
| System trigger: push a verification task, with full exception text in the service trace | Changed | `SystemTriggerHandler.cs` |
| Auto verification task handler | Implemented | `WinService.Extensions/TaskHandlers/AutoVerificationTask.cs` |
| Integration console | Implemented | `Neo.Legitimate.IntegrationConsole` |
| Affected-application document scanner | Implemented | `AffectedApplicationDocumentScanner` |
| Client and Windows-service installers | Implemented | `Neo.Legitimate.Setup.Client`, `Neo.Legitimate.Setup.WindowsService` (InstallShield `.isl`) |

### Reporting groups

`ReportGroups`: ApplicationReports, OLReports, AssociationReports, MemberReports, RouteReports, General, VehicleReports.

Named report securables include activity, adjudication decisions, allowed-new-licence summary, applications in progress, completed applications, incomplete applications, member details, missing purification data, money received, route details, OLAS migration status, operating-licence annexure, licences issued, and licences awaiting issuing.

## Removed or disabled in source

| Item | What the code does | Provenance |
|---|---|---|
| Registration required for unscheduled midibus/minibus on pre-check | The check is commented out | Implemented as disabled |
| Document type 6006, copy of vehicle licence disc | The insert is commented out. Comment calls it optional | Not inserted by this script |
| Fingerprint authentication | Config flag false | Disabled in this config |
| Global `HandleErrorAttribute` | Commented out in `Global.asax.cs` | Not registered |
| OWIN `ConfigureAuth` | Commented out in `Startup.cs` | Not called |

## Not features of this repository

- Provider registry and the e-hailing notes that exist only under the local `LegitimateLicences_QA` folder. That folder is not this Git repository.
- Workflow step text, fee amounts, and gazette notice length. Those are database content and were not in the scripts that define them as rows.

## Duplicate views

The same validation script exists under `Neo.Legitimate.Web/Views/Applications/` and `Neo.Legitimate.Applications/Views/Applications/`. The web `.csproj` includes the Web copies as content. A change to only one tree would not change the other. Status: **Implemented** duplication. Whether publish uses only the Web tree is **Unknown / Requires Confirmation**.
