# Features — convergence

Evidence date: 2026-10-18.

Source: `master` at `6b66438` (2021-03-15). "Recently changed" uses that commit and the dated comments in the files. Menu placement is **Unknown**. A page is listed only when `sysMenuLevel2.strUrl` points at it and the user's group has a security row. `Nemo::iniSecurity` then forces `blnView = 1` for the current script.

This list is for repository `convergence`. It is not the feature list of `convergence_production`.

## Current features

### Shell and access

| Feature | Status | Evidence |
|---|---|---|
| Email and password sign-in | **Implemented** | `login.php`, `_framework/_nemo.password.cls.php` |
| Session shell | **Implemented** | `layouts/layout.back.incl.php`, `_framework/_nemo.cls.php` |
| Security-group menu | **Implemented** | `_framework/_nemo.menu.cls.php` |
| Five-failure lockout | **Implemented** | `CheckSecurityLock` in `_framework/system.functions.inc.php` |
| Password reset email | **Implemented** | `login.php` calls `ajaxFunctions.php` `type=SendResetEmail` |
| Profile and profile picture | **Implemented** | `my.profile.php`; header reads `` `Profile:PicturePath` `` from `sysUser` |
| Users | **Implemented** | `user.php`, `includes/user.cls.php` |
| Security groups | **Implemented** | `security.group.php`, `includes/security.group.cls.php` |
| System settings | **Implemented** | `settings.php`, `includes/settings.cls.php` (`sysSettings`) |
| FAQ / Help | **Implemented** | `faq.php`, `faq.console.php`. Label comment 2017-04-24 changed the label to "FAQ / Help" |
| Audit log screen | **Implemented** | `audit.log.php`, `includes/audit.log.cls.php` |
| Translations | **Implemented** | `_framework/_nemo.translations.inc.php`. Which languages are loaded is **Unknown** |
| Logout | **Implemented** | Header link to `login.php`, which `unset`s `$_SESSION[USER]` |

### Home

| Feature | Status | Evidence |
|---|---|---|
| Six summary tiles | **Implemented**, values are literals | `Dashboard::TileStats` |
| Embedded WBS chart | **Implemented** | `Dashboard::RenderProjectWBS`, Lucidchart iframe, always included from `index.php` |
| Static to-do lists | **Implemented**, not loaded from tickets | `Dashboard::TodoTickets` |
| 30-day billing chart | **Present, not shown** | `Dashboard::GrowthChart` is commented out in `index.php` |

### CRM

| Feature | Status | Evidence |
|---|---|---|
| Clients | **Implemented** | `client.php`, `includes/client.cls.php` (`crmClient`, `vieClient`) |
| Contacts | **Implemented** | `contact.php`, `includes/contact.cls.php` (`crmContact`) |
| Suppliers as a client type | **Implemented** | `supplier.php`. Comment: supplier is a view on `crmClient` where the type is supplier |
| Client test wizard | **Present** | `clientTest.php`, `includes/clientTest.cls.php`. Whether it is on a menu is **Unknown** |

### Helpdesk

| Feature | Status | Evidence |
|---|---|---|
| Tickets | **Implemented** | `ticket.php`, `includes/ticket.cls.php` (`crmTicket`) |
| Client authorise / decline page | **Implemented** | `ticket.ops.php` (2017-09-21) |
| Tasks | **Implemented** | `task.php`, `includes/task.cls.php` (`crmTask`) |
| SLA task screen with Task, Billing, Fault and Fix, Technical tabs | **Implemented** | `sla.task.php` comment 2018-02-01 |
| Older SLA task page | **Present** | `sla.taskX.php` |
| SLA ticket template | **Implemented** | `sla.ticket.php`. `sla.ticket.backup.php` is a second copy |
| SLA schedule | **Implemented** | `sla.schedule.php`, `includes/sla.schedule.cls.php` |
| Daily SLA ticket creation | **Implemented** | `cron.daily.createticket.php` (2017-06-22) |
| Time entry | **Implemented** | `time.php`, `includes/time.cls.php` (`crmTime`) |
| Calendar schedule | **Implemented** | `schedule.php` (2017-08-07), FullCalendar ajax in `ajaxFunctions.php` |
| Fault codes | **Implemented** | `fault.codes.php`. Comment 2018-02-01: table renamed to `crmTaskFault` |
| Fix codes | **Implemented** | `fix.codes.php` (`crmTaskFix`, `crmCodeFix`) |
| Ticket operations notes | **Present** | `ticket.ops.php` shows only the result message and "Thank you!" |

### Quoting and catalogue

| Feature | Status | Evidence |
|---|---|---|
| Products | **Implemented** | `product.php` (2017-02-28) |
| Product bundles and builder | **Implemented** | `product.bundle.php` (2017-07-25) |
| Proposals | **Implemented** | `proposal.php`, `includes/proposal.cls.php` |
| Proposal PDF | **Implemented** | mPDF in `includes/proposal.cls.php` |
| Proposal email | **Implemented** | `NemoEmail` from the proposal class |
| Supplier price request and supplier order mail | **Implemented** | `Proposal::getSupplierEmail` and the send methods |
| Proposal revision | **Implemented** | `Proposal::NewRevision` |
| Proposal templates | **Implemented** | `proposal.template.php` (2017-03-09) |
| Proposal dashboard | **Implemented** | `proposal.dashboard.php` (2017-03-16) |
| Payment terms | **Implemented** | `payment.terms.php` (`crmPaymentTerms`) |
| Previous proposal controller | **Present, not the live page** | `proposal.bak.php`, `includes/proposal.bak.cls.php` |

### Training

| Feature | Status | Evidence |
|---|---|---|
| Courses | **Implemented** | `edu.training.course.php` |
| Materials and bookings | **Implemented** | `edu.training.material.php`, `includes/edu.training.material.booking.cls.php` |
| Certificates | **Implemented** | `edu.training.certificate.php`, upload type `UploadTrainningCertificate` |
| Certificate files on disk | **Present** | `edulab/training_certificates/` |

### Reporting and communication

| Feature | Status | Evidence |
|---|---|---|
| Paint Your Day Green report | **Implemented** | `pydg.report.php` (2017-09-02) |
| Alternate report class kept on disk | **Present, unused by the page** | `includes/pydg.report.cls.alt.dont.delete.php` |
| Email log and compose | **Implemented** | `email.php`, `includes/email.cls.php` (`tblEmail`). Comment: only `blnSpecial` may send a new email |
| Email templates | **Implemented** | `email.template.php` (2017-03-06) |
| Email test page | **Present** | `email.test.php` sends to a hardcoded address |
| List export to Excel | **Implemented** in the list framework | `_framework/_nemo.list.cls.php` `new PHPExcel()` |
| SMS helper | **Present, no caller** | `SendSMS` in `system.functions.inc.php` |
| Widgets | **Present** | `widget.php`, `_framework/_nemo.widget.cls.php`. The header's message dropdown is commented out |
| Communication class | **Present** | `includes/communication.cls.php` (2017-04-18) |

### Reference data

| Feature | Status | Evidence |
|---|---|---|
| Departments | **Implemented** | `department.php` (2017-03-07) |
| Department statuses, per process | **Implemented** | `department.status.php` (2017-03-15) |
| Settings maintenance | **Implemented** | `settings.php` |

## Completed features

"Completed" here means the behaviour is in `master` and later comments do not mark it removed.

- Salted passwords (2016-09) and the login page (2017-01).
- Guest access removed (2017-03-07 comment in `_nemo.cls.php`).
- Proposal builder, revisions, templates, and PDF (2017-02 through 2017-07).
- Schedule calendar (2017-08).
- Client ticket authorisation (2017-09, refined 2017-11).
- PHP 7.4 syntax pass (2021-03-15), including a second PHPExcel tree.

## Planned features

No issue tracker, roadmap, or TODO file defines future work.

Comments that describe unfinished intent:

| Item | Evidence | Status |
|---|---|---|
| Home tiles and to-do lists backed by real queries | `Dashboard::TileStats` selects literal numbers; `TodoTickets` is static HTML | **Not implemented** |
| Growth chart on the home page | Call is commented out in `index.php` | **Not shown** |
| Header message inbox | Markup commented "MIGHT USE AT A LATER STAGE" | **Not implemented** |
| Password max age | Setting bootstrap is `false` | **Disabled** unless `sysSettings` overrides it |

## In development at the 2021 tip

Nothing in git is marked in progress after `6b66438`. `clientTest.php`, `test.php`, `controls.pj.php`, `controls.php`, and `xtestNestedSortx.php` are developer pages left in the tree. Provenance: **Present**. They are not a test suite.

## Recently changed

The only commit after the 2019 import is `6b66438` (2021-03-15):

- Curly-brace string offsets updated for PHP 7.4 in application files (`project.functions.inc.php`, `ajaxFunctions.php`, `includes/security.group.cls.php`, and several `_framework` classes).
- `system2.php` added. `_framework/_nemo.basic.cls.php` includes `system2.php`.
- `PHPExcel20210315/` added and `PHPExcel/` patched.
- A file under `SESSION/` added.

Application features were not added in that commit. Feature dates after 2018 come from comments, not from git.

## Deprecated or unused in this tree

| Item | Evidence |
|---|---|
| `proposal.bak.php` and `includes/proposal.bak.cls.php` | Superseded by `proposal.php` / `proposal.cls.php` |
| `sla.ticket.backup.php`, `sla.taskX.php` | Parallel copies of the SLA screens |
| `_nemo.control2.clsOLD.php`, `_nemo.details.clsOLD.php`, `_nemo.details2.clsOLD.php` | Old framework classes kept beside the current ones |
| `includes/pydg.report.cls.alt.dont.delete.php` | Filename says not to delete; the page includes `pydg.report.cls.php` |
| `system.php` | Parallel config. The framework include is `system2.php` |
| `menu.php` | Clears the user session and renders an empty content slot |
| `report.php` | Zero-byte file |
| `Dashboard::GrowthChart` | Not called |
| `SendSMS` | No caller |
| `DATABASE_SETTINGS_AUX` | Declared only |

## Not in this repository

These are in `convergence_production` and were looked for here. They are absent:

- HR dashboard, leave, roles, KPAs, reviews.
- Hourly cron, email scry, under-construction page.
- File-integrity monitoring.

Provenance: file absence at `6b66438`.
