# Features — magusEventsXamarin

Evidence date: 2026-10-09. Inspected revision: `master` at `607005b`.

Status words: **Current** (runs on the tip if the page is reachable), **Dormant** (compiled, not started by the UI), **Removed** (call sites commented out), **Incomplete** (project or path exists and does not finish the behaviour).

No feature list existed in the source tree. Grouping below is **Inferred** from screens and commit subjects.

## Current

| Feature | What the operator sees | Where |
|---|---|---|
| Header | "MAGUS \| 1.6.0" until an event save replaces it with the event name (max 23 characters). SETTINGS button. | `HeaderBar.xaml`, `HeaderBar.toggleInfo` |
| Fixed code dialog | Four numeric boxes and SUBMIT. Wrong code clears and shows the dialog again. | `OTPDialog.xaml.cs` |
| Event placeholder | "- SELECT EVENT -" when no mode has been saved. | `EventScan.xaml`, `App` constructor |
| Event settings | Event picker, mode picker (APPLICATION MODE, VAP MODE), NEXT, SYNC SCANS, EXIT. | `EventSettings.xaml` |
| Mode picker | APPLICATION SCAN and VAP SCAN. Each stores the mode and opens that scanner. | `SelectMode.xaml` |
| Application scanner | Prompt "SCAN APPLICATION". After a code: name, organisation, category, role colour, zone numbers or icons, GRANTED or DENIED, sound on Android. | `ApplicationScan.xaml`, `ApplicationScan.xaml.cs` |
| Application zone settings | DOWNLOAD APPLICATIONS, SUBMIT, zone grid (number, name, active, lock). | `ApplicationSettings.xaml` |
| VAP scanner | "SCAN VEHICLE", vehicle and driver lines, gate, zones, CANCEL. | `VAPScan.xaml` |
| VAP settings | DOWNLOAD PERMITS, SUBMIT, gate picker, loading-zone grid. | `VAPSettings.xaml` |
| Local database | SQLite file in the personal folder. Android copies `Assets/database.sqlite3` when the file is missing. | `Database.cs`, `FileAccessHelper.cs` |
| Application scan log | Insert on grant and deny. | `ApplicationScan.UserProfile` |
| Manual scan sync | SYNC SCANS posts up to three unsent rows at a time and marks them sent. | `Webservices.SyncScanLog` |
| Android sounds | `ok.wav` on grant, `Bazz.wav` on deny. | `MagusEvents.Android/Services/Audio.cs` |
| Keyboard hide | Android `DroidKeyboardHelper`, used when the application scan appears and after a correct code. | `DroidKeyboardHelper.cs`, `IKeyboardHelper` |
| Screenshots | Eight PNGs of the screens above, including the code dialog. | `Screenshots/` |

## Startup rule

| Saved `Mode` | First page |
|---|---|
| key missing | `EventScan` |
| `"0"` | `ApplicationScan` |
| anything else, including `"1"` | `VAPScan` |

## Completed in history (still the current behaviour unless noted)

Commit subjects are the only record. There is no changelog file.

| When | Commit | What landed |
|---|---|---|
| 2019-08-13 | `5c0f6b3` | Initial commit |
| 2019-08-15 | `5f66991` | Scan screen |
| 2019-10-16 to 2019-10-18 | `6016a59`, `e51ca58`, `173789d` | Master-detail shell, event scan, event settings, application scan, VAP scan, screenshots |
| 2019-10-23 to 2019-10-25 | `4bfb86d`, `84a8158`, `b8d4f73` | Code dialog, navigation, AppState, zone load and save |
| 2019-11-04 to 2019-11-08 | `d0635a4`, `30a6b8e`, `1bcfc1f`, `1d295b8` | VAP scan behaviour and settings API calls |
| 2019-11-11 | `f4c280a` | Progress indicator and version number |
| 2019-11-12 | `84c20ce`, `cdc4221` | Footprint file import and accreditation file import |
| 2019-11-16 | `cdc4221` | Further cosmetic changes and refactor |
| 2019-11-20 | `ba1376a` | Sound added. Updating removed (timers later left commented) |
| 2019-12-09 | `ddc2db7` | VAP screen changes |
| 2020-03-02 | `6220cd7` | Timers and cosmetic changes |
| 2020-08-17 | `607005b` | API scan log. Tip of `master` |

## Dormant (present, not started by the current UI)

| Feature | Evidence |
|---|---|
| Applicant delta download | `Webservices.CheckUpdates`. Timer in `ApplicationScan` and `VAPScan` is commented out. |
| Accreditation file check on a timer | `Webservices.CheckAccreditations`. Timer commented out. The same download still runs at the end of DOWNLOAD APPLICATIONS. |
| VAP delta download | `Webservices.CheckVapUpdates`. Timer commented out. |
| NFC lookup | `Person.GetByNFC`, `Vap.GetByNFC`. Callers only pass `nfc = 1` from inside `UserProfile` / `VehicleProfile`, and no UI passes that flag. |
| ZXing camera scan | `ZXing.Net.Mobile.Forms` referenced. `MainActivity` calls `ZXing.Net.Mobile.Forms.Android.Platform.Init`. No `ZXingScannerView` in the XAML. |
| Meal / food model | `Meals.cs`, `Food` table, `Events.MealDays` / `MealsPerDay`. No screen reads them. `GetFoodProfile` and `GetEvent` return empty objects. |
| Check-in model | `Checkin.cs` is properties only. |
| Barcode length | `Events.BarcodeLength` column. `GetBarcodeLength` returns 0. |
| Zone save helpers | `SaveZoneActive`, `SaveZoneLock`, and the loading-zone pair. Settings pages use their own SQL. |
| Image update query | `GetImageUpdates` body is commented out. `GetPersonProfile` forces `User_pic` to `"1"`. |
| EcoCore, NFCSharp, Entity Framework, NAudio | Referenced or vendored. No application call site outside `packages/` was found. |

## Removed from the live path (source kept as comments)

| Feature | Evidence |
|---|---|
| Text scan report | `scan_{AID}.txt` writes in `ApplicationScan` are commented. Comment: delimiter change on 20191211, table write on 20200804. |
| FTP upload from the SYNC SCANS button | `EventSettings` calls `SyncScanLog`. The `UploadScanLog()` line above it is commented. |
| Background updates | See dormant timers. Commit `ba1376a` says "removed updating". |

The 30-minute timer on `ApplicationScan` still calls `UploadScanLog`. That is **Current** as a timer and **Incomplete** as a feature: the file it uploads is no longer written, and errors are swallowed.

## Incomplete

| Feature | What is missing |
|---|---|
| iOS app | `MagusEvents.iOS` is in the solution and loads `App`. It does not copy `database.sqlite3`, does not implement `IAudio` or `IKeyboardHelper`, and does not init ZXing. `Info.plist` has no camera usage string. |
| Event scan | Screen has no barcode field. It is a landing label plus the header. |
| Scan sync result | Success alert is shown without reading the HTTP result. `DownloadScanStringCompleted` does not update rows. Rows are marked sent first. |
| Application scan log columns | Insert column list and value list diverge after `ProfileApprovedZones`. See business rule BR-014. |
| VAP audit | Vehicle and driver results are not written to `ScanLog`. |
| Version | Header 1.6.0. Manifest `versionName` 1.0. iOS bundle version 1.0. |
| Package identity | `com.companyname.magusevents` is the Xamarin template id. |

## Not in this repository

- Footprint server, admin UI, and database.
- User accounts for operators.
- Push notifications, queues, or a background sync service beyond the in-page timers.
- CI, unit tests, UI tests, or a store listing.

## Planned

No issue tracker, TODO file, or branch describes future work. **Unknown / Requires Confirmation** whether anyone still plans to ship this client.
