# Features — SHOU-1 (The Shoulder Practice)

Evidence date: 2026-10-04.

Source: `git@bitbucket.org:overdrive/shou-1.git`, `main` at `30a710c` (2026-09-22).

Provenance labels: **Documented**, **Implemented**, **Inferred**, **Planned**, **Unknown**.

"Current" means the code is on `main` and a page, control, or class exists. It does not mean the practice has the module switched on. Module rows live in the database (`oModule`) and are filtered by `oUser.modules`.

## Current features — practice-specific

These branches or files exist because the tenant is SHOU-1 / The Shoulder Practice.

| Feature | What it does | Evidence | Status |
|---|---|---|---|
| Practice public shell | Title, meta description, From address `no-reply@theshoulderpractice.net`, TSP login image | `core_custom/SHOU-1/Core.master`, `Web.config`, `Login.aspx` | **Implemented** |
| Ask Dr Christelle home token | Replaces `{Image Ask Dr Christelle}` from a gallery of that title | `Default.aspx.cs` | **Implemented** |
| Patient info landing | Website users redirect to `/pages/patient~info` | `Login.aspx.cs`, `Register.aspx.cs`, `Core.master.cs` | **Implemented** |
| Month-end checklist | Modal when the login email matches `MonthEndUser` | `Login.aspx.cs` | **Implemented**. Setting value **Unknown** |
| Surgical notes surfaces | Form, grid, and view for surgical notes, including shoulder drawing fields | `controls/surface_custom/SurgicalNotes_*` | **Implemented**. Not present on `core-dev` |
| Physiotherapist and post-op letters | Fills physiotherapist letter fields; attaches rehabilitation PDF when the file exists; post-consultation and post-operation letter file names | `business/classes/xSurfaceCustomAction.cs` | **Implemented** |
| Practice lookup by name | Loads `oMedicalPractice` where name is "The Shoulder Practice" | `business/classes/xSurfaceCustomMethod.cs` | **Implemented** |
| DISC B tariff default | Default tariff when the plan is empty or not WCA/FedHealth | `business/classes/xDebtors.cs`, `controls/module/enquiry.ascx.cs` | **Implemented** |
| Patient sign-in by mobile and date of birth | Looks up surface `PatientProfile` | `controls/module/medicalPatientSignin.ascx.cs` | **Implemented** |
| Medical scheme display names | BHF code shown as scheme name in grids and views | `App_Code/MedicalSchemeDisplay.cs` | **Implemented** |
| Enquiry: deleted history | Link buttons open a deleted-lines panel | `controls/module/enquiry.ascx`, `enquiry.ascx.cs` | **Implemented** |
| Enquiry: unprocessed remittance advices | Link buttons titled "Unprocessed Remittance Advices" | `controls/module/enquiry.ascx` (`lnkUnprocessedEra*`) | **Implemented** |
| Central auth for this tenant | BCrypt hashes and deactivation on `Framework_EVOL-1`; tenant views | `PasswordService`, `data/Scripts/SHOU-1/SHOU-1_3.0.*` | **Implemented** |
| Password migration tool | Moves legacy TripleDES passwords for `customerCode = 'SHOU-1'` | `tools/password-migrate/` | **Implemented** |

## Current features — platform modules on the SHOU-1 site

The tenant site `core_custom/SHOU-1` includes these Palette modules. The enum `pNums.Module` in `business/enums/pNums.cs` is the catalogue. Pages are the entry points.

### Public site and accounts

| Feature | Entry | Notes |
|---|---|---|
| Home and canvas pages | `Default.aspx`, `Canvas.aspx` | Page body is database content |
| Search | `Search.aspx` | |
| Login, register, reset, unsubscribe | `Login.aspx`, `Register.aspx`, `Reset.aspx`, `Unsubscribe.aspx` | |
| Products, cart, media | `Products.aspx`, `Cart.aspx`, `Media.aspx` | Use by this practice is **Unknown** |
| Enquiries from the site | `controls/module/enquiry.ascx` also backs billing | Public enquiry versus billing enquiry share a large control |

### Admin shell

Fixed items in `controls/admin/menu.ascx.cs`: Dashboard (`Admin.aspx`), Pages (`Admin_Canvas.aspx`), Modules dropdown, Medical dropdown, Sales dropdown, Support (`Admin_Support.aspx`), and Setup when `admin.isSetup` (company, notes, email templates, licence, SMS credits).

| Feature | Page |
|---|---|
| Users | `Admin_Users.aspx` |
| Banners | `Admin_Banners.aspx` |
| Campaigns | `Admin_Campaigns.aspx` |
| Content | `Admin_Content.aspx` |
| Customers | `Admin_Customers.aspx` |
| FAQ | `Admin_FAQ.aspx` |
| Gallery | `Admin_Gallery.aspx` |
| Media | `Admin_Media.aspx` |
| Products, categories, brands | `Admin_Products.aspx`, `Admin_ProductCategories.aspx`, `Admin_ProductBrands.aspx` |
| Promotions | `Admin_Promotions.aspx` |
| Projects | `Admin_Projects.aspx` |
| Job cards | `Admin_Jobcards.aspx` |
| Tasks | `Admin_Tasks.aspx` |
| Calendar | `Admin_Calendar.aspx` |
| Reports | `Admin_Report.aspx` |
| Releases | `Admin_Releases.aspx` |
| Templates | `Admin_Templates.aspx` |
| Surface builder and surface code | `Admin_Surface.aspx`, `Admin_SurfaceCode.aspx` |
| Loyalty groups and stores | `Admin_LoyaltyGroups.aspx`, `Admin_LoyaltyStores.aspx` |
| Setup and SMS credit | `Admin_Setup.aspx`, `Admin_SMSCredit.aspx` |
| Sales items | `Sales_SalesItems.aspx` |

Loyalty, job cards, promotions, and the product catalogue are **Implemented** as pages. Whether The Shoulder Practice uses them is **Unknown / Requires Confirmation**.

### Medical

| Feature | Page or control |
|---|---|
| Practices, doctors, schemes, tariffs, procedures | `Medical_Practices.aspx`, `Medical_Doctors.aspx`, `Medical_Schemes.aspx`, `Medical_Tariffs.aspx`, `Medical_Procedures.aspx` |
| ICD-10, diagnosis, conditions, symptoms, trauma | `Medical_ICD10.aspx`, `Medical_Diagnosis.aspx`, `Medical_Conditions.aspx`, `Medical_Symptoms.aspx`, `Medical_Trauma.aspx` |
| Medical administrators, practice extras | `Medical_MedAdmins.aspx`, `Medical_PracticeExtras.aspx` |
| Patient queue | `controls/module/medicalPatientQue.ascx` |
| History, symptoms, subjectives, complaints | `medicalHistory.ascx`, `medicalSymptoms.ascx`, `medicalSubjectives.ascx`, `medicalComplaints.ascx` |
| Body map and image map | `bodyMap.ascx`, `imageMap.ascx` |
| Procedure booking | `procedureBooking.ascx` |
| MediSwitch MSV | `mediswitchMSV.ascx` |
| Debtors reports | `debtorsReports.ascx` |
| Billing instructions | `controls/module_custom/billingInstructions.ascx` (also on `core-dev`) |

### Surface capabilities

Field types in `pNums.FieldType` include text, number, date, picklist, grid, attachment, formula, debtors, MediSwitch, signature, and drawing. Matching module ids include `SurfaceNotes`, `SurfaceGallery`, `SurfaceGalleryVideo`, `SurfaceCommunication`, `SurfaceEvent`, `SurfaceSignature`, `SurfaceDrawing`.

Drawing on the surface form uses jSignature (commit `64bb0e0`, still present as drawing controls).

### Documents, statements, and notes

| Feature | Evidence |
|---|---|
| Debtor statement PDF and email | `xDebtors` template type Debtors |
| Note types: general, email, task, statement, payment, claim, billing, confidential, and others | `pNums.NoteType` |
| Attachments on an entity, including a history mode that aggregates note attachments | `controls/admin/attachments.ascx.cs` |
| Licence key check (customer name, date, code) | `business/handlers/licenceHandler.cs` |

### Operations outside the website

| Feature | Evidence | Status |
|---|---|---|
| Palette scheduler (campaigns, loyalty email hour, transaction lock, MediSwitch, surface import) | `tools/scheduler/Program.cs` | **Implemented** |
| Google Sheet import | `tools/scheduler/GoogleSheetImports.cs`, `SchedulerTool` | **Implemented**. Used when the process is started with a `googlesheetimport` argument |
| Constructor (generate framework objects from tables) | `tools/constructor` | **Implemented** as a developer tool |
| Surface data importer | `tools/dataImporter` | **Implemented** as an operator tool |
| Table exporter | `tools/exporter` | **Implemented** as an operator tool |
| WCF dynamic data and version files | `service/App_Code/Iframework_service.cs` | **Implemented** |
| Video thumbnail helper | `library` NReco.VideoConverter, noted in commit `d6c004c` | **Implemented** in the library. Call sites for this tenant were not fully enumerated |

## Recently changed (git history on `main`)

History before 2025-03-05 is not in this clone. Older behaviour is only visible where comments or SQL filenames retain dates.

| When | Change | Status now |
|---|---|---|
| 2026-02-25 | Tariff `0083`: "Set Modifiers" disabled; posting does not add modifier lines | **Implemented** (commit `1318028`) |
| 2026-07-06 | `.env.example`; BCrypt package; login redirect changes; CodeDom provider references | **Implemented** |
| 2026-07-06 | Admin controls for attachments, banners, and campaigns | **Implemented** |
| 2026-07-07 | BCrypt hashing, password policy, login lockout | **Implemented** |
| 2026-07-07 | `deploy-codedom.ps1` and AfterBuild copies into `core_custom/SHOU-1/Bin` | **Implemented** |
| 2026-07-08 | Deactivate and reactivate users | **Implemented** |
| 2026-07-09 | Connection strings and Google credentials from the environment; `client_secrets.json` removed from git; Sonar project file added | **Implemented** |
| 2026-07-13 | User writes go to the central auth database | **Implemented** |
| 2026-09-02 | `MedicalSchemeDisplay`; debtors assisted report defaults to today; generated surface-control backups gitignored | **Implemented** |
| 2026-09-09 | Calendar `StartOfWeek` and overlap/recurring fetch | **Implemented** |
| 2026-09-22 | Enquiry links for deleted history and unprocessed remittance advices; jSignature drawing; cookie helper updates | **Implemented** (merged as pull request #1) |

## In development

No branch other than `main` was inspected as the product line. `main` is the branch named in the onboarding request and is the clone's `HEAD`. Open work on other branches was not listed. Status of unmerged work: **Unknown**.

## Planned

Nothing in the repository describes a planned feature that is not already coded. **Unknown / Requires Confirmation**.

## Deprecated or removed

| Item | Evidence | Status |
|---|---|---|
| Committed `business/client_secrets.json` | Removed in `e65f404`; path is gitignored | **Removed** from git |
| Legacy `pal_User.password` as the only store | Still read as a fallback in `PasswordService.VerifyUserPassword`. New sets clear that column and write BCrypt | **Implemented** fallback. Full retirement is **Unknown** |
| Web-cache MediSwitch processing | Commented in `Global.asax`; scheduler is the path that remains | **Removed** from the web callback (commented). **Implemented** on the scheduler |
| Live MediSwitch URLs | Present as XML comments; QA URLs are the active appSettings | **Implemented** config is QA. Live is not active in this file |
| `core/` website folder | Solution still references `http://localhost:45935` for a project named `core`. The folder is absent | **Unknown** whether retired |

`pNums.Module` members `SurfaceGallery` and `SurfaceGalleryVideo` carry comments "TPS - Pro-Pro-1" and "TPS - Pro-Pro-9". Those comments name another product increment. They are not a SHOU-1 deprecation record.

## Features present for other tenants in this repo

Do not treat these as SHOU-1 features.

| Tree | Why it is here |
|---|---|
| `core_custom/GLOB-1`, `core_custom/GLOB-3` | Other site forks. Sonar excludes them |
| `data/Scripts/REAP-1`, `CAPI-1`, `CHUU-1`, `CLOS-1`, `INDE-*`, `OLIV-1`, `ROBI-1`, `SCHO-1`, `SHEN-1`, `STUD-1` | Other tenant script sets |
| `tools/CAPI.Custom`, `tools/CEP` | Quote and purchase-order library aimed at a CAPI database |

Remittance listing via `sp_RemittanceListingByDate` was found under `core_custom/GLOB-1`, not as a separate report page on the SHOU-1 copy. SHOU-1 exposes unprocessed remittance advices from the enquiry module instead.

## Mobile

`mobile/mobile.csproj` is a class library with a Xamarin asset reference and no screens. A patient mobile app is **not** implemented in this repository. **Unknown / Requires Confirmation** if one exists elsewhere.
